您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术单片机中断系统应用须关注的问题 正文
单片机中断系统应用须关注的问题

单片机中断系统应用须关注的问题

点击数:7190 次   录入时间:03-04 11:46:43   整理:http://www.55dianzi.com   嵌入式系统-技术
       目前在世界一些著名的 单片机 产品系列中,PIC16F87X系列单片机是芯片内部包含有外围设备模块数量最多的单片机品种之一。PIC16F874和PIC16F877单片机的芯片内部集成了15个外围设备模块;PIC16F873和PIC16F876单片机的芯片内部集成了12个外围设备模块。在最近推出的该系列的新型号中, PIC16F870单片机的芯片内部集成了10个外围设备模块;PIC16F871单片机的芯片内部集成了13个外围设备模块;PIC16F872单片机的芯片内部也集成了10个外围设备模块(比PIC16F870多了1个USART模块,少了1个SSP模块)。

  这些外围设备模块在启用时以及在工作过程中,都或多或少地需要CPU参与控制、协调或交换数据等各种服务工作。由于CPU的运行速度非常高,而各个外围设备模块的工作速度却非常低,况且这些外围设备模块也不是频繁地要求CPU对其服务。因此,通常采取一种让众多外围设备模块共享1个CPU,并且能够及时得到CPU服务的调度方法—— 中断 。

        一、 PIC16F87X的中断源

  PIC系列单片机是当今世界上很有影响力的精简指令集(RISC)微控制器,具有丰富的中断功能。其中功能强大的中、高挡型号的中断源有18种之多。在PIC单片机家族中,排位属于中上水平的PIC16F87X子系列单片机具备的中断源多达14种。其中,单片机的型号不同,中断源的种类、个数也不同,如表1所列。其不足之处是:中断矢量只有1个,并且各个中断源之间也没有优先级别之分,不具备非屏蔽中断。

PIC16F87X的中断源


  从表1中可以看出,各中断源基本上都是与各个外围设备模块相对应的。其中,多数外围设备模块对应着1个中断源(比如定时器/计数器TMR0模块),有的外围设备模块对应着2个中断源(比如通用同步/接收/发送器SCI模块),也有的外围设备模块没有中断源与之对应(比如输入/输出端口RA和RC模块),还有的中断源没有外围设备模块与之对应(比如外部触发中断源INT)。

       二、 PIC16F87X的中断硬件逻辑

  在PIC16F87X的子系列中,具体型号不同,中断逻辑电路也存在着差异,中断源的种类和个数也不同:最多的具备14种中断源;最少的具备10种中断源(详见表1)。其中并行端口模块和并行端口中断源,只有40脚封装的型号(PIC16F871、PIC16F874和PIC16F877)才会具备;而对于28脚封装的型号(PIC16F870、PIC16F872、PIC16F873和PIC16F876)则不具备。

  PIC16F87X系列单片机中断系统的逻辑电路如图1所示。每一种中断源对应着1个中断标志位(记为XXXF,F是Flag的第1个英文字母)和1个中断屏蔽位或者叫中断使能位(记为XXXE,E是Enable的第1个英文字母)。中断源产生的中断标志信号是否得以向前传递,将受控于对应的中断屏蔽位。每一个中断标志位都对应着1个触发器。当中断源申请CPU中断时,与之对应的触发器就由硬件自动置位,而该触发器的清零是由用户安排程序来实现的;每一个中断屏蔽位也对应着1个触发器。该触发器的置位和清零均是由用户程序完成的。

  图1描绘的逻辑电路是1个由简单的门电路构成的组合逻辑电路。将全部14个中断源按2个梯队并列排开,第1梯队中只安排了3个中断源,其余的中断源全部安排到第2梯队中。这样做是为了与早期的PIC系列单片机型号相兼容(前些年研制出的单片机型号片内配置的外围设备模块数量较少,相应的中断源的数量自然也就少,比如PIC16C61只有第1梯队中的3个中断源)。近期研制的一些PIC单片机新型号是在原有的单片机芯片基础之上进行一些功能扩展而得来的。

中断逻辑

                                                    图1中断逻辑

www.55dianzi.com
  所有的 中断 源都受全局中断屏蔽位(也可以称为总屏蔽位)GIE的控制。第1梯队的中断源不仅受全局中断屏蔽位的控制,还要受各自中断屏蔽位的控制;第2梯队的中断源不仅受到全局中断屏蔽位和各自中断屏蔽位的控制,还要额外受到1个外设中断屏蔽位PEIE的控制。

       三、 中断相关的寄存器

  与中断功能有关的特殊功能寄存器共有5个:中断控制寄存器INTCON、第1外围设备中断标志寄存器PIR1、第1外围设备中断屏蔽寄存器(又称中断使能寄存器)PIE1、第2外围设备中断标志寄存器PIR2和第2外围设备中断屏蔽寄存器PIE2。如表2所列,5个寄存器中共有40位,其中使用了30位。分别与图1中的中断逻辑电路的输入逻辑信号成严格对应关系,也与逻辑表达式成严格对应关系。这5个寄存器都具有在RAM数据存储器中统一编码的地址。也就是说,PIC 单片机 可以把这5个特殊寄存器当作普通寄存器单元来访问(即读出或写入操作)。这样有利于减少指令集的指令类型和指令数量,也便于学习、记忆和编程。

与中断功能相关的寄存器


      四、 中断的处理

  单片机复位后,由硬件自动对全局中断屏蔽位进行设置GIE=0,将屏蔽所有的中断源。中断返回指令“RETFIE”执行后,也由硬件自动对总屏蔽位进行设置GIE=1,重新开放所有的中断源。不论各种中断屏蔽位和全局中断屏蔽位GIE处于何种状态(是开放还是禁止),当某一中断源的中断条件满足时,都会发出中断请求,相应的中断标志位都会被置位(=1)。但是,是否能够得到CPU的响应,则要根据该中断源所涉及到的中断屏蔽位的状态而定。CPU响应中断后,由硬件自动对全局中断屏蔽位进行清零(GIE=0),屏蔽所有的中断源,以免发生重复中断响应,然后,由硬件自动把当前的程序计数器PC值(即程序断点地址)压入堆栈(实际为硬件堆栈),并且把PC寄存器置以中断向量地址(0004H),从而转向并开始执行中断服务程序。进入中断服务程序后,程序中必须安排指令,检查发出请求的中断源(如果同时开放多个中断源的话)。这可以通过检查各个中断源的标志位来实现。一旦确定出发出申请的中断源,就用软件把该中断源的标志位人为地清零,否则,执行中断返回指令“RETFIE”。重开中断后,由于中断标志位仍为“1”而引起CPU重复响应同一个中断请求。中断服务程序的末尾必须放置1条中断返回指令“RETFIE”。执行该条指令后,不仅可以重开中断,而且还可以由硬件自动将保留在堆栈顶部的断点地址弹出,并放回到程序计数器PC中,使CPU返回和继续执行被中断的主程序。

  1 中断的延时响应和延时处理

  1次中断过程,从中断源发出请求到得到CPU的响应必然存在一定的延迟时间。各个相关信号的时序图如图2所示。

INT引脚中断时序图
图2INT引脚中断时序图

  在图2中,第1行是系统时钟脉冲信号,每4个时钟周期对应1个指令周期。第2行就是指令周期信号。该信号只有在RC振荡模式下,从OSC2脚上可以向片外送出。第3行是单片机外部引脚INT送入的中断脉冲信号。外部中断信号INT是用边沿触发的。假设预先设定的是INT中断信号上升沿有效的话,则该信号的上升沿将会在1个时钟周期后引发中断标志位INTF被置位。第4行代表INTF信号。每个指令周期内的第2个时钟脉冲上升沿时,该信号被抽检1次。一旦检测到INTF信号被设置为“1”,则CPU会在接下来的1个指令周期内,将全局中断屏蔽位GIE清零。第5行是全局中断屏蔽位GIE。在GIE信号被清零的下一个指令周期内,程序计数器PC被置入中断向量0004H,见图2中第6行。同时在该指令周期内完成到中断服务程序的跳转,并且实现提取该子程序的首条指令,即指令(0004H),见图2中第7行。在其后的1个指令周期内,正式开始执行中断服务程序的第1条指令,见图2中第8行。自INT引脚输入有效信号,到中断服务程序的第1条指令得到执行,大约需要3~4个指令周期的延时。更精确的延迟时间取决于中断事件的发生时机。

  以上描述的只是1次中断从申请到得到CPU的响应的延迟时间。下面分析从CPU响应1次中断到该中断得到有效处理的延迟时间。由于具有中断功能的PIC系列单片机(低档产品PIC16C5X和PIC12C5X系列不具备中断功能),采用的是“多源中断”的设计方案(即1个中断向量对应着多个中断源),只有惟一的1个中断向量,或者说只有1个中断服务程序入口地址。这就意味着,此类单片机的中断服务程序只能编写1个。这类单片机的硬件结构得到了简化,那么,相应的软件设计上就得多开销一些。在1个中断服务程序中,若想对多个中断源作出处理,就必须在进入中断服务程序后,首先执行调查具体中断源的一条或多条指令,其后才能对查到的中断源作出有针对性的服务。如此以来,就形成了1次中断从CPU响应到进入针对性处理的延迟时间。该时间有长有短,它会随着被开放的中断源的个数的增加而增加。最好情况是只有1个中断源被开放,这时不需要检测中断源就可以立即进入针对性处理;最坏情况是所有中断源全部开放,此时用在检测中断源上的时间会最长。

[1] [2] [3]  下一页


本文关键字:单片机  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术