1. 解释scb_invalidatedcache_by_addr函数的作用 scb_invalidatedcache_by_addr函数是用于STM32系列微控制器(特别是带有缓存的型号,如STM32H7)的一个底层函数。该函数的主要作用是使指定地址处的缓存数据失效,从而确保下一次访问该地址时,将从主存(RAM)中重新读取数据,而不是从可能已过时的缓存中读取。这对于保持数...
addr : 操作的地址一定要是32字节对齐的。dsize :一定要是32字节的整数倍 应该是DMA接收后做无效化而不是DMA接收前作无效化。
__STATIC_INLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize){ #if defined...
SCB_InvalidateDCache_by_Addr SCB_CleanDCache_by_Addr SCB_CleanInvalidateDCache_by_Addr 下面将这几个函数依次做个讲解。其中前三个函数是指令Cache,比较容易掌握。重点是后面几个数据Cache函数。由于函数SCB_CleanInvalidateDCache,SCB_CleanDCache和SCB_InvalidateDCache是对整个Cache的操作,所以比最后的三个函数SCB...
设置SRAM的缓冲区做32字节对齐,大小最好也是32字节整数倍,然后调用函数SCB_InvalidateDCache_by_Addr做无效化操作即可,保证CPU读取到的数据是刚更新好的。 本章节配套例子是直接使用的方法二。例子中变量的定义方式如下: /* 方便Cache类的API操作,做32字节对齐 */ #if defined ( __ICCARM__ ) #pragma location...
分别是SCB_InvalidateDCache_by_Addr()和SCB_CleanDCache_by_Addr(),前一句将基于RxData而开辟的D-Cache行失效,让CPU去内存读取数据。因为此时内存数据可能已经被DMA改写而更新了。后一句就是将前面CPU循环操作对RxData数组清零后的数据写回到内存,并清空相应Cache行。其它代码跟前面不使用D-Cache一样,包括空闲中断...
24.4 四种Cache(MPU)配置的读写操作流程 24.4.1 配置Non-cacheable 这个最好理解,就是正常的读写操作,无Cache。 对应四种MPU配置如下: TEX = 000 C=0 B=0 S=忽略此位,强制为共享 TEX = 000 C=0 B=1 S=忽略此位,强制为共享 TEX = 001 C=0 B=0 S=0 ...
还有就是要主要DCACHE数据一致性问题,在中断里面加入清cache的操作。 第四点注意此处需要乘2. 因为这里是int32的dsize, 定义的adc_buf是16位的,DMA也是板字节,所以需要×2。 void SCB_InvalidateDCache_by_Addr (void *addr, int32_t dsize)
设置SRAM的缓冲区做32字节对齐,大小最好也是32字节整数倍,然后调用函数SCB_InvalidateDCache_by_Addr做无效化操作即可,保证CPU读取到的数据是刚更新好的。 本章节配套例子是直接使用的方法二。例子中变量的定义方式如下: /* 方便Cache类的API操作,做32字节对齐 */ ...
SCB_InvalidateDCache_by_Addr(uint32_t *addr,int32_t dsize):可以指定地址和存储区大小,地址要32...