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:TMS570LC4357:DMA 和缓存模式。

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/720505/tms570lc4357-tms570lc4357-dma-and-caching-modes

器件型号:TMS570LC4357

我有2个关于 DMA 和缓存的问题、这些问题与在 SPI 上使用 DMA 有关、但它们不是特定于 SPI 的:

1) 1)对于标记为非共享但已缓存直写式的存储器、DMA 对其是否有效? 如果有、是否有时间更喜欢使用带有 DMA 的共享(非缓存)存储器与带有 DMA 的直写缓存存储器? DMA SPI 示例和本文(https://e2e.ti.com/group/launchyourdesign/m/boosterpackcontest/666341)建议为 DMA 缓冲器使用共享(未缓存)存储器区域。 但是、我的理解是、当 DMA 写入标记为直通的存储器时、TMS570的加速器一致性端口实现将保持高速缓存同步。 "事务在 ACP-S 从端口上接收、并通过 ACP-M 主端口在内存系统上传输。 ACP 会在适当的时间自动使适当的1级数据缓存行无效、从而允许软件维护免缓存一致性、适用于直写缓存区域以及非缓存区域中的数据。"

2) 2)启用 DMA 之前是否需要 DMB、或者写入器件类型存储器(启用 DMA)是否足以确保 DMA 连贯地查看存储器? 我的理解是、对器件类型存储器的写入操作将首先消耗所有挂起的写入缓冲区。

提前感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我最初的帖子中有轻微的不准确性:引用的示例建议为 DMA 缓冲器使用单独的直写缓存存储器区域(在示例中未标记为"共享"、但在示例中被称为"共享")。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1) 1)"对于标记为非共享但已缓存直写的存储器、DMA 的发往/发往是否有效?" 假设 CPU 写入 RAM 缓冲器,然后启动 DMA 到 Tx。 缓存缓存缓存了缓冲区。 在 DMA 被启动之前、需要完成写操作、因此有必要在启动 DMA 之前发出 DMB 指令。 在另一个方向上、DMA 被启动并复制到缓冲区、然后 DMA 完成。 我认为 ACP 将会照顾您。

    1A)"如果是、是否有时间更喜欢使用带有 DMA 的共享(非缓存)存储器与带有 DMA 的直写缓存存储器?" 我想这两种情况都可以,最好使用直写式缓存来提高读取性能,具体取决于 CPU 使用的内存。 TI 人、这听起来不错吗?

    2) 2)"启用 DMA 之前是否需要 DMB、或者写入器件类型存储器(启用 DMA)是否足以确保 DMA 一致地查看存储器?" 此文档建议发布 DMB -- infocenter.arm.com/.../index.jsp ,但我不确定您提到的“设备类型内存”的这一特性。 是否可以链接到更多信息?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nick、

    Cortex R4/5架构的"共享"存储器概念与多个总线主控访问的存储器无关。 如果有多个 CPU 可访问同一存储器区域、则该功能非常有用、而 LC4357器件则并非如此。 因此、共享/非共享配置实际上无效。

    具体问题的答案:
    1) 1) ACP 为定义为直写式的数据缓存提供缓存一致性。
    2) 2)写入器件类型或严格顺序存储器后、不需要 DMB 指令。 它可用于确保在 CPU 继续执行下一条指令之前完成对器件类型存储器的写入。 对器件类型存储器的连续存取确保所有之前的存取完成。 因此、您还可以从刚刚写入的寄存器中读回、这样就可以确保写入完成、而不会在 CPU 缓冲区中挂起。

    此致、
    Sunil