怎么在定时器中断程序中把中断关上
如题,我需要在打开定时器5S后进入中断函数:void interrupt LEDINT() //中断响应函数大致是150000000为5秒左右 datasheet 30MHZ
{
//CSR&= 0xfffe; // 关中断 GIE=0
asm(" NOP 1 ");
ICR = 0xFFF0;
ISR=0x0;
printf("\nok");
TIMER0_INTCLSTAT=0x3; // 清除定时器中断标志
asm(" NOP 1 ");
PWM_1_stop();
PWM_2_stop();
PWM_3_stop();
PWM_4_stop();
PWM_5_stop();
CSR&= 0xfffe;
}
但是我在最后加上一句关闭全局中断,还是会不断地进入终端函数,确定别的地方并没有再次打开,请问怎么办??? 一进入中断
CSR&= 0xfffe;
asm(" NOP 2 ");
这样应该就关掉了
放到最后是不是你的中断没执行到最后就有再次触发了? 我看到28035芯片手册,默认在中断服务程序开始把中断关掉,执行完再打开。你用的什么芯片?
中断函数中,不要用printf("\nok"); 哦 对 在中断中不要用printf 我是这么解决的,直接把定时器 的中断直接停了
TIMER0_INTCLSTAT=0x2;
下次用再打开
TIMER0_INTCLSTAT=0x3;
暂时先这么用着,谢谢诸位了 zuoanhuafeng 发表于 2019-12-12 15:17
我看到28035芯片手册,默认在中断服务程序开始把中断关掉,执行完再打开。你用的什么芯片?
中断函数中, ...
我用的6747的芯片,printf是暂时测试,使用的时候不会用 还收到回复:进入中断子程序后GIE会自动关闭,退出中断子程序时又会restore CSR,所以即使您在中断子程序里disable了GIE,最后退出子程序时又会restore CSR把GIE使能上。如果要不进入中断函数,那就要把IER寄存器disable掉。
页:
[1]