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

[复制链接]
4120|5
 楼主| 伊莱克斯 发表于 2007-5-30 09:03 | 显示全部楼层 |阅读模式
主要是因为如果中断正好发生在&nbsp;&nbsp;BCF&nbsp;INTCON,GIE这句后面,主程序清了GIE后立即进入中断服务程序,退出中断的时候又自动恢复了GIE,所以,主程序改成:<br /><br />LOOP&nbsp;&nbsp;&nbsp;BCF&nbsp;&nbsp;&nbsp;INTCON,&nbsp;GIE&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Disable&nbsp;Global&nbsp;Interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BTFSC&nbsp;INTCON,&nbsp;GIE&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Global&nbsp;Interrupt&nbsp;Disabled?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GOTO&nbsp;&nbsp;LOOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;NO,&nbsp;try&nbsp;again<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;YES,&nbsp;continue&nbsp;with&nbsp;program&nbsp;flow<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BSF&nbsp;&nbsp;&nbsp;INTCON,&nbsp;GIE&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Re-enable&nbsp;Global&nbsp;Interrupt<br /><br />真的需要这么麻烦码?GIE清除这条指令后,即使有INTERRUPT&nbsp;FLAG,也不能通过一群与或门(最后一道GIE的与门被关闭了)触发中断啊?<br />请MARTIN指教,虽然明白这么写最保险,但是这个牵涉PIC内部的时序设计,还是原厂FAE提供解答比较好。谢谢。
martin 发表于 2007-5-30 12:46 | 显示全部楼层

Re

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

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

  
 楼主| 伊莱克斯 发表于 2007-5-30 17:08 | 显示全部楼层

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

问题是这个是在16F88x的DATASHEET上面看到的。<br />够新的片子了吧,在EEPROM这块例程就写了参见AN576。。。
yewuyi 发表于 2007-5-30 17:40 | 显示全部楼层

很早前的说法了

我一直都没按照它的说法做……
martin 发表于 2007-5-31 11:08 | 显示全部楼层

呵呵

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

本版积分规则

1

主题

4

帖子

0

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