(1)将加到引脚IR0~IR7上的中断请求寄存到中断请求寄存器中。
(2)在中断屏蔽寄存器的管理下,没有被屏蔽的中断请求被送到优先权电路判优。 (3)选中当前级别最高的中断源,然后从引脚INT向CPU发出中断请求信号。 (4)CPU满足一定的条件后,向8259A发出两个中断响应信号(负脉冲):
1)8259A从引脚INTA收到第1个中断响应信号之后,立即使中断服务寄存器中与被选中的中断源对应的那一位置1,同时把中断请求寄存器中的相应位清0。
2)从引脚INTA收到第2个中断响应信号之后,8259A把选中的中断源类型码n通过数据线送往CPU。
(5)在实模式下,CPU从4×n~4×n+3单元取出该中断源的中断向量→IP,CS,从而引导CPU执行该中断源的中断服务程序。 3. 8259A编程 (1)初始化编程
提供了4个(ICW1~ICW4)初始化命令字,写入命令寄存器组后,就建立了8259A的基本工作方式。系统8259A的初始化编程在微机启动时,由BIOS自动完成。用户不需再对其初始化,更改它的初始化设置。
BIOS对系统8259A初始化为: ? ? ? ?
中断触发方式采用边沿触发。
中断屏蔽方式采用常规屏蔽方式。
中断优先级的管理采用完全嵌套即固定优先级方式。IR0的请求级别最高,IR7的请求级别最低。
中断结束,采用常规结束方式。
(2)操作方式编程
将操作命令字OCW1~OCW3写入操作命令寄存器组,对中断处理过程实现动态控制。OCW1~ OCW3各命令格式如图11-2所示。 ? OCW1——写中断屏蔽字(对奇地址操作) ? ?
? 某位Mi为1,表示对应的中断源IRQi被屏蔽;Mi为0,IRQi被开放。 OCW2——写中断方式命令字(对偶地址操作)
? 设置优先级是否进行循环,循环的方式及中断结束的方式。 OCW3——(对偶地址操作)
? 用来设置特殊屏蔽方式、查询方式 ?
用来读8259A的中断请求寄存器IRR,中断服务寄存器ISR、中断屏蔽寄存器IMR的当前状态。
21
4. PC机系统中8259A的应用
11-2
现代PC机系统中包含了两片8259A中断控制器,经级连可以管理15级硬件中断,但其中部分中断源已经被系统硬件占用,具体使用情况如表11-1所示。中断向量表的占用情况见表10-1。
两片8259A的端口地址为:主片在020H~03FH,实际使用020H和021H两个端口;从片在0A0H~0BFH范围,实际使用0A0H和0A1H两个端口。
11-
5. 8259A的应用编程流程,如图11-3所示。
开发用户中断时,做到以下几点:
(1)硬件方面:将外扩中断源的中断请求(由低电平到高电平的跃变)接入选定的中断源IRQi上。
(2)软件方面:
? 置换相应的中断向量,即把用户中断子程序的入口地址写入4×n~4×n+3单元。 ? ? ?
分别向主从8259A写入屏蔽字,使主片IMR的D2位置0;使从片IMR的Di位置0,开放用户中断。(即填写OCW1)
每一次中断服务结束,即执行IRET之前,向从片、主片8259A送中断结束命令。(即填写OCW2)
返回DOS之前,写中断屏蔽字OCW1,使主片IMR的D2位置1;使从片IMR的Di位置1,屏蔽用户中断。恢复系统中断屏蔽字、恢复系统中断向量。
22
三.程序清单及相关注解
;按键8次,计算键盘中断次数 DATA SEGMENT CSBAK DW ? IPBAK MKBAK
DW ? DB ?
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START PROC FAR
MOV AX,DATA
MOV DS,AX IN AL,21H MOV CLI AND OUT MOV MOV MOV
;保留8259初始屏蔽字的状态 ;关中断 ;打开键盘屏蔽
;修改键盘中断的中断矢量
MKBAK,AL 21h,AL AX,0
AL,11111101B
ES,AX
DI,24H ;IRQ1,09H,24H=09H*4 AX,ES:[DI] IPBAK,AX ;写入IP AX,OFFSET MYINT
23
MOV MOV MOV
CLD STOSW MOV MOV MOV STOSW XOR
A1: STI CMP
JZ JMP
A2: PUSH
CLI MOV MOV MOV
AX,ES:[DI] CSBAK,AX AX,SEG MYINT DX,DX
;写入CS
;清计数器
;开中断
DX,10H ;是否按了8次键
;是,结束程序运行
;否则继续等待键盘中断 ;保存计数值 ;关中断
;恢复系统中断矢量
A1 DX AX,0
A2
ES,AX
DI,24H;IRQ1,09H AX,IPBAK
MOV CLD STOSW MOV STOSW
AX,CSBAK
;恢复系统8259屏蔽字
;开中断
;显示计数值
MOV AL,MKBAK OUT 21h,AL STI POP DX CALL MOV
INT RET
START ENDP
21H
SHWORD AX,4C00H
MYINT PROC FAR STI
;开中断
;自定义键盘中断处理程序
INC DX IN AL,60H IN AL,61H MOV AH,AL OR AL,80H OUT 61H,AL CLI MOV AL,61H OUT 20H,AL
;计数加一 ;读入扫描码(用户可对此键值进行处理)
;读入控制字节
;复位键盘 ;关中断
;中断结束命令送中断控制器
IRET ;中断返回
MYINT ENDP SHWORDPROC NEAR ;2→16进制显示
24