白姐透特今晚开什么码

打印

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

[复制链接]
150|7
跳转到指定楼层
楼主
如题,我需要在打开定时器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;

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

评论

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

相关资料

沙发
|2019-12-11 22:11|只看该作者
一进入中断
CSR&= 0xfffe;               
asm(" NOP 2 ");
这样应该就关掉了  
放到最后是不是你的中断没执行到最后就有再次触发了?
板凳
|2019-12-12 15:17|只看该作者
我看到28035芯片手册,默认在中断服务程序开始把中断关掉,执行完再打开。你用的什么芯片?

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

中断函数中, ...

我用的6747的芯片,printf是暂时测试,使用的时候不会用
7
 楼主|2019-12-14 14:03|只看该作者
还收到回复:进入中断子程序后GIE会自动关闭,退出中断子程序时又会restore CSR,所以即使您在中断子程序里disable了GIE,最后退出子程序时又会restore CSR把GIE使能上。如果要不进入中断函数,那就要把IER寄存器disable掉。
扫描二维码,随时随地手机跟帖
*滑动验证:

本版积分规则

我要发帖投诉建议创建版块

快速回复

您需要登录后才可以回帖
登录 | 注册

论坛热帖

关闭

热门推荐上一条 /6 下一条

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