原厂和技术大佬们:
我看了网上的一些说明,和代码的一些注释,对该函数一知半解,关于csi_dcache_clean_invalid_range((phy_addr_t)(ptr_t)addr, size)
文件路径 bsp\artinchip\sys\d21x\include\core_rv64.h 我想知道是在什么时间来调用此函数,不调用会有问题吗?
开发包里很多使用对齐大容量内存时,都调用了该函数,厂家能讲讲吗?
离线
CPU 和 DMA 设备之间的交互需要手工操作 Cache,例如:
发送方向:CPU 写数据到内存,为了确保数据全部写入到了内存需要 Clean Cache(只会 Clean 有过写操作的 Cache, Dirty 置位),然后才能启动 DMA 设备从内存读数据。
接收方向:DMA 设备写入数据到内存,为了确保 CPU 能读到最新的数据需要先 Invalid Cache (清除所有已加载的 Cache, Valid 置位),然后才能启动 CPU 从内存读数据。
csi_dcache_clean_invalid_range() = Clean Cache + Invalid Cache,这个操作的主要目的是用于数据方向不明确的情况下的一个 Cache 同步动作。但是通常也可以当成 Clean Cache 操作来使用。
另外 Cache 的基本操作单位为 CacheLine,我们 64bit CPU 的 CacheLine 为 64 字节, 32bit CPU 的 CacheLine 为 32 字节。在操作 Cache 时起始地址和长度都必须 CacheLine 对齐。
Cache 参考文档:
https://cloud.tencent.com.cn/developer/article/2315608
离线
非常感谢!您的支持是我最大的动力!
离线