您好!
我能够从 CPU1读取 EPwm1Regs.TBCTR (加减计数器)、但从 CPU2读取同一寄存器为零。 所有其他 EPWM1寄存器在 CCS 的 CPU2寄存器窗口中也显示为零。
EPWM1时钟由 CPU1提供(CPUSEL0.EPWM1 = 1)。 那么、这是否意味着只有 CPU1可以读取 EPWM1寄存器? 或者我需要在软件中配置的其他内容?
此致
Amulrass V
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.
您好!
我能够从 CPU1读取 EPwm1Regs.TBCTR (加减计数器)、但从 CPU2读取同一寄存器为零。 所有其他 EPWM1寄存器在 CCS 的 CPU2寄存器窗口中也显示为零。
EPWM1时钟由 CPU1提供(CPUSEL0.EPWM1 = 1)。 那么、这是否意味着只有 CPU1可以读取 EPWM1寄存器? 或者我需要在软件中配置的其他内容?
此致
Amulrass V
您好、Vivek、
有趣 的是、对共享外设的访问是根据 CPUSEL 值提供的。 所有其他共享外设也是如此吗?
我知道大多数其他多核平台(如 PPC)不会限制任何 CPU 对共享外设的访问、即使在任何时候只有一个 CPU 可以控制或使用该外设。 这将会严重限制多核应用程序、就像我的情况一样。
我需要从两个 CPU 访问 EPWM1寄存器、并且不想在运行时更改 CPUSEL。 此问题是否有任何解决方法?
此致
Amulrass
您好!
[报价] 所有其他共享外设也是如此吗? [/报价]
是的、所有由 CPUSEL 控制的外设都是如此。
[引用] 我知道大多数其他多核平台(如 PPC)不会限制任何 CPU 对共享外设的访问、即使在任何时候只有一个 CPU 可以控制或使用该外设。 这将会严重限制多核应用程序、就像我的情况一样。 [/报价]
您是对的、但在这种情况下、在访问之间进行仲裁、这使得时序至关重要的控制环路很难实现。
[引用] 我需要从两个 CPU 访问 EPWM1寄存器、并且我不想在运行时更改 CPUSEL。 此问题是否有任何解决方法? [/报价]
您需要从两个 CPU 访问相同的 ePWM 模块吗? 如果是、则在当前架构中不可能实现这一点。 您只需通过 IPC 传递信息。 我们有多个 ePWM 模块、如果有需要、您可以为 CPU1分配一些模块、为 CPU2分配其他模块。
[引述] 还有一件事。 在运行时修改 CPUSEL 是否不会导致 ePWM 模块的输入时钟出现任何毛刺脉冲? [/报价]
您需要禁用 ePWM 模块的时钟、并确保没有等待处理的从 CPU 到 ePWM 模块的访问来切换 CPUSEL、否则可能会导致干扰。
此致、
Vivek Singh
您好!
[引用] 例如、EPWM1模块分配给 CPU1、EPWM2模块通过 CPUSEL 分配给 CPU2。 我认为、由于所有 ePWM 模块共享公共网桥、因此在 CPU1访问和 CPU2访问之间会发生仲裁。 此外、CPU1和 CPU2访问之间的仲裁发生在连接到同一桥的不同外设之间。 [/报价]
不可以、在这种情况下、由于 CPU1和 CPU2是不同的总线、因此仲裁不会产生影响。 桥是多路复用器和其他逻辑的组合、不负责仲裁。
此致、
Vivek Singh