【简介】
我们在之前的帖子中(【S32K3学习整理】DMA 配置使用)已经使用DMA来接收LPUART的数据,DMA的配置中调试过程中遇到的问题未展开,此贴在此基础上进一步说明DMA使用的注意事项。
本地调试时遇到DMA的中断已经按照预期的响应,但是DMA中断触发后我们配置的地址中并未更新。针对该问题的原因,从现象上看DMA已经完成数据的搬运但是CPU读取到的数据没有同步,S32K3中本地是开启了Cache了想到这突然意识到这个可能就是触发问题的原因,从以下的框图可知DMA作为总线的一个master 节点更新数据不会和canche进行同步,造成CPU读取到的数据未进行更新。

针对该问题我们需要修改通过DMA 接收数据的缓冲区的内存属性位no_cache,修改如下。

代码修改后DMA中断触发后,CPU也可以按照预期的读取到数据,S32K3 的DMA使用要注意和CPU交互数据的内存的属性要是no_cache属性。
我要赚赏金
