Other Parts Discussed in Thread: SYSCONFIG, C2000WARE
使用软件触发epwm的TZ,以用于保护,现在程序可以强制pwm输出低电平,但恢复pwm输出异常,以下是sysconfig配置和部分程序:


#include "driverlib.h"
#include "device.h"
#include "board.h"
__interrupt void epwm1TZISR(void);
uint8_t Mode = 1U;
uint8_t PWMEN_Flag = 0U;
uint32_t cnt = 0U;
void EPwm_Enable(void)//PWM使能
{
EALLOW;
EPWM_clearOneShotTripZoneFlag(myEPWM1_BASE, EPWM_TZ_OST_FLAG_OST1);
// SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
EDIS;
}
void EPwm_Disable(void)
{
EALLOW;
EPWM_forceTripZoneEvent(myEPWM1_BASE, EPWM_TZ_FORCE_EVENT_OST);
// SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
EDIS;
}
void test_fun(void)
{
if (Mode == 0)
{
if (PWMEN_Flag == 1)
{
PWMEN_Flag = 0;
EPwm_Disable();
}
}
if (Mode == 1)
{
if (PWMEN_Flag == 0)
{
PWMEN_Flag = 1;
EPwm_Enable();
}
}
}
int main(void)
{
Device_init();//初始化时钟和外设
Device_initGPIO();
Interrupt_initModule();//初始化PIE,清空PIE注册表,禁止CPU中断
Interrupt_initVectorTable();
SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
Board_init();
SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
EINT;
ERTM;
while(1)
{
test_fun();
NOP;
}
}
__interrupt void epwm1TZISR(void)
{
cnt++;
Interrupt_clearACKGroup(INT_myEPWM1_TZ_INTERRUPT_ACK_GROUP);
}
程序参照另外两篇e2e帖子写的,AI回复为 EPWM_clearOneShotTripZoneFlag(myEPWM1_BASE, EPWM_TZ_OST_FLAG_OST1);未正常工作