Other Parts Discussed in Thread: LAUNCHXL-F280025C, C2000WARE
器件型号: TMS320F280025C
主题中讨论的其他器件: LAUNCHXL-F280025C、 C2000WARE
您好、
我已配置 F280025C 的 EPWM1 模块、以从 DCAEVT1.inter 信号触发 TZ 中断、CMPSS3H 滤波信号会与该中断触发。 EPWM1 模块的配置在末尾显示
CMPSS3H 信号变为高电平(通过 GPIO 监控)后、EPWM1_TZ 的 ISR 将按预期执行。 中断在 ISR 内未得到确认。
在以固定时基运行的另一个函数内、执行以下代码:
EALLOW;
EPwm1Regs.TZDCSEL.bit.DCAEVT1 = 0; // Event disabled
EPwm1Regs.TZEINT.bit.DCAEVT1 = 0;
EDIS;
//
// Clear CMPSS flag
//
EALLOW;
EPwm1Regs.TZCLR.bit.DCAEVT1 = 1; // Clear event latch
EPwm1Regs.TZCLR.bit.INT = 1; // Clear TZ INT flag
EDIS;
// Acknowledge the interrupt
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
预计将禁用 DCAEVT1 触发 EPWM1_TZ 中断的机制。 尽管如此、一旦 EPWM1_TZ 中断得到确认、就会重新触发该中断。 即使 CMPSS3H 滤波信号为低电平(通过 GPIO 进行监控)、也会禁用 DCAEVT1 并禁用 DCAEVT1 中断。 我想知道为什么会重新触发 EPWM1_TZ 中断?
EPWM1 模块配置:
// Disable the ePWM1 module before configuration
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 0;
// Configure the Time-Base (TB) Submodule
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Up-count mode
EPwm1Regs.TBPRD = PWM_TIME_BASE_PERIOD; // Set the period value
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
EPwm1Regs.TBPHS.bit.TBPHS = 0; // Phase is 0
EPwm1Regs.TBCTR = 0; // Clear counter
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // Clock pre-scale
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock high speed pre-scale
// Configure the Counter-Compare (CC) Submodule
EPwm1Regs.CMPA.bit.CMPA = 1;//PWM_TIME_BASE_PERIOD / 2; // Set compare A value (50% duty cycle)
// Configure the Action-Qualifier (AQ) Submodule
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // Clear output A on up-count
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // Set output A on zero
// Configure the Event-Trigger (ET) Submodule
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO; // Select SOC on counter zero
EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST; // Generate pulse on 1st event
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
//
// Bypass CMPSS output signal through ePWM-XBAR
//
/* 1) Select MUX4.0 (CMPSS3H) for TRIP4 */
EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX4 = 0; /* MUX4.0 → CMPSS3H */
/* 2) Enable that MUX path */
EPwmXbarRegs.TRIP4MUXENABLE.all = 0x0000;
EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX4 = 1; /* gate it on */
//
// Bypass CMPSS output signal through Digital Compare submodule
//
// Select which signal goes to DCAH (TRIP4 → DCAH)
EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 4-1;
// Select which signal goes to DCAEVT1 (DCAH → DCAEVT1)
EPwm1Regs.TZDCSEL.bit.DCAEVT1 = 2; // DCAEVTI Selection: DCAH = high, DCAL = don't care
// Select version of DCAEVT1 (not filtered, synchronous)
EPwm1Regs.DCACTL.bit.EVT1SRCSEL = 0; /* Event source = DCAEVT1 */
EPwm1Regs.DCACTL.bit.EVT1FRCSYNCSEL = 0; /* Synchronous */
//
// Configure Trip Zone submodule to generate interrupt from CMPSS output signal
//
/* 2) Define what happens to the PWM pins when that event occurs
-> “do nothing” */
EPwm1Regs.TZCTL.bit.TZA = TZ_NO_CHANGE; /* 11b = no change */
EPwm1Regs.TZCTL.bit.TZB = TZ_NO_CHANGE;
/* 3) Enable the DCAEVT1 interrupt inside the module */
EPwm1Regs.TZEINT.all = 0; /* clear all enables */
EPwm1Regs.TZEINT.bit.DCAEVT1 = 1; /* enable local INT */
// Enable the ePWM1 module
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
设备/工具
- 器件:LAUNCHXL-F280025C
- CCS:12.7.1.00001
- 编译器:TI v22.6.1 LTS
- C2000Ware:C2000Ware_5_02_00_00