最近在调试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应当判断为低电平?
不好意思问题有点多,期望大牛们帮忙解答一下。谢谢!