打印

AN576,清GIE真的需要这样做?

[复制链接]
3115|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
伊莱克斯|  楼主 | 2007-5-30 09:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要是因为如果中断正好发生在  BCF INTCON,GIE这句后面,主程序清了GIE后立即进入中断服务程序,退出中断的时候又自动恢复了GIE,所以,主程序改成:

LOOP   BCF   INTCON, GIE    ; Disable Global Interrupt
       BTFSC INTCON, GIE    ; Global Interrupt Disabled?
       GOTO  LOOP           ; NO, try again
       :                    ; YES, continue with program flow
       :    
       BSF   INTCON, GIE    ; Re-enable Global Interrupt

真的需要这么麻烦码?GIE清除这条指令后,即使有INTERRUPT FLAG,也不能通过一群与或门(最后一道GIE的与门被关闭了)触发中断啊?
请MARTIN指教,虽然明白这么写最保险,但是这个牵涉PIC内部的时序设计,还是原厂FAE提供解答比较好。谢谢。
沙发
martin| | 2007-5-30 12:46 | 只看该作者

Re

好久没看到你了,在忙什么呢?
这个AN576是很久很久以前的一个应用笔记,大约是97年出的。
可以肯定地说,对于PIC16FXXX或者更新的PIC,这个AN576是不适用的。如果中断恰好发生在BCF INTCON,GIE这条指令执行的过程中,中断的3个指令周期的延时,会保证让这个清GIE的指令执行完成,并且象你所说的,把中断请求的门给关上,绝对不需要AN576的所说的代码。
对于PIC16CXXX的PIC,(又老又贵的,你还会用吗?),数据手册上就说了是有这种可能性的,尽管我做了若干次实验都没能观察到这个现象,但我还是建议保守地按AN576的方法加上那两行代码吧。

使用特权

评论回复
板凳
gtw| | 2007-5-30 13:06 | 只看该作者

现在主推那些型号给小型应用?

使用特权

评论回复
地板
伊莱克斯|  楼主 | 2007-5-30 17:08 | 只看该作者

呵呵,最近被公司卖的脑袋都痛了,坛子自然混的少了。

问题是这个是在16F88x的DATASHEET上面看到的。
够新的片子了吧,在EEPROM这块例程就写了参见AN576。。。

使用特权

评论回复
5
yewuyi| | 2007-5-30 17:40 | 只看该作者

很早前的说法了

我一直都没按照它的说法做……

使用特权

评论回复
6
martin| | 2007-5-31 11:08 | 只看该作者

呵呵

16F88X的数据手册Page216有这样一段话呀:
Note 1: Individual interrupt flag bits are set,
regardless of the status of their
corresponding mask bit or the GIE bit.
2: When an instruction that clears the GIE
bit is executed, any interrupts that were
pending for execution in the next cycle
are ignored. The interrupts, which were
ignored, are still pending to be serviced
when the GIE bit is set again.
至于EEPROM示例代码里的提到AN576的地方,我只觉得是写Datasheet的人太保守了吧。

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝