在使用EDMA时,发现使用memcpy(使用直接赋值效果一样)拷贝数据时会打断EDMA接收I2S数据,我认为是CPU占用了系统总线,MSTPRI1 寄存器已经将EDMA的优先级调整为0,但是还是不行,我想知道CPU的优先级如何降低
xinpeng wang:
Tony Tang:
回复 xinpeng wang:
memcopy与EDMA共用的内存是哪一块?DDR上吗?
给几点建议:
#1. 将这两个操作的内存位置分开,原因是共同访问一块内存,排队等待延时了。比如一个放DDR,一个Shareram或L2 RAM.
#2. 如果是DDR上,更改一下DDR的PBBPR寄存器的配置。详细说明看TRM手册对PBBPR的说明。
xinpeng wang:
回复 Tony Tang:
这个只能是同一块内存,因为就是在拷贝DMA读取来的数据到另一个地方,确实是在DDR上,我先试试改PBBPR试试
xinpeng wang:
回复 Tony Tang:
PBBPR试过了,改成0 、2、0xFF都试过了,不行,还是那效果。若要是注释掉memcpy下面为零的部分将有正常数值
xinpeng wang:
回复 Tony Tang:
1.缩短短memcpy长度明显改善,我一共是4096个字节的,变成100字节后就完全好了。
2.EDMA代替我回头试试吧,就是比较慢这个方法。
3.FIFO一开始就已经在用了。
Tony Tang:
回复 xinpeng wang:
FIFO深度设置的是多少?
xinpeng wang:
回复 Tony Tang:
FIFO深度是1,改成其他值就不能用了,我设置了一下优化等级好像可以了,谢谢啦