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.
使用OMAPL138 dsp核 SYSBIOS下使用UPP DMA传输数据,发现关闭cache,UPP 每次DMA传输均正确。
我在程序中定义了全局变量:
Uint16 upp_buffer_a[1024];
Uint16 upp_buffer_b[1024];
UPP每次传输数据都是upp_buffer_b数组数据->传输到upp_buffer_a 中
但是一旦开启cache缓存后,发现UPP DMA 只有第一次接收数据正确,后续每次DMA 收到的数据均错误。 工程师说开启cache后,使用缓存需要编程的时候考虑内存地址对齐及缓存一致性的问题。但不知道具体如何设置。
Yinfeng,
#1. UPP是用来跟外部交换数据的,B到A的意思是做的loopback,还是从外部又送回来的?
#2. 使用了Cache,需要做Cache coherence操作,传出去数据的时候,uPP的DMA会从buffer_b的物理地址将数据送出,接收的时候,uPP的DMA也会把数据放到对应的buffer_a,但是这时CPU并不知道buffer_a的数据更新了,在CPU读buffer_a的时候,先是直接从Cache里面找要读的地址是否在Cache里,如果是,则直接从Cache里读数据,而不会从物理地址去读,也这说明了为什么你第一次是正确的,因为第一次CPU读buffer_a的时候,Cache里是没有把buffer_a的地址Cache进来的,所以从物理地址读,同时将这个地址Cache到Cache里了。
#3. 所以你需要在每次读buffer_a之前将buffer_a从Cache里invalidate,详细操作请参考手册sprufk5a的4.4.1节的寄存器说明。starterware里也有相应的函数。