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

C6701的MCBSP作为SPI的问题

你好!我需要用TMS320C6701的MCBSP作为SPI接口和W5500进行通信,参考官网文档spra478c,对MCBSP进行了初始化,寄存器配置程序如下:

MCBSP_Config mcbspCfg0 = {

   MCBSP_SPCR_RMK(

         MCBSP_SPCR_FRST_DEFAULT,

         MCBSP_SPCR_GRST_DEFAULT,

         MCBSP_SPCR_XINTM_DEFAULT,

         MCBSP_SPCR_XSYNCERR_DEFAULT,

         MCBSP_SPCR_XRST_DEFAULT,

         MCBSP_SPCR_DLB_DEFAULT,

         MCBSP_SPCR_RJUST_DEFAULT,

         MCBSP_SPCR_CLKSTP_DELAY, /* CLKSTP=11b with CLKXP=0, clock

starts with */

       MCBSP_SPCR_RINTM_RRDY,   /* rising edge with delay*/

         MCBSP_SPCR_RSYNCERR_DEFAULT,

         MCBSP_SPCR_RRST_DEFAULT

         ),

 

   MCBSP_RCR_RMK(

           MCBSP_RCR_RPHASE_SINGLE,

           MCBSP_RCR_RFRLEN2_DEFAULT,

           MCBSP_RCR_RWDLEN2_DEFAULT,

           MCBSP_RCR_RCOMPAND_DEFAULT,

           MCBSP_RCR_RFIG_NO,

           MCBSP_RCR_RDATDLY_1BIT,

          MCBSP_RCR_RFRLEN1_DEFAULT, //每帧最多128个字节

           MCBSP_RCR_RWDLEN1_32BIT   /* receive element length phase 1 is 32 bits */

           ),

 

   MCBSP_XCR_RMK(

           MCBSP_XCR_XPHASE_DEFAULT,

           MCBSP_XCR_XFRLEN2_DEFAULT,

           MCBSP_XCR_XWDLEN2_DEFAULT,

           MCBSP_XCR_XCOMPAND_DEFAULT,

           MCBSP_XCR_XFIG_DEFAULT,

           MCBSP_XCR_XDATDLY_1BIT,   /* 1 bit data delay                   */

           MCBSP_XCR_XFRLEN1_DEFAULT,   //每帧最多128个字节

           MCBSP_XCR_XWDLEN1_32BIT   /* transmit element phase 1 is 32 bits */

           ),

 

     MCBSP_SRGR_RMK(

           MCBSP_SRGR_GSYNC_FREE,

           MCBSP_SRGR_CLKSP_RISING,

           MCBSP_SRGR_CLKSM_INTERNAL, /* SRGR clock mode from internal source */

           MCBSP_SRGR_FSGM_DEFAULT,

           MCBSP_SRGR_FPER_DEFAULT,

           MCBSP_SRGR_FWID_DEFAULT,

           MCBSP_SRGR_CLKGDV_OF(0x5F) /* divide clock by factor of 95         */

           ),

     MCBSP_MCR_DEFAULT,

     MCBSP_RCER_DEFAULT,

     MCBSP_XCER_DEFAULT,

     MCBSP_PCR_RMK(

           MCBSP_PCR_XIOEN_SP,

           MCBSP_PCR_RIOEN_SP,

          MCBSP_PCR_FSXM_INTERNAL, /* frame sync generation             */

           MCBSP_PCR_FSRM_EXTERNAL,

           MCBSP_PCR_CLKXM_OUTPUT, /* tans. clock mode from internal SRGR*/

           MCBSP_PCR_CLKRM_INPUT,

           MCBSP_PCR_CLKSSTAT_0,

          MCBSP_PCR_DXSTAT_0,

           MCBSP_PCR_FSXP_ACTIVELOW, /* active low trans. frame sync. polarity */

           MCBSP_PCR_FSRP_ACTIVEHIGH,

           MCBSP_PCR_CLKXP_RISING, /* trans. clk pol. from rising edge of CLKX */

           MCBSP_PCR_CLKRP_FALLING

           )

 

SPI收发函数是这样写的:

unsigned int IINCHIP_SpiSendData(unsigned int byte)

{

       unsigned int SPIRXD;

       while(MCBSP_xrdy(hMcbsp0) == 0);

       MCBSP_write(hMcbsp0,byte);

       while(MCBSP_rrdy(hMcbsp0) == 0);{}   //Wait until data is received

       SPIRXD = MCBSP_read(hMcbsp0);

       return SPIRXD;

}

 

在主程序中调用一次收发函数,发送一个32位的数据0x12345678,逻辑分析仪测出的波形如下图,没有问题:

 

然后把XCR和RCR寄存器中的MCBSP_XCR_XFRLEN1_DEFAULT参数由0改为2后(即每帧包括3个32位的数据),主函数中调用3次收发函数,分别发送数据0x12345678、0x87654321、0x12345678,逻辑分析仪测出的波形如下图,最终多出来6个时钟,去掉它们后其余的数据是对的。

 

所以,想请你们看下这个多出来的时钟和数据是哪里的问题?是收发不对?还是哪里没配置对?谢谢!

user5846346:

能看到图吗?我再发一遍

Tony Tang:

回复 user5846346:

不能理解为什么现在还用C6701。如果是因为老产品沿用,就不应该有新问题,如果是新设计,有许多新替代型号可以选择。

user5846346:

回复 Tony Tang:

是在老产品上加新功能,实际情况比较复杂,不是我们能决定的,没办法。上面的问题有建议的解决方法吗?谢谢

赞(0)
未经允许不得转载:TI中文支持网 » C6701的MCBSP作为SPI的问题
分享到: 更多 (0)