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.

[参考译文] TMS570LC4357:如何强制缓存的数据返回到 SRAM 中

Guru**** 2455560 points
Other Parts Discussed in Thread: HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/640825/tms570lc4357-how-to-force-the-cached-data-back-into-sram

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

我正在使用具有 MPU 支持的 FreeRTOS、并且创建了一个具有非缓存共享存储器的任务、以便该任务可以修改共享屏幕缓冲器存储器中的缓冲区、并且 DMA 可以访问该缓冲区以写入 MibSPI。

我已经创建了另一个任务(在特权模式下)、该任务更新同一屏幕缓冲区、但 MCU 会对其进行缓存、并让另一个任务处理要复制到 mibspi 的 DMA 操作。

问题是 DMA 传输从未看到另一个任务所做的更新。

我想知道如何强制 MCU 将高速缓存数据写回 SRAM、以便 DMA 可以读取预期的数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Nino、

    我认为解决方案是将该特定存储器空间配置为写入、以便还更新实际 SRAM、而不仅仅是缓存。 请参见 Halcogen 中的 MPU 配置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Chuck。  我以前使用过该解决方案。  我只是想尝试一下其他的东西。

    我已经阅读了可用于高速缓存(用于失效和清理)的命令。    我在更改共享存储器位置之前添加了_dcacheInvalidateRange_(),然后使用_dcacheCleanRange_()。   这种组合导致在另一个任务上启动了 mibspi DMA、以无问题地读取屏幕缓冲区。   cleanRange 和 invalidateRange 的其他组合未按预期工作。

    此解决方案可能会影响性能、但短期内对我来说很有用。