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.

[参考译文] MCSPI-AM243X:系统互连- MCU-PLUS-SDK 和计时器之间的连接

Guru**** 2524460 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1561578/mcu-plus-sdk-am243x-system-interconnect---connection-between-mcspi-and-timer

器件型号:AM243X - MCU-PLUS-SDK


工具/软件:

您好!

AM243x SoC 时、我是一名新手。 我们将在未来使用该处理器、目前正在研究如何实现所需的功能。

各种任务需要的一项功能是 SPI 传输的循环触发。 由于这种情况经常发生、并且与其他循环任务异步执行、因此 CPU 的参与应该尽可能少(无中断)。

AM243x 上是否可以通过计时器以预定义长度触发 SPI 传输?

提前感谢
Mathias

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

    您好、Mathias、

    在 AM243x 上、基于计时器的循环 SPI 传输有三种可能的方法:

    1.无 DMA 的基于计时器的 SPI 传输

    • DMTimer 配置为生成周期性中断。
    • 在计时器 ISR 中、CPU 将数据直接写入 SPI TX FIFO 以开始传输

    带 PKTDMA(手动触发)的基于计时器的 SPI

    • DMTimer 生成周期性中断。
    • 在 ISR 中、CPU 使描述符进入 PKTDMA 的队列、然后 PKTDMA 将数据从存储器传输到 SPI TX 寄存器。

    3、具有 DMA 的自动触发 SPI (BCDMA)

    • 理论上、BCDMA 支持事件触发的通道、在这些通道中、计时器事件可以直接触发 DMA 到 SPI 的传输。
    • 这将在没有 CPU 参与的情况下实现完全自主的计时器对齐循环 SPI 传输。
    • ️Limitation:
      • 在 AM243x 上、MCU+ SDK 仅支持 PKTDMA。
      • BCDMA 自动触发 DMA 不可用、因此该方法不能用于实践。

    此致、

    Anil

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

    您好 Anil、

    感谢您的澄清。  实际上、这不是我想要听到的、因为我们希望在可能的情况下避免使用中断。 根据我的理解、解决方案 3 根本不可行。 但是、您能否更详细地解释一下您提到的限制是什么?

    我们系统有一个循环控制周期。 我们使用它来处理我们通过 SPI 接口读取的信息。 因此、启动读取过程(启动 SPI 传输)与该周期同步、但会有延时时间。 是否有其他方法可以实现该延时时间(范围从 0us 到大约 50us)?

    一个 ICSSG 保留用于实时以太网通信。 在第二个 ICSSG 上、仍然可以执行其他命令。 据我所知、有三个减贫单位。 我们为 SigmaDelta 转换器保留了 PRU0。 可以将 PRU1 或 PRU2 用于此任务吗?

    谢谢您、
    Mathias

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

    您好、Mathias、

    如果您仅使用 R5F 内核、则上述方法 有效。 但是、由于您已经熟悉 PRU 内核、因此建议继续使用它们来满足此要求。

    您的要求是每 X µs 传输一次数据、并且能够在开始传输之前配置 0 到 50µs 范围内的延迟。

    在 PRU 内核上、这可以通过 IEP 计时器来实现。 IEP 计时器计数器可以使用与所需延迟 (0–50µs) 相对应的比较值进行编程。 当发生比较事件时、PRU 固件随后可以控制其 GPIO 引脚 (R30/R31)、以在确切编程的时间生成 SPI 信号。

    此方法可让您 实现高度确定性的时序。由于此要求涉及详细的 PRU 编程、我会将您的问题路由给我们的 PRU 专家、他们可以帮助您了解实现细节并提供示例代码片段。

    此致、

    Anil

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

    您好 Anil、

    感谢您的解释。 目前我不需要详细的解决方案、但我只需知道有两个不同的选项 (R5F 内核、带中断和 PRU)、 我们只是在规划资源的过程中。

    我不会说我熟悉 PRU 主题。 我只对它有一个粗略的想法。 遗憾的是、TI 有时会使用大量缩写来表示同一件事、这并不一定会使其更容易理解。 也许您可以澄清一些一般性问题:

    • 切片 0 和 1(图 6-175,参考手册)是否请参阅 PRU_ICSSG0 和 PRU_ICSSG1?
    • PRU 块在一个片内是否相互独立、或...?
    • 一个层面可以实现多少个独立任务?
    • 可以从 PRU 寻址哪些外设、即、是否可以使用 MCSPI、或者是否必须通过固件实现全双工 SPI?

    谢谢!
    Mathias

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

    您好、Mathias、

    因为我不在办公室,所以很抱歉耽误了回复。

    我建议使用 PRU 内核、而不是 R5F 内核中断。

    如果使用 R5F 内核加 中断、则可能无法满足时间关键型要求。

    我正在将您的问题路由给 PRU 专家。

    此致、

    Anil.

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

    您好、Mathias、

    我今天不在办公室、星期一也不在办公室。 下周我们能给大家多聊一聊。

    回答您的具体问题

    AM243x/AM64x 上的每个 PRU 子系统(其中 AM64x 基本上是 AM243x + A53 内核)都是 PRU_ICSSG。 每个子系统有 6 个内核、每个子系统分为 2 个“片“、其中每个片有 3 个内核 (PRU、RTU、TX_PRU)。 每个内核具有相同的处理能力、但与 PRU GPI/GPO 引脚的连接不同。 听起来您并不关心此时是否使用 PRU 内核读取/写入处理器引脚。

    所以 AM64x 总共有 12 个 PRU 内核。

    我们将每个 PRU 子系统分为 2 个切片、因为(只要共享存储器区域得到正确划分)、我们可将每个切片设置为独立工作。 因此、单个 PRU 子系统可以支持 2 千兆位以太网链路、每个片一个以太网链路。

    供参考:PRU 学院将于本月晚些时候推出  

    我目前正在编写 AM243x 的 PRU 学院、它将在 AM243x 学院中作为新模块显示:
    https://dev.ti.com/tirex/explore/node?node=A__AEIJm0rwIeU.2P1OBWwlaA__AM24X-ACADEMY__ZPSnq-h__LATEST

    以及为初始发行版做好新的 open-PRU 存储库准备:
    https://github.com/TexasInstruments/open-pru

    PRU Academy 将包含大量信息、包括将 PRU 入门实验移植到 AM243x。 现在、在我至少合并文档更新之前、请避免将太多时间花在 open-PRU 上:
    https://github.com/TexasInstruments/open-pru/pull/58 

    但是、如果您可以等待几周、那么当我拥有完整 PRU Academy 的代码和文档时、将会更加流畅。

    如果您想在 PRU Academy 的第一版上线时收到通知、请直接向我发送一封电子邮件、其中包含您的电子邮件地址。

    与 IEP 计时器交互的示例代码?  

    PRU 子系统有一堆加速器和外设、PRU 内核可以进行一些很酷的编程、这在其他内核上具有挑战性。 我的最终目标是在 PRU Academy 中为每个外设和加速器提供示例代码。

    我尚未编写 IEP 代码。 但是、如果您决定在设计中使用 PRU 和 IEP 计时器、我们可以协同工作、为您和学院编写一些代码。 我将从 10 月左右开始提供带宽。 我们可以使用早期 PRU 处理器的一些现有代码段作为参考、例如 https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am335x/PRU_IEP 

    此致、

    Nick