打印

写中断程序的几点提醒

[复制链接]
2302|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
david.ma|  楼主 | 2007-10-16 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.    如果IE(interrupt enable)置位指令置于中断处理程序外,而且有HALT或STOP指令,则需将这两指令紧跟在IE置位指令之后;
2.    CPU响应中断后,在IE重新置位前必须清除IRQ,以防止出现一次中断多次响应的现象;
3.    进入中断服务程序后,会自动Disable Interrupt (IE自动清零),如果太早Enable IE,会有Re-Entry的可能。因此将中断Enable的指令放在最后,必须在Enable IE之后的第二条指令就RTNI结束中断。(两条指令包括RTNI指令);
4.    CPU执行完中断开放指令后,在接下来的两个指令周期内,不会响应任何中断;
5.    CPU响应中断后,IE各bit位均由硬件清零,IRQ的清零和IE的重新开放则需软件完成。
6.    若需保存某一中断具有最高优先级,在中断处理过程中开中断,会形成中断嵌套,则需在每个中断处理程序中用不同的寄存器保存ACC的值,设计时需防止中断循环次数与程序CALL的层数之和小于MCU的stack层数。
沙发
river1972| | 2007-10-17 20:50 | 只看该作者

如果是这样

进入中断服务程序后,会自动Disable Interrupt (IE自动清零),如果太早Enable IE,会有Re-Entry的可能。因此将中断Enable的指令放在最后,必须在Enable IE之后的第二条指令就RTNI结束中断。(两条指令包括RTNI指令);
但是mcu在响应中断的时候并不保护acc,需要用软件来保护acc,如果是在rtni之前的一条指令来enable中断的话,不是会影响acc的值吗?
是否应该是:
   ldi   ieReg, xxxx
   sta   acctemp
   rtni

使用特权

评论回复
板凳
river1972| | 2007-10-18 15:50 | 只看该作者

中颖的fae来发表一下看法

使用特权

评论回复
地板
warm_ice| | 2007-10-19 13:51 | 只看该作者

这样

开中断后2条指令内不会响应中断,因为IC不会自动保护ACC值,所以返回时的标准格式为:
LDI  IE   ,0FH    ;开中断
LDA  ACC_TEMP     ;恢复ACC值
RTNI

这样开中断后,恢复ACC值,加上返回指令RTNI,刚好2条指令,从而保护不会有中断嵌套的发生.

使用特权

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

本版积分规则

2

主题

3

帖子

0

粉丝