This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320C6416 使用EDMA和MCBSP的问题?

最近在调试6416使用EDMA和MCBSP实现异步串口通信,参考了spra633c的文档及例程程序,例程中有几个地方没有看懂,想咨询一下?假设采用MCBSP0。

(1)MCBSP的DRR0有两个地址:0x018C 0000和0x3000 0000 - 0x33FF FFFF,分别通过配置总线和外设总线读取。程序中通过MCBSP_getRcvAddr把MCBSP的DRR0地址赋值给EDMA的SRC。问题:MCBSP 怎么知道把收到的数据放入0x3000 0000而不是0x018C 0000呢?没看到哪里有关于这个的配置,另外0x3000 0000 - 0x33FF FFFF有64MB的空间,意思是如果MCBSP接收到数据,但一直不读取的话,数据可以缓存64MB吗?

(2)EDMA工作机制的怎么样的?MCBSP0每收到一个数据就通过中断告诉EDMA来读取数据吗?(如果不是,是怎么的?)然后EDMA接收到BUFFER_SIZE * 11个数据并放入recvbuf后再向CPU发送中断,告诉数据已经接收完毕?

(3)为什么配置MCBSP寄存器时要设置MCBSP_RCR中一个bit的延迟(MCBSP_RCR_RDATDLY_1BIT)

(4)停止位设置为2个字符,每个字符8bit,目的是基于使用1.5位的高电平停止位的目的?如果MCBSP0每收到一个数据就通过中断告诉EDMA来读取数据,那么最后两个2字符,EDMA按16bit读取两次,都是0x00ff吗?把两个0x00ff发送给recvbuf?

(5)接收完数据做大数判决时VoteLogic,为什么把12判断为高电平,因为7、11、13、14、15的二进制数都有3个1,而12只有2个1,按道理12应当判断为低电平?

不好意思问题有点多,期望大牛们帮忙解答一下。谢谢!

  • 问题:MCBSP 怎么知道把收到的数据放入0x3000 0000而不是0x018C 0000呢?没看到哪里有关于这个的配置,

    另外0x3000 0000 - 0x33FF FFFF有64MB的空间,意思是如果MCBSP接收到数据,但一直不读取的话,数据可以缓存64MB吗?

    No. 只是这块空间分配给DMA bus的McBSP data端口。

    (3)为什么配置MCBSP寄存器时要设置MCBSP_RCR中一个bit的延迟(MCBSP_RCR_RDATDLY_1BIT)

    时序是根据外接的设备来相应配置的。

    (4)停止位设置为2个字符,每个字符8bit,目的是基于使用1.5位的高电平停止位的目的?如果MCBSP0每收到一个数据就通过中断告诉EDMA来读取数据,那么最后两个2字符,EDMA按16bit读取两次,都是0x00ff吗?把两个0x00ff发送给recvbuf?

    不知道你说的啥,不要把你软件里的自定义协议与这个硬件接口的功能搞混了。

    (5)接收完数据做大数判决时VoteLogic,为什么把12判断为高电平,因为7、11、13、14、15的二进制数都有3个1,而12只有2个1,按道理12应当判断为低电平

    同上。