TI中文支持网
TI专业的中文技术问题搜集分享网站

C6713 McBSP配置成SPI主模式CLKX管脚无时钟输出

把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了?

赞(0)
未经允许不得转载:TI中文支持网 » C6713 McBSP配置成SPI主模式CLKX管脚无时钟输出
分享到: 更多 (0)