2、单片8259A的中断过程 如果系统中只有一片8259,当产生中断请求时,在一个或多个IR端上会出现高电平。假设第i号上出现中断请求,IRi=1;且第j号中断正在服务,ISRj=1。如果第i号中断的屏蔽位IMRi为0,则IRi上的请求信号被送往优先级裁决器PR裁决,裁决器将i与j的中断优先级相比较,若中断i的优先级高于中断j,则i被准许申请,8259A的控制逻辑置INT有效,CPU的INTR随之有效。反之,如果IMRi为1或i号中断本身正在服务(ISRi=1),或i的优先级低于j,则IRi被禁止。 8259A的INT信号有效以后,如果CPU的中断允许触发器IF=1,CPU执行完当前指令以后进入中断应答周期。第一个中断应答周期,CPU发出的INTA#信号将8259 i号中断的正在服务寄存器相应位ISRi置为1,同时清除中断请求寄存器相应位IRRi,第一个中断应答周期不驱动数据总线。接着,CPU进入第二个中断应答周期,再次使INTA#信号有效,INTA#信号相当于读信号,通知8259A将1字节的中断类型码送到数据总线。CPU读入类型码,再根据类型码从中断向量表中读取中断入口地址,转去执行i的中断服务程序。 一旦ISRi位置为1,将屏蔽i和优先级低于i的中断请求,因此在i的中断服务程序结束之前,必须向8259A发送结束中断操作的EOI命令,EOI命令将会使ISRi清零。8259A有两种结束中断操作的方式:自动结束中断AEOI模式和非AEOI模式。如果程序设定8259A工作在AEOI模式,在第二个INTA#周期结束时自动使ISRi清零。如果设定在非AEOI模式,必须由中断子程序在结束之前发送EOI命令,清零ISRi。 |