在使用DSPlib时,通过如下函数使能了cache后,运行时间可以有效减少
CacheEnableMAR((unsigned int)0xC0000000, (unsigned int)0x20000000);
CacheEnable(L1DCFG_L1DMODE_32K | L1PCFG_L1PMODE_32K | L2CFG_L2MODE_256K);
但是在使用了CacheEnableMAR后,EDMA的数据无法更改到目标地址。
Shine:
这个应该是cache一致性的问题引起的。
1.EDMA 从外设读取数据到供处理器使用。DMA 将外部数据直接传到内存中,但cache 中仍然保留的是旧数据,这样处理器在访问数据时直接访问缓存将得到错误的数据。
2.EDMA 向外设写入由处理器提供的数据。处理器在处理数据时数据会先存放到cache 中,此时cache 中的数据有可能还没来得及写回到内存中的数据。如果这时DMA 直接从内存中取出数据传送到外设,外设将可能得到错误的数据一致性维护
1. EDMA 从外设读取数据到供处理器使用时,可先进行invalidate 操作。这样将迫使处理器在读取cache中的数据时,先从内存中读取数据到缓存,保证缓存和内存中数据的一致性。
2.EDMA 向外设写入由处理器提供的数据时,可先进行writeback 操作。这样可以EDMA传输数据之前先将缓存中的数据写回到内存中。