Thread 中讨论的其他器件:controlSUITE、 C2000WARE
你(们)好。
我们仍在努力将 EtherCAT 从站堆栈代码(SSC)与我们的电机伺服控制相集成。
SSC 有2个部分:
(1)接收来自 EtherCAT 从站控制器(ESC)的中断以进行循环数据交换
(2)主代码中用于一次数据传输的无限循环函数。
这两个器件都将通过 EMIF 与 ESC 进行通信。
我们担心以下情况。 假设用于异步 RAM 的16位 EMIF、如果(2)是 r/w 操作的一半(例如、使用读取 int 数组以进行循环)、并且有来自(1)的中断。
我的问题是:
(a)(2)的 r/w 是否会被暂停或损坏? (腐败意味着、当必须具有原子访问或操作的 SPI r/w 将失去意义时)
(b)将优先处理(1)或(2)中的哪个 R/W 操作?
我的猜测:
(猜 a)不会损坏、CPU 将完成当前的16位 r/w、挂起(2)、运行(1)的 ISR、然后使用(2)中的内容恢复
(b 的猜测)根据(a 的猜测)、CPU 将优先(1)的操作
我猜是基于 TMS320F2837xD 参考手册和这篇文章 e2e.ti.com/.../685593。 我在这篇帖子中提出了一些非常类似的问题、但它位于同步 RAM 上。 我想知道异步 RAM 的工作方式是相同的吗?
我们还担心、因为在 SSC 的硬件抽象层中、针对(1)和(2)至 ESC 的 r/w 函数是分开的。 (2)的所有 R/w 函数将在实际操作之前首先禁用中断。 这对于 SPI 来说是合理的、但如果(a 的猜测)和(b 的猜测)是正确的、那么为什么相同的处理 EMIF 呢?
此外、我还考虑使用 CLA 或 DMA。 但我感到有以下困难、如果我错了、请纠正我的问题:
(CLA) CLA 的程序需要占用整个 LSx RAM、但数据可以与其他 LSx RAM 中的 CPU 程序/数据混合。 但我们已经在 LSx RAM 上运行低电平。
(DMA) DMA 只能访问 GSx RAM、但 CPU 的程序和数据驻留在 LSx RAM 中。 因此、即使 DMA 执行 EMIF r/w、也需要在 GSx RAM 上有一个缓冲器。 CPU 需要执行另一个 r/w 本身来将结果复制到 LSx RAM 中/从 LSx RAM 中复制
基于我对(CLA)和(DMA)的关注、我还考虑通过以下方式将链接 cmd 文件中的某些部分移动到 GSx RAM:
(CLA 的 consq)可以为 CLA 的程序备份 LSx RAM
(用于 DMA 的 consq) DMA 可以直接访问 CPU 程序的数据吗?
这是可行的吗? 即使如此、是否会产生任何不利影响(例如、较慢的性能)? 由于在 controlSUITE 中、任何一个链接命令文件都不使用 GSx RAM (除了 DMA 示例)、这似乎浪费了这么大的存储块。 另外、我还在对链接 cmd 文件中不同段的含义进行硬解密、在哪里可以查找相关信息?
谢谢阅读。 任何答覆均可:D