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

DM642 McBSP轮询接收出错 并且不稳定

DM642,用McBSP模拟SPI接口,配置成从模式,SPI_CLK=20MHz,

问题一:轮询接收出错。

按照数据手册的说明是要先等到XRDY寄存器变1才能写数据,其发送代码应为
while(!MCBSP_xrdy(hMcbspSlave));
MCBSP_write(hMcbspSlave, data);
while( !MCBSP_rrdy(hMcbspSlave) );
arcvarray[j] = ( MCBSP_read(hMcbspSlave));

但是上面的代码运行时,发出去的数据出错了,然后下面这段代码却可以成功
MCBSP_write(hMcbspSlave, data);
while(!MCBSP_xrdy(hMcbspSlave));
while( !MCBSP_rrdy(hMcbspSlave) );
arcvarray[j] = ( MCBSP_read(hMcbspSlave));
但这个明显不符合数据手册的要求,请问我这是哪里错了呢。

问题二:我的这个Mcbsp口很不稳定,一直运行时,过个四五分钟就会出错,卡死,以至于在程序中我只能没使用一次就开关一次Mcbsp口,请问这样子的情况,应该查哪些地方呢?是我忽略了那些地方的配置了么?

以下为McBSP的配置参数:
MCBSP_Config mcbspSlaveCfg = {  

    MCBSP_SPCR_RMK(        //串口控制寄存器
        MCBSP_SPCR_FREE_DEFAULT,
        MCBSP_SPCR_SOFT_DEFAULT,
        MCBSP_SPCR_FRST_DEFAULT,
        MCBSP_SPCR_GRST_YES,
        MCBSP_SPCR_XINTM_DEFAULT,
        MCBSP_SPCR_XSYNCERR_DEFAULT,
        MCBSP_SPCR_XRST_DEFAULT,
        MCBSP_SPCR_DLB_DEFAULT,
        MCBSP_SPCR_RJUST_DEFAULT,
        MCBSP_SPCR_CLKSTP_OF(2), /* CLKSTP=11b with CLKXP=1, clock starts with */
        MCBSP_SPCR_DXENA_OFF,    /* rising edge with delay                     */
        MCBSP_SPCR_RINTM_RRDY,
        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_0BIT,
        MCBSP_RCR_RFRLEN1_DEFAULT,
        MCBSP_RCR_RWDLEN1_16BIT,  /* modi2 receive element length phase 1 is 32 bits */
        MCBSP_RCR_RWDREVRS_DISABLE
    ),

    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_0BIT,    /* 1 bit data delay                    */
        MCBSP_XCR_XFRLEN1_DEFAULT,
        MCBSP_XCR_XWDLEN1_16BIT,   /*modi3 transmit element phase 1 is 32 bits */
        MCBSP_XCR_XWDREVRS_DISABLE
    ),

     MCBSP_SRGR_RMK(//采样率发生
        MCBSP_SRGR_GSYNC_FREE,
        MCBSP_SRGR_CLKSP_RISING,
        MCBSP_SRGR_CLKSM_INTERNAL, /* SRGR clock mode from internal source */
        MCBSP_SRGR_FSGM_DXR2XSR,                        
        MCBSP_SRGR_FPER_DEFAULT,
        MCBSP_SRGR_FWID_DEFAULT,
        MCBSP_SRGR_CLKGDV_OF(0) /* 使用最大速率     */
    ),

     MCBSP_MCR_RMK(   //多通道控制寄存器               /* only for 64x                               */
        MCBSP_MCR_XMCME_DEFAULT,  /* All fields in MCR set to default values    */
        MCBSP_MCR_XPBBLK_DEFAULT,
        MCBSP_MCR_XPABLK_DEFAULT,
        MCBSP_MCR_XMCM_DEFAULT,
        MCBSP_MCR_RPBBLK_DEFAULT,
        MCBSP_MCR_RMCME_DEFAULT,
        MCBSP_MCR_RPABLK_DEFAULT,
        MCBSP_MCR_RMCM_DEFAULT
    ),

        //接收通道使能  
    MCBSP_RCERE0_RMK(0),      /* Additional registers only for 64x        */
    MCBSP_RCERE1_RMK(0),
    MCBSP_RCERE2_RMK(0),
    MCBSP_RCERE3_RMK(0),
                //发送通道使能
    MCBSP_XCERE0_RMK(0),       /* Additional registers only for 64x       */
    MCBSP_XCERE1_RMK(0),
    MCBSP_XCERE2_RMK(0),
    MCBSP_XCERE3_RMK(0),          
                  
     MCBSP_PCR_RMK(//引脚控制
        MCBSP_PCR_XIOEN_SP,
        MCBSP_PCR_RIOEN_SP,
        MCBSP_PCR_FSXM_EXTERNAL, /* frame sync generation               */
        MCBSP_PCR_FSRM_EXTERNAL,
        MCBSP_PCR_CLKXM_INPUT,  /* tans. clock mode from internal SRGR */
        MCBSP_PCR_CLKRM_INPUT,
        MCBSP_PCR_CLKSSTAT_0,
        MCBSP_PCR_DXSTAT_0,
        MCBSP_PCR_FSXP_ACTIVELOW, /*片选/帧同步信号低电平有效  */
        MCBSP_PCR_FSRP_ACTIVELOW,
        MCBSP_PCR_CLKXP_RISING,  /* 时钟上升沿数据有效 */
        MCBSP_PCR_CLKRP_FALLING
    )
};

wenxing yang:

更改顺序还真能提高成功率!!! 受教了

赞(0)
未经允许不得转载:TI中文支持网 » DM642 McBSP轮询接收出错 并且不稳定
分享到: 更多 (0)