《匠人手记》推荐网上购书渠道:
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
卓越亚马逊网 购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

 匠人观点: 好记性不如烂笔头  
 黑色幽默:三鹿门——后世畅想

单片机多中断处理技术研究
程序匠人 发表于 2006-4-11 19:34:00  阅读全文 | 回复(0) | 引用通告 | 编辑

作者:边增远 曾…    文章来源:http://www.embed-mcu.com

摘 要: 为了解决PIC系列单片机在处理多中断时不具备处理"高级优先处理"能力的问题,本文分析了多中断同时出现时的相关处理方法,并提出了一种以耗费一个指令周期为代价弥补了硬件设计上 "缺陷" 的技术。
关键词: 时序,多中断
1.引 言:
中断技术的应用大大提高了CPU的有效使用率,有效提高了资源的利用率。中断的性能同时也就成了衡量芯片性能的标准。新开发的芯片增加了很多的中断源,如 PIC16F877的中断源已经达到14个,可谓相当丰富;但同时也带来了一些难题:如此多的中断源在处理时很容易产生中断冲突,如何有效的处理中断到达时的时序,其算法应该如何实现成了首先需要解决的问题,
2.中断处理技术
为了解决多中断带来的问题,有必要清楚单个中断到达时的处理技术,首先简要介绍中断的基本原理:计算机在执行某一程序过程中,由于计算机系统内外原因,而必须中止原程序的执行,转去执行相应的处理程序,待处理结束后再回来继续执行中止程序。当只有一个事件被响应,进入中断执行中断程序,这较易被处理,当两个,三个,甚至更多的中断同时产生的时候,处理起来就复杂多了,对于PIC系列单片机,其设计上虽然有很多中断,但是并没有规定中断的优先级。当遇到中断的时候,不做任何判断,而是先把指针指向0004H(中断起始地址),至于接下来如何操作则完全交给用户"软处理"完成。其中断时序图如下:


INT引脚中断时序图
其中时序图说明如下:
(1)中断开销时间=3~4TCY,取决于是单周期还是双周期指令,这里的TCY为指令周期
(2)CLKOUT信号仅在RC振荡器下有效。
(3)INTF标志可在Q4~Q1期间的任何的时候把其置成高电平。
如果正当全局中断允许位GIE清零(禁止中断)时发生中断,GIE位可能会被用户的中断服务程序(RETFIE指令)无意地重新开放,能引起该事件发生有以下情况:
1. 在一个中断被响应时执行一条对GIE位置1的指令;
2. 程序正在转向中断矢量并执行中断服务程序;
在执行中断返回指令RETFIE后中断服务程序完成。这将引起GIE位被置1(开放中断)并且程序返回一条指令,而这条指令的下一条指令将禁止中断。
要确保整个中断被禁止的方法是通过以下程序代码使GIE位清零:
loop BCF INTCON,GIE
BTFCS INTCON,GIE
GOTO loop
3.多路中断处理技术
以上方法不能解决多路中断问题,因此有必要具体分析一下当最坏的情况发生时,即多路中断同时出现时的中断处理过程。
怎样出现的中断才能称为"多路中断同时出现"呢?通过上面的时序图,可以得出这样的结论:(1)当一个中断产生时,在一个周期范围内必然产生一个中断标志,由此触发全局中断禁止位。(2)判断中断的类型就是判断其对应中断的标志位。(3)在第一个诱发中断源产生中断时开始,到中断程序执行完成的范围内,如果有其它中断发生,那么都称为"多路中断同时出现"。
要处理多路中断问题,中断处理程序的算法大体上可以分为两类:弱中断优先级(使用CALL和RETURN方式)和强中断优先级(使用GOTO方式)。其程序结构图如下:



设第n个子程序的运行时间为Rn;同一个中断源的两次中断最小时间间隔In,在中断处理程序结构1中,中断1,中断2,中断3的优先权级为中断1>中断 2>中断3,这种方法在中断处理中广为使用。对于具有抢先优先级要求的程序可以通过第二个程序结构完成,即每执行完一个中断程序都重新检查该中断程序的中断标志位,如果其标志位又被置位,则执行该中断。为了确保第二个中断能够执行必须要求R1<I1,同样第三个能够执行的条件是R1+R2< I1+I2,第n个中断能够被执行的条件是Σ(Rn)<Σ(In),同时这也是程序能从中断中正常跳转出来的条件。对于普通的程序设计,这样的优先级一般能够满足用户的使用需求,但对于较大的程序设计往往需要更高的优先级甚至超优先级,也就是说即使正在执行中断程序,当"超优先级"中断到来的时候,马上就要停止当前工作,而去执行"超优先级"中断。要实现这种中断模式,完全可以在中断程序中添加一个或者几个判断指令来实现。以上图的GOTO结构方式为例,为了使ISR1拥有超高优先级,可以在ISR2中断程序中加入如下指令:
BTFSC INT1,INTIF ;判断INT1是否有中断
GOTO INT1 ;是!执行INT1中断
如果ISR2的程序较长或者ISR1的中断级较高,可以在ISR2中加入多条这样的语句。同样道理,为了形成ISR2的次高优先级,可以在ISR3中加入指令:
BTFSC INT2,INTIF ;判断INT2是否有中断
GOTO INT2 ;是!执行INT2中断
由此可以达到预期效果,这种方法主要是基于每个子程序的执行时间比较长而产生的,如果每个中断程序的执行时间都很短,那么也就没有必要牺牲这一个指令周期了,所以程序的设计应该力求中断的简洁。
为了能够编写好一个简洁的中断程序,应抓住中断的特点是具有实时性,针对实时中断数据采集系统,也就是中断的特点在于数据的采集。因此在中断程序中只应该处理数据采集和标志位的设置,而将数据的处理放在中断之外,由主程序通过循环检测执行数据处理工作,具体做法:先开辟一个"储存缓冲区",作为采集来的数据的传递媒体,即存储采集数据,等待主程序的处理;中断程序负责数据的采集,并且将采集来的数据值赋给"存储缓冲区";主程序通过条件循环语句反复检测" 存储缓冲区"情况,及时处理采集信息。这样在处理方法既能有效的实现中断的功能,又可以极大的缩减每个中断的时间,提高整个程序的反应速度。
4.结束语:
从上看出,灵活地应用中断,不但可以大量的节省CPU资源,而且能够使程序更加简化,具有更高的实时性和稳定性。在实际应用中应该注意将任务合理分配给中断和主程序,二者要分工明确,接口简单。这其中的技巧还需要在实践中多多摸索与体会。

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    往日酷贴

     
     
     

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!