大家好、F2837xD 器件技术手册中的一段话是:
"对于变频应用、ePWM 模块之间需要同时写入 TBPRD 和 CMPx 寄存器。 这可防止 CTR = 0或 CTR = PRD 脉冲在 ePWM 模块之间更新所有寄存器之前强制影子到活动加载这些寄存器的情况(导致一些寄存器从新影子值加载、而其他寄存器从旧影子值加载)。 为了支持这一点、在 PWM 模块之间添加了一个针对 TBPRD:TBPRDHR、CMPA:CMPAHR、CMPB:CMPBHR、CMPC 和 CMPD 寄存器的 ePWM 寄存器链接方案。 对于特定的 ePWM 模块# A,用户代码将“B+1”写入 EPWMXLINK 中链接的寄存器位域。 “B”是链接到的 ePWM 模块#(即,对 ePWM 模块“B”TBPRD:TBPRDHR、CMPA:CMPAHR、CMPB:CMPBHR 或 CMPC 的写入将同时写入 ePWM 模块“A”中的相应寄存器)。 例如、如果 ePWM3 EPWMXLINK 寄存器配置为 CMPA:CMPAHR 链接到 ePWM1、则写入 ePWM 1中的 CMPA:CMPAHR 将同时向 ePWM3中的 CMPA:CMPAHR 写入相同的值。 如果 ePWM4还将其 CMPA:CMPAHR 寄存器链接到 ePWM1、那么写入 ePWM 1将向 ePWM3和 ePWM4中的 CMPA:CMPAHR 寄存器写入相同的值。 EPWMXLINK 的寄存器说明明确解释了相应 ePWM 的链接寄存器位域值。"
首先、这是否意味着我们需要仅为了同时加载这两个寄存器而初始化新的 PWM 模块?
C2000Ware 中是否有任何示例、最好使用直接寄存器访问方法、其中显示了如何同时执行此操作?
如果 CPU 从顶部到底部执行指令、那么同时更新这些寄存器的唯一方法是使用 CLA、还是使用与 CPU 并行运行的东西?
这里是我在 ISR 中的一些代码、它接收来自远程 CPU 的调制信号、远程 CPU 执行它的 CLA、它使用 DF22控制律并将信息传回 CPU1。 然后、我绑定误差信号并以非常简单的方式调制寄存器:
"
中断空 ipc0_ISR (空)
{
//从远程 CPU 读取 IPC 响应并写入变量
collectorMod =(uint16) IpcRegs.IPCREMOTEREPLY;//读取 IPC ADDR 寄存器上的数据
//将返回的控制值绑定到1到2.1之间
//给出最小和最大频率范围
if (collectorMod < 1)
{
collectorMod = 1;
}
if (collectorMod > 2.1)
{
collectorMod = 2.1;
}
//根据最小开关频率调整调制输出
collectorMod = collectorMod* RES_PERIOD_MAX;
//调制 谐振转换器的 TBPRD 寄存器
//我们需要使用 PDF 文档中概述的 PWM 链接器方法同时编写 CMPA 和 TBPRD。。。 未在此处完成
RES_PERIOD =集合 Mod;
EPwm4Regs.CMPA.bit.CMPA = RES_PERIODE/2;// CMPA 设置占空比
//从中断返回
IpcRegs.IPCACK.bit.IPC0 = 1;//清除 IPC0位
PieCtrlRegs.PIEACK.all = PIEACK_Group1;//确认 PIE 组1以启用进一步的中断
}
"
我需要在这项工作中添加哪些内容来同时写入两个寄存器、而不是我现在所采用的方式?
提前感谢!
Joel