用EDMA的pingpong通过MCBSP往外打数据,帧同步和位同步都是用外部时钟,在没有使用FIFO的时候会遇到MCBSP一直在发送DXR里面同个数据,通过查看SPCR寄存器看到出现了XTEMPTY的情况,但是FIFO里面还有50个words.
以为是EDMA control忙不过来,打开了发送FIFO,测试发现还是会现在发送欠载的情况,MCBSP一直在发送同一个数据,但是FIFO里面还有几十个数据呢,SPCR寄存器里面只有发送欠载这个情况,结果就是FIFO不给MCBSP的发送寄存器送数据了;
一开始判断是EDMA忙不过来,后来在TONY的指导下把FIFO开起来了,然后把CC的两个EVENT QUEUE都用起来了,还是一样的情况,个人认为不是EDMA这边出问题,因为FIFO里面还有很多数据,而且也没有产生EDMA的错误中断;
但是MCBSP里面没有XCERR的错误,也没有发送过载的错误,只有一个发送欠载,文档里面说当出现发送欠载的情况时,只要EDMA CONTROL给DXR送数据就好了,但是MCBSP BFIFO里面的几十个数据不往DXR送了;
请问这种情况该往哪个方向查?
Tony Tang:
bingliang chen用EDMA的pingpong通过MCBSP往外�数据,帧同步和位同步都是用外部时钟,在没有使用FIFO的时候会遇到MCBSP一直在发送DXR里面同个数据,通过查看SPCR寄存器看到出现了XTEMPTY的情况,但是FIFO里面还有50个words.
不是还没有用FIFO吗?为什么FIFO里还有50个Words?
bingliang chen以为是EDMA control忙不过来,打开了发送FIFO,测试发现还是会现在发送欠载的情况,MCBSP一直在发送同一个数据,但是FIFO里面还有几十个数据呢,SPCR寄存器里面只有发送欠载这个情况,结果就是FIFO不给MCBSP的发送寄存器送数据了;
Buffer是放在DDR吗?系统中还有什么大数据任务?
#1. 尝试通过寄存器MSTPRI0/1/2调整EDMA的优先级。
#2. 修改DDR寄存器PBBPR的值。
bingliang chen:
回复 Tony Tang:
buffer放在L2cache里面,系统跑在DDR里面,有大任务,语音的压缩解压缩,信道编解码。修改MSTPRI是不是为了修改EDMA_TC的优先级嘛?这个改过了,也把不同的channel分配到不同的TC块,没有起到效果。DDR的寄存器到时候修改看看,现在公司已经放假了,等年后再帮我指导一下。