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.
附件为McBSP的EDMA简单例程,希望对初学者有所帮助。
楼主你好,我在OMAP-L138上开发程序碰到一个问题,我用Mcasp + EDMA的组合,通常情况下Mcasp会触发2个事件,分别为AREVT0(Mcasp Receive Event)和AXEVT0(Mcasp Transmit Event),这2个事件会将EDMA3 Channel Controller 0里的通道0和通道1对应的事件寄存器里的bit位置1,从而触发配置好的edma3数据搬运。也就是说,如果采用事件触发edma的机制,对应的事件只能调动对应的通道控制器,在本例中就是mcasp只能触发edma3 cc 0来搬数,有没有办法让mcasp触发的事件为edma3 cc 1所用?因为现在太多太多的事件都默认的触发edma3 cc0,从而导致edma3 cc0压力比较大,资源抢占得很厉害,在我的实现里面,这确实引发了一些问题,楼主对这一块应该很熟悉了,能否给点建议?本菜不胜感激。
感谢楼主的回复,对于DMAQNUM寄存器,我也有一个奇怪的发现:按文档的说法,分配到队列0的事件,会在tc0上发起数据传输,分配到队列1的事件,会在tc1上发起数据传输,我占用了3条edma通道,并且都分配到队列0上,因而并未将tc1模块power up,此时发现其中一条通道的大块数据传输会导致另外两条通道的EDMA事件不能被及时响应(技术文档中说是饿死)。此后,我仅仅将tc1模块power up,并未将通道和队列重新映射,也就是所有通道还是映射到tc0上,但是问题得到了解决,这三个通道事件之间的冲突没有了,都能得到及时的响应,这说明了一个问题,队列和tc模块之间的对应关系并不是绝对固死的,而是由传输控制器在进行合理的调度,最大限度的利用资源,请问楼主关于传输控制器的设计,是不是我这里理解的这样?如果不对,希望楼主能指正,以免在以后的开发中走弯路,谢谢。