1.8259A的内部结构与主要信号
8259A是一个可编程的中断控制器(PIC),可实现中断优先权管理、中断屏蔽、中断嵌套、向量自动提供、级联等功能。单片可管理8级中断,通过级联可实现64级主从中断系统。8259A的内部结构和引脚信号请参看本书对应教材《微机原理与接口技术(第3版)》中的图7.18。
8259A对外有28条引脚,与其他I/O接口芯片一样,对外除了数据、地址、片选、读、写、中断请求、中断响应等信号外,还有一些特有的信号。
·IR0~IR7,8个异步中断请求输入信号
·CAS2~CAS0,主从级联双向信号
当系统的中断请求多于8个时,可用两个或更多的8259A级联,其中一个是主控制器,其余是从控制器。从片的INT输出接到主片的一个IR输入。在中断响应期间,若主片判定所响应的是由某一从片发出的请求,则它在级联线上发出该从片的识别号,并由各从片接收。从片将自己的识别号与该级联线上的识别号相比较,若一致的话,它应在第二个响应周期,把自己片内中断源的类型号通过D7~D0送给CPU,以便把控制引导到所对应的中断服务程序的入口。
值得注意的是,当系统的从片数目小于8个时,一定不要把从片的INT接到主片的IR0上。这是因为当主片的非级联的IR有请求时,主片在级联线上的驱动信号为000,就好像是让IR0上的从片响应一样。若这时真有一个从PIC接到主IR0输入,它响应中断而发出的类型号将与主片上非级联的IR发出的类型号在总线上冲突而产生错误。所以,主片的IR0输入只有当其IR1~IR7全接上从片时才最后用来接从片。
·,主从或缓冲方式,双向信号
当为输入时,由它决定该片为主片)还是为从片。当为输出时,8259A处于“缓冲方式”,该信号用来控制双向总线驱动器的启动端。这种方式常用于多片级联的大系统中。
2.8259A的工作原理
8259A通过编程可选择多种工作方式,正是由于可设置的工作方式多,其命令字与操作字较复杂,反而使8259A的编程与使用不太容易掌握。关于命令字与操作字的结构及编程,本书将通过例题分析进行解释(或参看本书对应的教材《微机原理与接口技术(第3版)》)。下面主要对8259A的工作原理与工作方式加以介绍。
(1)中断优先方式与中断嵌套
①为了适应不同的要求,8259A提供了两种中断优先方式,即固定优先和循环优先。
·固定优先。在此方式下,所有的IR都有固定优先级别,并且这种优先级别不随中断事件的出现和处理而改变。固定优先是一种常用的优先方式。8259A上电后就处于这种优先方式,且IR0优先级最高,IR7优先级最低。对于这种优先顺序,用户可根据自己的需要,通过编程来改变它,使它处于另外一种固定优先顺序。只要改变一次后就无须再改变它,它将一直保持这种优先顺序。
·循环优先。在此方式下,中断源的优先顺序是变化的,各用户被处理的机会应均等。当某一中断被处理后,应变成最低级,其下一级将变成最高级。这种方式使得每一个中断源都有成为最高优先级的机会,这就是自动循环优先,或者称同等优先。
②8259A提供了两种中断嵌套方式,即正常全嵌套方式和特殊全嵌套方式。(www.daowen.com)
·正常全嵌套方式(FNM)。正常全嵌套是指在中断系统中,高优先级的请求可以打断正被处理的程序而被响应和服务,这是8259A最常用的方式。这种方式是靠8259A中的服务寄存器ISR实现的。当某一个中断被响应时,会把其在服务寄存器的对应位ISRn置为1,并保持到CPU发出EOI命令,ISRn为判优电路判优的依据。若此时有一新的中断请求,判优电路要将新的请求与当前的ISRn位进行比较,从而决定两者优先级的高低,以响应高级中断,于是形成中断嵌套。
·特殊全嵌套方式(SFNM)。特殊全嵌套方式用于有主从片的级联中断系统中,该方式仅设置在主片中。它允许高优先级或同级的请求打断正进行的处理而实现特殊嵌套(正常全嵌套是不允许同级的请求中断正进行的处理的)。这种方式是专门为主、从PIC系统提供的,它可以实现从片内各级(对主片是同级)中断的嵌套。该方式下的相应ISR位的复位应特殊处理。具体做法是:在主片IR(该级接有从片)的中断处理程序中,中断返回前首先对从片发出EOI命令,使当前正处理的优先级最高的ISR位复位。此后判定从片的ISR中是否还有置1的位,若有,不应给主片发EOI命令;若从片的ISR全为0,再给主片发EOI命令,使其主片对应的ISR位清零。
(2)结束中断的处理方式
在8259A中,当某一中断被响应时,会将其内部的在服务寄存器的相应ISR位置1。而当中断处理结束时,使相应ISR位复位,这就是结束中断的处理,否则8259A的判优、嵌套等是不可能的。8259A有3种结束中断的处理方式,即自动结束方式、正常结束方式和指定结束方式。这3种结束方式对应3种EOI命令。
·正常EOI命令。该EOI命令使当前优先级最高的为1的ISR复位。在中断服务程序中,可用输出指令向8259A发出该EOI命令。
·指定EOI命令。在特殊全嵌套方式下,因为此时只根据ISR无法确定哪一级中断是最后响应和处理的,所以在程序中要发一指定的EOI命令,指出要清除当前在服务寄存器中的哪个ISR位。以上两种EOI命令都是通过操作命令字OCW2实现的。
·自动EOI命令。当某一IR被CPU响应结束(并非中断处理结束)时,自动使其ISR位清零。这种方式免除了中断处理结束一定要向8259A发EOI命令的必要,但带来的问题是8259A无法了解当前处理程序的真正优先级。因此,不管其优先级别高或低,8259A都向CPU发INT请求,最终会由于堆栈溢出而使系统陷于瘫痪。所以,自动EOI命令仅用于中断源不多且不允许嵌套的单片系统中。
(3)屏蔽中断源方式
·一般屏蔽方式。通过操作命令字OCW1,使8259A中的屏蔽寄存器IMR的一位或若干位置1,可相应地屏蔽掉对应位的中断源。屏蔽某一位不影响其他级。
·特殊屏蔽方式。在中断服务程序中,用操作命令字OCW1将屏蔽寄存器中的本级中断的对应位置1,即将本级中断屏蔽。然后用OCW3进入特殊屏蔽方式(SMM),同时使在服务寄存器中的对应位清零,为开放较低级中断请求提供可能。采用这种方式后,由于本级中断在中断服务程序中被屏蔽,所以对外界来说,好像CPU不处理任何中断。这样即使是最低级的中断请求,也会被响应。应注意,特殊屏蔽方式总是在中断服务程序中使用。
(4)中断请求触发方式
8259A有两种中断请求触发方式,即边沿触发和电平触发。
·边沿触发方式。中断请求是在IR由低电平到高电平跳变(上升沿)时产生中断的,该中断请求被锁存在沿检测锁存器内,即使此后IR仍保持高电平,也不会产生新的请求。
·电平触发方式。中断请求是在IR出现高电平时产生中断的,但在响应中断后必须及时清除高电平,以防引起再次误中断。
8259A中只有一个触发方式控制位。它对IR0~IR7进行控制,在同一片中,不可能使某些中断源采用电平触发方式,而另一些中断源采用边沿触发方式。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。