Hi chris:
I want use PWM1_TZINT . but I get failure.
I add follow sentences:
1. In HAL_initIntVectorTable(halHandle);
static inline void HAL_initIntVectorTable(HAL_Handle handle)
{
HAL_Obj *obj = (HAL_Obj *)handle;
PIE_Obj *pie = (PIE_Obj *)obj->pieHandle;
ENABLE_PROTECTED_REGISTER_WRITE_MODE;
pie->ADCINT1 = &mainISR;
pie->EPWM1_TZINT =&ipmISR; //add this
DISABLE_PROTECTED_REGISTER_WRITE_MODE;
return;
}
2. In main() ,add:
// enable the TZ1 interrupts
HAL_enableTz1Ints(halHandle);
in hal.c :
void HAL_enableTz1Ints(HAL_Handle handle)
{
HAL_Obj *obj = (HAL_Obj *)handle;
// enable the PIE interrupts associated with the ADC interrupts
PIE_enableTzInt(obj->pieHandle,PWM_Number_1);
// enable the Tz interrupts
Tz_enableInt(obj->pwmHandle[PWM_Number_1]);
// enable the cpu interrupt for EPWM1_TzINT
CPU_enableInt(obj->cpuHandle,CPU_IntNumber_2);
return;
}
3.
In pie.c add:
void PIE_enableTzInt(PIE_Handle pieHandle,const PWM_Number_e pwmNumber) //新增
{
PIE_Obj *pie = (PIE_Obj *)pieHandle;
uint16_t index = 1;
uint16_t setValue = (1 << pwmNumber);
// set the value
pie->PIEIER_PIEIFR[index].IER |= setValue;
return;
}
In pwm.c add:
void Tz_enableInt(PWM_Handle pwmHandle)
{
PWM_Obj *pwm = (PWM_Obj *)pwmHandle;
//set the bits
pwm->TZEINT |= 0x04;
return;
}
4. In mymain.c add ipmISR();
interrupt void ipmISR(void) //变频器硬件故障
{
HAL_Obj *obj1 = (HAL_Obj *)halHandle;
// close 244
GPIO_setLow(obj1->gpioHandle,GPIO_Number_17);
HAL_acqTzInt(halHandle,PWM_Number_1); //clear interrupt flag
}
then in hal.h add:
//!新增
static inline void HAL_acqTzInt(HAL_Handle handle,const PWM_Number_e pwmNumber)
{
HAL_Obj *obj = (HAL_Obj *)handle;
TZ_clearIntFlag(obj->pwmHandle[pwmNumber]);
// Acknowledge interrupt from PIE group 2
PIE_clearInt(obj->pieHandle,PIE_GroupNumber_2);
}
After these configurated I debug programe. I set GPIO12 low , , this time pwm pulse chang to low. that mean pwm closed. but there no interrupt signal . breakpoint not occur in ipmISR().
I check TZINT regester. but it =0x0000.
where did I wrong? help me . thanks..
yanzheng
best regard!