大家好!我现在用TMS320F28035做一个电源的控制,其中CLA处理闭环程序,由ADC触发,ADC采样由EPWM触发,这些调试中都没问题。现在想加一个Timer0的1kHz中断用来做定时,但是调试中发现使能PieCtrlRegs.PIEIER1.bit.INTx7 = 1之后(下面程序中标***部分),程序一运行就停止,且显示“No source available for "0x3ff599" ”,再运行还是马上停止显示同样的内容,我查了一下0x3ff599是属于Boot ROM。如果把使能中断那一行屏蔽掉,则运行正常(不产生Timer0中断)。我试过其他的中断,比如让CPU处理一个ADC中断,也会发生同样的问题。请问这是什么原因呢?
main()的内容为:
DeviceInit(); // Device Life support & GPIO
memcpy((Uint16 *)&RamfuncsRunStart,(Uint16 *)&RamfuncsLoadStart, (unsigned long)&RamfuncsLoadSize);
InitFlash();
CLA_Init();
InitEPwmGpio();
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0, 60, 50000);
CpuTimer0Regs.PRD.all = mSec0_5;
EPWM_CNF();
DPL_CLAInit(); // Digital Power (DP) library initialization
// INTERRUPT & ISR INITIALISATION
PieVectTable.TINT0 = &TimerIsr0; // 1 KHz ISR from CPU Timer 2
PieVectTable.EPWM1_TZINT = &EpwmTZ1;
EALLOW;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // PIE level enable, Grp1 / Int7 TINT0*******************
PieCtrlRegs.PIEIER2.bit.INTx1 = 1; // PIE level enable, Grp2 / Int1 EPWM1_TZINT
EDIS;
IER |= M_INT1|M_INT2; // Enable CPU INT1&2 connected to EPWM1-6 INTs:
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
// Background Loop
for (;;);
Timer0中断处理程序为:
#pragma CODE_SECTION(TimerIsr0,"ramfuncs");
__interrupt void TimerIsr0(void) // 2kHz
{
Counter_500us++;
if (Counter_500us > 9)
Counter_5ms++;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}