求助,请大神帮忙看一下McBSP配置成SPI收发数据的程序

2019-08-07 15:34发布

有关问题在程序后面的注释中,请大神解释详细点哦,本人小白一枚


//############################# SPI_XMIT_BYTE ################################
Uint16 spi_Rmit_byte()

    while (!MCBSP_xrdy(mhMcbsp)) {};

    MCBSP_write16(mhMcbsp,0xFFFF);      //这个写地址该怎么确定????

    while (!MCBSP_rrdy(mhMcbsp)) {}
    /* Read sample from and write back to handset codec */
    return (MCBSP_read16(mhMcbsp)<<8);                        //这个左移和下面的右移作用是什么?????
}

Uint16 spi_xmit_byte(Uint16 byte)
{
    while (!MCBSP_xrdy(mhMcbsp)) {};
    MCBSP_write16(mhMcbsp,byte>>8);
    while (!MCBSP_rrdy(mhMcbsp)) {};
    /* Read sample from and write back to handset codec */
    return (MCBSP_read16(mhMcbsp)<<8);               //为什么在发数据的时候还要读回????      
}







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
zhangmangui
1楼-- · 2019-08-07 21:05
你用的是那个系列和型号
好像用CSL库  这个具体要看CSL库的使用手册
查看具体对应的函数   
SPI如果是双工的话   收发是同时进行的
bushi27
2楼-- · 2019-08-08 02:44
谢谢,,我用的是达芬奇系列的 TMS320DM642
CSL库中只定义了各参数的格式类型,没有更具体的介绍了,函数声明如下

/*----------------------------------------------------------------------------*/
IDEF Uint32 MCBSP_read(MCBSP_Handle hMcbsp) {
  return (*(volatile Uint32 *)(hMcbsp->drrAddr));
}
/*----------------------------------------------------------------------------*/
IDEF void MCBSP_write(MCBSP_Handle hMcbsp, Uint32 val) {
  (*(volatile Uint32 *)(hMcbsp->dxrAddr)) = val;
}
/*----------------------------------------------------------------------------*/
IDEF Uint32 MCBSP_xrdy(MCBSP_Handle hMcbsp) {
  return MCBSP_FGETH(hMcbsp,SPCR,XRDY);
}
/*----------------------------------------------------------------------------*/
IDEF Uint32 MCBSP_rrdy(MCBSP_Handle hMcbsp) {
  return MCBSP_FGETH(hMcbsp,SPCR,RRDY);
}
wangdezhi
3楼-- · 2019-08-08 05:15
如果是对速度没要求,可以使用模拟口写的。
wangdezhi
4楼-- · 2019-08-08 10:55
这个可以根据例程来修改一下的。

一周热门 更多>