打印
[DSP编程]

怎么在定时器中断程序中把中断关上

[复制链接]
980|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;

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

使用特权

评论回复
评论
jiabinjingyu 2019-12-11 17:53 回复TA
@zhangmangui 大神能帮我指导一下吗?谢谢了 

相关帖子

沙发
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

使用特权

评论回复
5
jiabinjingyu|  楼主 | 2019-12-14 13:55 | 只看该作者
我是这么解决的,直接把定时器 的中断直接停了
TIMER0_INTCLSTAT=0x2;
下次用再打开
TIMER0_INTCLSTAT=0x3;
暂时先这么用着,谢谢诸位了

使用特权

评论回复
6
jiabinjingyu|  楼主 | 2019-12-14 14:02 | 只看该作者
zuoanhuafeng 发表于 2019-12-12 15:17
我看到28035芯片手册,默认在中断服务程序开始把中断关掉,执行完再打开。你用的什么芯片?

中断函数中, ...

我用的6747的芯片,printf是暂时测试,使用的时候不会用

使用特权

评论回复
7
jiabinjingyu|  楼主 | 2019-12-14 14:03 | 只看该作者
还收到回复:进入中断子程序后GIE会自动关闭,退出中断子程序时又会restore CSR,所以即使您在中断子程序里disable了GIE,最后退出子程序时又会restore CSR把GIE使能上。如果要不进入中断函数,那就要把IER寄存器disable掉。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

17

帖子

0

粉丝