[DSP编程] 怎么在定时器中断程序中把中断关上

[复制链接]
1364|7
 楼主| jiabinjingyu 发表于 2019-12-11 17:50 | 显示全部楼层 |阅读模式
如题,我需要在打开定时器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;

}
但是我在最后加上一句关闭全局中断,还是会不断地进入终端函数,确定别的地方并没有再次打开,请问怎么办???

评论

@zhangmangui 大神能帮我指导一下吗?谢谢了  发表于 2019-12-11 17:53
zhangmangui 发表于 2019-12-11 22:11 | 显示全部楼层
一进入中断
CSR&= 0xfffe;               
asm(" NOP 2 ");
这样应该就关掉了  
放到最后是不是你的中断没执行到最后就有再次触发了?
zuoanhuafeng 发表于 2019-12-12 15:17 | 显示全部楼层
我看到28035芯片手册,默认在中断服务程序开始把中断关掉,执行完再打开。你用的什么芯片?

中断函数中,不要用printf("\nok");
zhangmangui 发表于 2019-12-12 22:14 | 显示全部楼层
哦 对   在中断中不要用printf
 楼主| jiabinjingyu 发表于 2019-12-14 13:55 | 显示全部楼层
我是这么解决的,直接把定时器 的中断直接停了
TIMER0_INTCLSTAT=0x2;
下次用再打开
TIMER0_INTCLSTAT=0x3;
暂时先这么用着,谢谢诸位了
 楼主| jiabinjingyu 发表于 2019-12-14 14:02 | 显示全部楼层
zuoanhuafeng 发表于 2019-12-12 15:17
我看到28035芯片手册,默认在中断服务程序开始把中断关掉,执行完再打开。你用的什么芯片?

中断函数中, ...

我用的6747的芯片,printf是暂时测试,使用的时候不会用
 楼主| jiabinjingyu 发表于 2019-12-14 14:03 | 显示全部楼层
还收到回复:进入中断子程序后GIE会自动关闭,退出中断子程序时又会restore CSR,所以即使您在中断子程序里disable了GIE,最后退出子程序时又会restore CSR把GIE使能上。如果要不进入中断函数,那就要把IER寄存器disable掉。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部