新手学生党,照着书想利用CpuTimer0的周期中断信号开关LED灯的例程。初始设置灯不亮。可是程序运行后灯就一直亮,我想是不是只受到了一次中断信号。想请教这种情况怎么办?
主程序和中断子程序如下:
void main(void)
{
InitSysCtrl();
InitGpio();
GpioDataRegs.GPADAT.all = 0xFFFFFFFF;//初始化,引脚配置
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0,40,1000000); //cpu定时器配置
InitPieCtrl();
InitPieVectTable();
PieCtrlRegs.PIEIER1.bit.INTx7 =1;//PIE中断使能
DINT;
IER = 0x0000;
IFR = 0x0000; //CPU中断初始化
IER|=M_INT1;
EINT;
ERTM; //开CPU中断、全局中断、实时中断
StartCpuTimer0();//启动定时器
while(1)
{};
}
interrupt void TINT0_ISR(void) // CpuTimer0中断子程序
{ CpuTimer0.InterruptCount++;
if(CpuTimer0.InterruptCount==1)
{
GpioDataRegs.GPADAT.all = 0xFFFFFFFD;//灯亮
}
if(CpuTimer0.InterruptCount==2)
{
GpioDataRegs.GPADAT.all = 0xFFFFFFFF;//灯灭
CpuTimer0.InterruptCount=0;
}
CpuTimer0Regs.TCR.bit.TIF=1;//清除定时器标志位
PieCtrlRegs.PIEACK.all=0;//清除PIE应答位
asm (" ESTOP0");
for(;;);
}
Yuyang Cai:
回复 mangui zhang:
我自己解决了,原来是中断子程序有两个问题。。
1.清楚PIE应答位应该是PieCtrlRegs.PIEACK.all=1;
2.asm (" ESTOP0");
for(;;);这两行应该删掉
泪奔。。终于找到原因了