把C6713的McBSP配置成SPI主模式,运行程序后在CLKX管脚没有时钟,DX管脚没有数据输出,FSX管脚也没有信号输出。McBSP配置如下:
MCBSP_Config Config_Spi_Master = {
MCBSP_SPCR_RMK(
MCBSP_SPCR_FREE_DEFAULT,
MCBSP_SPCR_SOFT_DEFAULT,
MCBSP_SPCR_FRST_YES,
MCBSP_SPCR_GRST_YES,
MCBSP_SPCR_XINTM_XRDY,
MCBSP_SPCR_XSYNCERR_NO,
MCBSP_SPCR_XRST_YES,
MCBSP_SPCR_DLB_OFF,
MCBSP_SPCR_RJUST_RZF,
MCBSP_SPCR_CLKSTP_NODELAY, //Clock phase: 10
MCBSP_SPCR_DXENA_OFF,
MCBSP_SPCR_RINTM_RRDY,
MCBSP_SPCR_RSYNCERR_NO,
MCBSP_SPCR_RRST_YES
),
MCBSP_RCR_RMK(
MCBSP_RCR_RPHASE_SINGLE, //Must single phase in spi mode
MCBSP_RCR_RFRLEN2_OF(0),
MCBSP_RCR_RWDLEN2_8BIT,
MCBSP_RCR_RCOMPAND_MSB,
MCBSP_RCR_RFIG_NO,
MCBSP_RCR_RDATDLY_1BIT, //Master mode: RDATDLY and XDATDLY must be 1
MCBSP_RCR_RFRLEN1_OF(0), //Must be 1 frame in spi mode
MCBSP_RCR_RWDLEN1_32BIT,
MCBSP_RCR_RWDREVRS_DISABLE
),
MCBSP_XCR_RMK(
MCBSP_XCR_XPHASE_SINGLE, //Must single phase in spi mode
MCBSP_XCR_XFRLEN2_OF(0),
MCBSP_XCR_XWDLEN2_8BIT,
MCBSP_XCR_XCOMPAND_MSB,
MCBSP_XCR_XFIG_NO,
MCBSP_XCR_XDATDLY_1BIT, //Master mode: RDATDLY and XDATDLY must be 1
MCBSP_XCR_XFRLEN1_OF(0), //Must 1 frame in spi mode
MCBSP_XCR_XWDLEN1_32BIT,
MCBSP_XCR_XWDREVRS_DISABLE
),
MCBSP_SRGR_RMK(
MCBSP_SRGR_GSYNC_FREE,
MCBSP_SRGR_CLKSP_RISING,
MCBSP_SRGR_CLKSM_INTERNAL,
MCBSP_SRGR_FSGM_DXR2XSR, // Every DXR to XSR copy generates FSX
MCBSP_SRGR_FPER_OF(0),
MCBSP_SRGR_FWID_OF(0),
MCBSP_SRGR_CLKGDV_OF(9) //CLKG = CPU/2/CLKGDV
),
MCBSP_MCR_DEFAULT,
MCBSP_RCER_DEFAULT,
MCBSP_XCER_DEFAULT,
MCBSP_PCR_RMK(
MCBSP_PCR_XIOEN_SP,
MCBSP_PCR_RIOEN_SP,
MCBSP_PCR_FSXM_INTERNAL, //Must be 1 in master mode
MCBSP_PCR_FSRM_EXTERNAL,
MCBSP_PCR_CLKXM_OUTPUT, //Must be 1 in master mode, CLKG generates CLKX
MCBSP_PCR_CLKRM_INPUT,
MCBSP_PCR_CLKSSTAT_0,
MCBSP_PCR_DXSTAT_0,
MCBSP_PCR_FSXP_ACTIVELOW, //Chip selected active low(master mode)
MCBSP_PCR_FSRP_ACTIVELOW,
MCBSP_PCR_CLKXP_FALLING, //Clock polarity: 1
MCBSP_PCR_CLKRP_FALLING
)
};
主函数
void main(void)
{
CSL_init();
hMcbsp_Master = MCBSP_open(MCBSP_DEV1, MCBSP_OPEN_RESET);
MCBSP_config(hMcbsp_Master, &Config_Spi_Master);
/*Start McBSP and timer1*/
MCBSP_start(hMcbsp_Master, MCBSP_RCV_START | MCBSP_XMIT_START | MCBSP_SRGR_START
| MCBSP_SRGR_FRAMESYNC, 0x00003000);
while(1)
{
MCBSP_write(hMcbsp_Master, 0xaaaaaaaa);
while(!(MCBSP_xrdy(hMcbsp_Master)));
}
}
Shine:
看SPI mode的配置没什么问题,执行好MCBSP_config语句后,查看一下各个寄存器的值是否正确配置了。
Kaixue Hao:
回复 Shine:
我在 MCBSP_start前面打了断点,下面是执行到断点McBSP寄存器的值:
下面这张是从断点处继续运行后的寄存器值:
麻烦再帮忙看一下寄存器的值是否正确,我自己没看出来什么问题。谢谢!
Shine:
回复 Kaixue Hao:
寄存器值都正确写进去了。试试McBSP作为普通的串口 ,DLB模式下能实现自环吗?
Shine:
回复 Shine:
跑一下csl里的mcbsp例程C6xCSL\examples\c6000\dsk6713\csl\mcbsp\mcbsp1
Kaixue Hao:
回复 Shine:
跑McBSP自环例程的时候,可以跑起来,DXR和DRR的值都是对的,最后跑完循环时也可以printf输出“TEST PASSED”,但是在CLKX管脚用示波器看不到时钟
Kaixue Hao:
回复 Shine:
这是自环跑起来时候截的一张寄存器的图
Shine:
回复 Kaixue Hao:
请问是自己的板子还是EVM板?
如果配成普通接口,非DLB模式,有clkx输出吗?
Kaixue Hao:
回复 Shine:
是自己的板子。
不好意思,我没太明白您说的配置成普通接口是什么意思,您可以再解释一下吗?
谢谢。
Shine:
回复 Kaixue Hao:
普通口的意思是非clock stop模式。
2个mcbsp口都是这个问题吗?
Shine:
回复 Shine:
对了,看 一下DEVCFG寄存器的MCBSP0DIS,MCBSP1DIS是否设成0了?