您好!
我将 TMS320F28379D 用于新项目、我想知道使用两个内核的最佳方法、但我不确定如何继续。
我需要进行两种计算:
- 监督/沟通
- 控制
通常(对于 Piccolo 器件)、我会使用 CPU 进行监控/通信、并使用 CLA 进行控制。 但是、我的控制环路太多、因此 CLA1不足以执行所有计算。 因此、我希望使用 CLA2。
起初、我想将 CLA2用于管理某些 ePWM 模块的控制环路、但在该项目中、仅使用具有 HRPWM 的 ePWM。 只有内核1可以使用 HRPWM、因此 CLA2不能自行更新 ePWM+HRPWM 寄存器。
- CLA2和 CLA1之间没有共享存储器、因此我不能简单地使用 CLA2计算寄存器值、并让 CLA1读取它们以执行对寄存器的实际写入操作。
- CLA2和 DMA2之间没有共享存储器、因此我无法使用 DMA2将计算结果从 CLA2传输到 CPU1。
因此、必须使用 CPU2来执行传输。 我已经计划将其用于其他用途、但也是如此。 例如、我可以在每个 CLA2任务之后为一个小中断腾出空间、以便将结果从 LSRAM 复制到 GSRAM。
现在、我需要将结果从 GSRAM 传输到 CLA1、以便它可以使用它们更新 ePWM+HRPWM 寄存器。
- CLA1和 DMA1之间没有共享存储器、因此我无法使用 DMA1将结果从 GSRAM 传输到 CLA1。
- 我不确定 DMA1是否可以写入 ePWM+HRPWM 寄存 器、但即使可能、也是不够的、因为 SECMSEL_1[PF1SEL]显然使得某些 ePWM 模块无法通过 CLA1写入它们的寄存器、而其他模块的寄存器由 DMA1写入。
因此、CPU1必须用于执行额外的传输。 CPU1已经很忙、但它必须执行的最小操作是将值从 GSRAM 传输到 LSRAM 并让 CLA1执行实际的 EPWM+HRPWM 寄存器写入。 这些传输必须及时执行、否则控制环路的稳定性将降低。 因此、我必须在 CPU1上创建多个中断空间。
现在的问题是、必须不时调用具有不间断 RPT 指令的 SFO ()函数、并且它会延迟 CPU1上的中断。 采样频率和调制方案使得我无法在新 ADC 采样可用和写入相应 ePWM 模块的新寄存器值之间等待超过300ns 的时间。
是否有任何方法可以满足所有这些要求?
显然、如果 CLA1和 CLA2有任何方法可以直接共享数据、或者如果 HRPWM 可以从内核#2中使用、则会更简单。 如果没有这些选项、拥有双核 DSP 将变得比最初看起来更不有用。
提前感谢、
皮埃尔