第9章 中断控制接口8259A-2

合集下载

8259a中断控制器——利用IRQ2显示中断过程

8259a中断控制器——利用IRQ2显示中断过程

8259a中断控制器:利用8259A的IRQ2显示中断过程目录8259a中断控制器:利用8259A的IRQ2显示中断过程 (1)设计题目: (1)要求: (1)设计思路: (1)实验代码: (2)实验心得体会: (10)设计题目:利用8259A IRQ2显示中断过程要求:1.主是在7段数码管上循环显示‘8’从右到左显示2.中断服务中在7段数码管上依次显示全1234567 89要去显示2秒左右时间可采用软件Software延迟(时间可通过调试大致2秒左右)总计中断9次结束返回DOS3.每次由手动产生IRQ2中断请求信号引起中断设计思路:软件Software方面有两个主要部分:主和中断服务子主首先要完成是些和处理工作例如查找设备设置TPC卡中9054芯片IO口,保存原来0AH号中断中断向量设置新中断向量设置中断掩码显示提示信息然后打开中断进入主循环在主循环中不断在LED上从右向左显示8直到被IRQ2中断信号打断此外在主中还对中断执行进行计数当计数满9次后自动跳出为了使主上8循环可以看出来故将显示8延迟设计比较长当完成9次中断主还要完成些后续处理工作:恢复中断掩码;恢复中断向量;设置TPC卡中9054芯片IO口,关闭中断返回DOS中断子完成在6位数码管上“同时”显示个数功能这个数为1—9中某个可以用循环次数作为参数这里同时显示实质上是利用视觉上暂停效果即只要每秒能在同个数码管上显示信息超过24次看起来就是同时了而这点在现在计算机速度条件下很容易实现为了不发生混乱在中断子执行过程中不允许再次中断另外中还有两个子:findtpc和dispword这些是为了完成查找设备等预处理硬件方面实验时把总线上IRQ2引脚和拨键开关相连以手动产生中断信号另外再把LED片选信号CS和210-217相连(注:LED显示是通过向LED数据端口送入数据再向LED位选端口送入位选信号来实现)实验代码:;386以上微机适用;纯dos下才能使用;tasm4.1或以上编译;**********************************************;;*利用8259AIRQ2 显示中断过程*;;**********************************************;io_plx_device_id equ 05406h ;TPC卡设备IDio_plx_vendor_idequ 010b5h ;TPC卡厂商IDIO_PLX_SUB_ID EQU 0905410B5H;TPC卡子设备及厂商IDportseg EQU 211H-200H ;数码管端口地址portbit EQU 210H-200Hdata segmentcsregdw?[Page]ipreg dw? ;旧中断向量保存空间irq_times dw10 ;中断计数msg1 db 0dh,0ah,\'TPC pci card Interrupt\',0dh,0ah,\'$\'msg2 db 0dh,0ah,\'Press any key to exit!\',0dh,0ah,\'$\'msg3 db 0dh,0ah,\'Press DMC or wait to errupt 10 times and exit!\',0dh,0ah,\'$\'io_9054base_address db 4 DUP(0) ;TPC卡PCI接口芯片I/O基地址暂存空间io_base_addressdb 4 DUP(0) ;TPC卡I/O基地址暂存空间errupt_line db 2 DUP(0) ;TPC卡中断号暂存空间pcicardnotfind db 0dh,0ah,\'TPC pci card not find or address/errupt error !!!\',0dh,0ah,\'$\' io9054baseaddress db 0dh,0ah,\'TPC pci card 9054 Chip I/O Base Address : \',\'$\' iobaseaddress db 0dh,0ah,\'TPC pci card I/O Base Address : \',\'$\'number db 0dh,0ah,\'TPC pci card Interrupt Line : \',\'$\'enter_ db 0dh,0ah,\'$\'MESS DB \'8253A TIMER0 IN MODE3! COUNT=0200H\',0AH,0DHDB \'8253A TIMER1 IN MODE2! COUNT=0aH\',0AH,0DH,\'$\'irq_vect db 08h,09h,0ah,0bh,0ch,0dh,0eh,0fh,70h,71h,72h,73h,74h,75h,76h,77h;新中断向量,中断0-7向量为:08h-0fh,中断8-15向量为:70h-77hirq_mask_0_7_table db 011111110b,011111101b,011111011b,011110111bdb 011101111b,011011111b,010111111b,001111111bdb 011111011b,011111011b,011111011b,011111011b[Page] db 011111011b,011111011b,011111011b,011111011b;新中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零irq_mask_8_15_table db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh db 011111110b,011111101b,011111011b,011110111bdb 011101111b,011011111b,010111111b,001111111b;新中断掩码,中断0-7时全,中断8-15时从低至高相应位为零LED DB 06,5BH,4FH,66H,6DH,7DH,07,7FH,6FHdata endsstacks segmentdb 100 dup (?)stacks endscode segmentassume cs:code,ds:data,ss:stacks,es:datastart:;Enable Local Interrupt Input.386climov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axcall findtpc ;查找TPC卡资源并显示movdx,word ptr io_9054base_addressadd dx,68h;设置tpc 卡中9054芯片io口,使能中断in ax,dxor ax,0900hout dx,axmov bx,word ptr errupt_line ;保存原中断向量mov al, ptr [irq_vect+bx]mov ah,35h21hmov ax,esmov csreg,ax[Page] mov ipreg,bxmov bx,word ptr errupt_line ;设置新中断向量mov al, ptr [irq_vect+bx]mov cx,csmov ds,cxmov dx,off _procmov ah,25h21hmov ax,datamov ds,axmov es,axin al, 21h ;设置中断掩码mov bx,word ptr errupt_linemov ah, ptr [irq_mask_0_7_table+bx]and al,ahout 21h, alin al, 0a1hmov bx,word ptr errupt_linemov ah, ptr [irq_mask_8_15_table+bx]and al,ahout 0a1h, almov dx,off msg2mov ah,09h21hmov dx,off msg3mov ah,09h21hmov irq_times,0sti ;开中断loop1:cmp irq_times,9 ;等待中断并判断中断9次后退出jz exitmov ax,datamov ds,ax[Page] mov al,7FHmovdx,word ptr io_base_addressadd dx,portsegout dx,almov al,blmovdx,word ptr io_base_addressadd dx,portbitout dx,alpushcxmov cx,0FFFFhskip3:push cxmov cx,03FFHskip4:loop skip4pop cxloop skip3pop cxshl bl,1cmp bl,40hjne skip5mov bl,01hskip5:jmp loop1exit:climov bx,word ptr errupt_line ;恢复中断掩码mov ah, ptr [irq_mask_0_7_table+bx]not ahin al, 21hor al, ahout 21h, almov bx,word ptr errupt_linemov ah, ptr [irq_mask_8_15_table+bx]not ahin al, 0a1hor al, ah[Page] out 0a1h, almov bx,word ptr errupt_line ;恢复原中断向量mov al, ptr [irq_vect+bx]mov dx,ipregmov cx,csregmov ds,cxmov ah,25h21hmov ax,data ;设置tpc 卡中9054芯片io口,关闭中断mov ds,axmov dx,word ptr io_9054base_address add dx,68hin ax,dxand ax,0f7ffhout dx,axmov ax,4c00h21h ;退出_proc proc farclipush axpush dxpush dsmov bl,01hmov ax,datamov ds,axmovsi,irq_timesmov cx,05FFHagain:mov al,LED[si]movdx,word ptr io_base_addressadd dx,portsegout dx,almov al,blmovdx,word ptr io_base_addressadd dx,portbit[Page] out dx,alshl bl,1cmp bl,40hjne skip6mov bl,01hskip6:push cxmov cx,0FFFFHagain2:pushcxmov cx,10again4:loopagain4pop cxloop again2pop cxloop againmov al,20h ;Send EOIout 0a0h,alout 20h,alinc irq_timespop dspop dxpop axstiiret_proc endpfindtpc proc near ;查找TPC卡资源并显示pushadpushfdmov ax,0b101h1ahjc findtpc_notfind ;检查PCI BIOS是否存在mov ax,0b102hmov cx,io_plx_device_idmov dx,io_plx_vendor_idmov si,01ahjc findtpc_notfind ;检查tpc卡是否安装,设备号、厂商号[Page]mov ax,0b10ahmov di,02ch1ahjc findtpc_notfindcmp ecx,io_plx_sub_idjnz findtpc_notfind ;检查tpc卡是否安装,子设备号、厂商号mov ax,0b10ahmov di,14h1ahjc findtpc_notfind ;读TPC卡9054芯片I/O基址信息mov dword ptr io_9054base_address,ecxand ecx,1jz findtpc_notfind ;检查是否为i/o基址信息mov ecx,dword ptr io_9054base_addressand ecx,0fffffffehmov dword ptr io_9054base_address,ecx;去除i/o指示位并保存MOV AX,0B10AHMOV DI,18HINT 1AHJCfindtpc_notfind ;读TPC卡I/O基址信息mov dword ptr io_base_address,ecxand ecx,1jz findtpc_notfind ;检查是否为i/o基址信息mov ecx,dword ptr io_base_address[Page] and ecx,0fffffffehmov dword ptr io_base_address,ecx ;去除i/o指示位并保存mov ax,0b10ahmov di,3ch1ahjc findtpc_notfind ;读TPC卡中断信息and cx,0ffhmov word ptr errupt_line,cx ;去除errupt其它指示位并保存mov dx,off io9054baseaddress ;显示i/o提示信息mov ah,09h21hmov ax,word ptr io_9054base_addresscall dispword ;显示i/o基地址mov dx,off iobaseaddress ;显示i/o提示信息mov ah,09h21hmov ax,word ptr io_base_addresscall dispword ;显示i/o基地址mov dx,off number ;显示errupt提示信息mov ah,09h21h[Page] mov ax,word ptr errupt_linecall dispword ;显示中断号mov dx,off enter_ ;加回车符,换行符21hpopfdpopadretfindtpc_notfind:mov dx,off pcicardnotfind ;显示未找到tpc卡提示信息mov ah,09h21hmov ax,4c00h21h ;退出findtpc endpdispword proc near ;显示子push dxpush cxpush bxmov cx,4mov bx,16dispword_loop1:push axpush cxsub bx,4mov cx,bxshr ax,cland al,0fh ;首先取低4位[Page] mov dl,alcmp dl,9 ;判断是否<=9jle dispword_num ;若是则为\'0\'-\'9\',ASCII码加30H add dl,7 ;否则为\'A\'-\'F\',ASCII码加37Hdispword_num:add dl,30hmov ah,02h ;显示21hpop cxpop axloop dispword_loop1pop bxpop cxpop dxret ;子返回dispword endpend start实验心得体会:本实验难点在LED显示上由于在此的前我直认为LED显示是由8255A驱动所以开始做这个时我首先想到是利用8255A但是结合实验箱上LED我才发现这样思路方法行区别于是再回头认真学习了下LED显示原理才发现LED显示其实很简单只要往数据端口送数据再往位选端口送入位选代码就可以了这下流程变得豁然开朗另外在设计时候我和其他同学讨论了手动中断信号种种产生方式最终发现用开关直接和总线插槽上IRQ2直接相连时最简单思路方法!本实验些预处理操作和有关TPC实验板化、后处理都是结合平时实验在此基础上修改完成经过小组成员致努力我们圆满完成了这次实验任务!经过此次实验我体验了从实战到学习再到实战过程乐趣。

第九章 中断控制器及DMA控制器

第九章  中断控制器及DMA控制器
当处理一级中断时,如果有同级的中断请求,也会给予响应。 否则:当从片有中断请求,若主片是普通全嵌套方式,则会屏蔽 从片上它优先级高的中断请求。 因为从片上的8个IRi变成了主片的同一级。 而特殊全嵌套方式,对来自同一从片的较高优先级请求不会屏蔽。
四、中断优先级管理方式 1.固定优先级方式 (1)IR0∽IR7的优先级固定,IR0为最高级, IR1次之,IR7为最低级。 (2)CPU响应某一级中断时,8259A将ISR中与该 中断源对应的位置1,并自动禁止同级和较低 级的中断请求。 2.优先级循环方式 IR0∽IR7的中断级别不是固定的。当任一中断 服务程序结束后,该中断源就自动降为最低级, 而原先比它低一级的中断源自动升为最高级
去CPU
IR3
INT IR4
IR5
INT IR4
IR5
IR6 IR7
IR6
IR7
E.
D. 特殊嵌套方式: IR4 的 中 断 被 服
务时,只封锁 IR5-IR7。
特殊嵌套方式: 因主片不封锁从片的 INT,故级别高的IR0IR2中断可以得到响应。 ( 但 IR3-IR7 仍 被 本 从 片封锁)
主片为特殊全嵌套方式:
10.在中断处理程序中应有一个开中断指令STI,使IF=1,
以准备接收新的中断。若开中断指令STI放在中断服务 程序的开始处,则可以实现中断嵌套。
11.中断处理程序完成后,执行IRET:
IP←(SP),SP←SP+2, CS←(SP),SP←SP+2, Flags←(SP),SP←SP+2
9.2.3 8259A中断管理方式
第九章 中断控制器及DMA控制器
中断的概念 可编程中断控制器Intel 8259A DMA控制器

可编程中断控制器8259A

可编程中断控制器8259A
IMR对应位为 0,允许中断申请进入优先级裁决器, 对应位为 ,允许中断申请进入优先级裁决器, 屏蔽。 为 1,不允许进入,中断申请被 ,不允许进入,中断申请被IMR屏蔽。 屏蔽
③ 当前中断服务寄存器 ISR 记录 记录CPU正在响应的中断。 正在响应的中断。 正在响应的中断
ISR中的某位为 ,表示 中的某位为1,表示CPU正在响应此级中断, 正在响应此级中断, 中的某位为 正在响应此级中断 ISR中的某位为 0,表示 没有或已响应完此级中断, 中的某位为 ,表示CPU没有或已响应完此级中断, 没有或已响应完此级中断
0 0
OCW2 优先级、 OCW2 优先级、发EOI OCW3 OCW3 特殊屏蔽设置
8
方式控制
③ 当前中断服务寄存器 ISR 记录CPU正在响应的中断。 记录CPU正在响应的中断。 CPU正在响应的中断
ISR中的某位为 表示CPU正在响应此级中断 CPU正在响应此级中断, ISR中的某位为1,表示CPU正在响应此级中断, 中的某位 即正在执行此中断源的中 断子程; 断子程; 表示CPU没有或已响应完此级中断 CPU没有或已响应完此级中断, ISR中的某位 中的某位为 ISR中的某位为 0,表示CPU没有或已响应完此级中断, 即不在执行此中断源的中 1 IR0 IR0 ISR 0 IRR 数 据 线 断子程 IR1 IR1 当前 0 中断 0 D0 IR2 IR2 ~ 申请 0 中断 1 0 0 IR3 IR3 D7 寄存器 0 服务 0 PR A0 IR4 IR4 0 寄存器 0 IR5 IR5 优先级 0 0 IR6 IR6 片 裁决器 1 0 IR7 IR7 选 CS 译 1 0 0 1 0 1 0 0 ICW1 ICW1 芯片控制 码 RD OCW1 OCW1 中断屏蔽寄存器 IMR ICW2 ICW2 中断类型号 WR 0 0 ICW3 ICW3 主从片关系 OCW2 优先级、 OCW2 优先级、发EOI INTA ICW4 ICW4 方式控制 OCW3 OCW3 特殊屏蔽设置 INT

微机原理与应用第九章

微机原理与应用第九章

;定义ICW2 ;定义ICW3 ;定义ICW4 ;定义OCW1
IR3上接有从 8259A
采用特殊完全嵌套方式、非 自动EOI结束方式、非缓冲方式
;定义OCW2
中断屏蔽字11010110
从8259A的初始化程序段
ICW1标志
MOV MOV OUT MOV MOV OUT MOV OUT MOV OUT MOV OUT MOV MOV OUT
中断请求的优先级别以循环方式类推。
例:假设当前正在处理IR2和IR6引入的中断请求,
中断源 ISR 内容 优先级 ISR 内容 优先级 ISR 内容 优先级 IR7 ISR7 0 7 0 4 0 0 IR6 ISR6 1 6 1 3 0 7 R5 ISR5 0 5 0 2 0 6 IR4 ISR4 0 4 0 1 0 5 IR3 ISR3 0 3 0 0 0 4 IR2 ISR2 1 2 0 7 0 3 IR1 ISR1 0 1 0 6 0 2 IR0 ISR0 0 0 0 5 0 1
ICW2
由当前的中断请求 IR7—IR0确定
ICW2的标志
A0 D7 D6 D5 D4 D3 D2 D1 D0 1 S7 S6 S5 S4 S3 S2 S1 S0
A0 1
D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 ID2ID1ID0
从8259A的识别地址
1:表示IR端接有从8259A 0:表示IR端未接从8259A
2 1 ADI SNGL IC4
0
1:需要设置ICW4
0:不需要设置ICW4
标 志 位
1:单级使用 0:级联使用 1:调用地址间隔为4 0:调用地址间隔为8
ICW1的标志
1:电平触发 0:边缘触发

第9章 中断控制接口8259A

第9章 中断控制接口8259A
中断处理子程序在位置上也必须是固定装配的,而不是浮动的。 中断处理子程序在位置上也必须是固定装配的,而不是浮动的。 装配的起始地址由中断向量表给出。 中断向量表给出 装配的起始地址由中断向量表给出。
9.1 中断控制器8259A
Intel 8259A是可编程中断控制器 是可编程中断控制器PIC 是可编程中断控制器 可用于管理Intel 8080/8085、8086/8088、 可用于管理 、 、 80286/80386的可屏蔽中断 的可屏蔽中断 如何实现? 如何实现? 8259A的基本功能 的基本功能
第一个周期 T1 T2 T3 T4 CLK ALE LOCK INTA D0~D7 SP/EN CAS0~CAS2 IR0~IR7 INT 第一个前保持为高电平 第二个周期 T1 T2 T3 T4
动画
CPU响应周期 响应周期
8259A工作波形 工作波形
三、 8259A的工作方式 P228
普通全嵌套方式 优先权固定方式 特殊全嵌套方式 设置优先权方式 自动循环方式 优先权循环方式 特殊循环方式 自动中断结束方式 结束中断处理方式 普通中断结束方式 非自动中断结束方式 特殊中断结束方式 普通屏蔽方式 屏蔽中断源方式 特殊屏蔽方式 边沿触发方式 中断触发方式 电平触发方式 缓冲方式 数据线连接方式 非缓冲方式
只有两个地址, 只有两个地址, 如何区分? 如何区分?
写入ICW1、OC1 写入 ~ 和 读出IRR、ISR和查询字 读出 、 和查询字 读出IMR 读出 数据总线高阻状态 数据总线高阻状态
3. 中断级联 P232
示例
动画
一个系统中, 可以级联, 一个系统中,8259A可以级联,有一个主 可以级联 有一个主8259A, , 若干个(最多8个 若干个(最多 个)从8259A 级联时, 级联时 , 主 8259A的 三条级连线 的 三条级连线CAS0~ CAS2作 ~ 作 为输出线,连至每个从8259A的CAS0~ 为输出线,连至每个从8259A的CAS0~CAS2 每个从 的中断请求信号INT,连至主 每个从8259A的中断请求信号 的中断请求信号 ,连至主8259A 的一个中断请求输入端IR 的一个中断请求输入端 线连至CPU的中断请求输入端 主8259A的INT线连至 的 线连至 的中断请求输入端 SP*/EN*在非缓冲方式下 , 规定该 在非缓冲方式下, 在非缓冲方式下 规定该8259A是主片 是主片 (SP*=1)还是从片(SP*=0) = )还是从片( = )

微机接口技术8259A中断控制器

微机接口技术8259A中断控制器

计算机学院系统结构教研室
yangruioot@23

中断类型号与对应的中断向量在中断向量表中 存放位置的关系: 在中断向量表中,各中断向量按中断类型码从 0到255顺序存放。所以每个中断向量在中断向 量表中的地址可由中断类型码乘以4计算出来。 所以,知道了中断类型码,很快就可算出相应 中断向量的存放位置,从而取出中断向量。

idiv bl
;除数BL=0,产生除法错中断
mov ax,200h mov bl,1 div bl ;商=200H,不能用AL表达 ;产生除法错中断
计算机学院系统结构教研室 yangruioot@11
专用中断:溢出中断——类型4 在若上一条指令执行的结果使溢出标志位OF置1, 则紧接着执行INTO指令时,将引起类型为4的内 部中断,CPU将转入溢出错误处理;若OF=0时, 则INTO指令执行空操作,即INTO指令不起作用。 INTO指令通常安排在算术运算指令之后,以便 在发生溢出时能及时处理。
计算机学院系统结构教研室
yangruioot@20
8086/8088系统定义了0~255共256种中断,其 中:


0~4为专用中断,系统给出固定定义和处理功 能 5~31共27个系统作为保留,用户不能自行定义 32~255则为用户定义中断,原则上供用户定义 使用,但有些已被系统作为固定功能,如21H, 在使用中需注意
计算机学院系统结构教研室
yangruioot@12
主程序
中断服务程序 OVERFLOW: PUSH AX
. . . . MOV AX,2000h; OF=1 .
PUSH BX PUSH CX PUSH DX 溢出处理 (包括输出某些提示信息)
. . .

第9章 中断控制接口8259A-2

第9章 中断控制接口8259A-2

边沿触发方式

8259A将中断请求输入端出现的 上升沿作为中断请求信号 中断请求端出现的高电平是有 效的中断请求信号

电平触发方式

5. 数据线连接方式

缓冲方式

8259A的数据线需加缓冲器予以驱动 8259A把SP*/EN*引脚作为输出端,输出允 许信号,用以锁存或开启缓冲器

非缓冲方式
1. 设置优先权方式

普通全嵌套方式



8259A的中断优先权顺序固定不变,从高到低依次为 IR0、IR1、IR2、……IR7 中断请求后,8259A对当前请求中断中优先权最高的 中断IRi予以响应,将其向量号送上数据总线,对应 ISR的Di位置位,至到中断结束(ISR的Di位复位) 在ISR的Di位置位期间,禁止再发生同级和低级优先权 的中断,但允许高级优先权中断的嵌套
主8259A的端口地址为FFE8H和FFE9H 从8259A的端口地址为FFFAH和FFFBH

AL, 11H ;定义ICW1,级联使用方式,边沿触发 DX, 0FFE8H DX, AL AL, 40H ;定义ICW2,中断类型码为40H~47H DX, 0FFE9H DX, AL AL, 08H ;定义ICW3,IR3接从片 DX, AL; AL, 11H ;定义ICW4,特殊完全嵌套,非自动EOI结束, DX, ALH 非缓冲,由SP=1确定为主8259A AL, 0D6H ;定义OCW1,屏蔽掉IR0、IR3和IR5以外的中断源; DX, AL AL, 20H ;定义OCW2,普通EOI结束方式 DX, 0FFE8H DX, AL
3. 中断级联 P232

示例
动画


计算机原理与汇编语言第9章 中断

计算机原理与汇编语言第9章 中断

第七章 中断—中断控制器 Intel 8259断方式


第五节
8088的中断方式






一、8088的中断方式 (一)外部中断 1、可屏蔽中断 2、非屏蔽中断 (二)内部中断 8088可以由几种产生内部中断的情况 1、DIV或IDIV指令 类型 0 2、INT n 类型 n 3、INTO 类型 4 4、单步执行 类型 1 (三)中断向量表 (四)8088中的中断响应和处理过程


第七章 中断—最简单的中断情况



(二)CPU对中断的影响 当满足上述条件后,CPU就响应中断,转入中断周期,CPU作以下几件 事情: 1、关中断。 2、保留断点。 3、保护现场 (由中断服务 子程序的指令PUSH完成)。 4、给出中断入口,转入响应 的中断服务子程序。 在中断服务程序完成后,还要 做下述5、6两步 5、恢复现场(由中断服务子 程序的指令POP完成)。 6、开中断与返回(由中断服 务子程序的指令IRET完成)。 (中断响应、服务及返回流程图)

第七章 中断—IBM PC/XT的中断结构

(二)IBM PC/XT中系统保留的中断(BIOS)
8 2 5 9 A 8 级 中 断
第七章 中断—IBM PC/XT的中断结构

(DOS)
第七章 中断—IBM PC/XT的中断结构

(三)中断控制逻辑
第七章结束
谢谢各位!
请多提宝贵意见!
一、引言 (一)为什么要用中断 当CPU与外设交换信息时,若用查询的方式,则CPU就要让费很多时间 去等待外设。这样就存在一个快速的CPU与慢速的外设之间的矛盾,这也 是计算机在发展过程中遇到的严重问题之一。为了解决这个问题,一方 面要提高外设的工作速度;另一方面发展了中断的概念。实现了中断, 就有以下有点: 1、同步操作 有了中断功能,就可以使CPU和外设同时工作。 2、实现实时处理 当计算机用于实时控制时,中断是一个十分重要的功能。 3、故障处理 计算机在运行过程中,往往会出现事先预料不到的情况,或出现一些 故障;如:电源突跳,存储出错,运算溢出等等。计算机就可以利用中 断系统自行处理,不必停机或报告工作人员。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

9.1 中断控制器8259A


Intel 8259A是可编程中断控制器PIC 可用于管理Intel 8080/8085、8086/8088、 80286/80386的可屏蔽中断 如何实现? 8259A的基本功能



一片8259A可以管理8级中断,可扩展至64级 每一级中断都可单独被屏蔽或允许 在中断响应周期,可提供相应的中断向量号 8259A设计有多种工作方式,可通过编程选择
1. 初始化命令字ICW

流程
初始化命令字ICW最多有4个 8259A在开始工作前必须写入 必须按照ICW1~ICW4顺序写入 ICW1和ICW2是必须送的 ICW3和ICW4由工作方式决定 D7 D6 D5 D4 D3 D2 D1 D0
ICW1
0 0 0 1 0 0 X X
ICW2 设置中断向量号
1. 中断控制

中断请求寄存器IRR

保存8条外界中断请求信号IR0~IR7的请求状态 Di位为1表示IRi引脚有中断请求;为0表示无请求 保存正在被8259A服务着的中断状态 Di位为1表示IRi中断正在服务中;为0表示没有被服务 保存对中断请求信号IR的屏蔽状态 Di位为1表示IRi中断被屏蔽(禁止);为0表示允许
⑴ 利用读写信号区别写入的控制寄存器和 读出的状态寄存器 ⑵ 利用地址信号区别不同I/O地址的寄存器 ⑶ 由控制字中的标志位说明是哪个寄存器 ⑷由芯片内顺序控制逻辑按一定顺序识别不 同的寄存器 ⑸ 由前面的控制字决定后续操作的寄存器
接口电路中常用的方法
只有两个地址, 如何区分?
A0 RD* WR* CS* 0 1 0 1 × × 1 1 0 0 1 × 0 0 1 1 1 × 0 0 0 0 0 1
OCW1 屏蔽命令字
OCW2
0 0
1
0 0 0 0
0
20H
OCW3
小节:8259A的工作方式 P228
普通全嵌套方式 ICW1 优先权固定方式 特殊全嵌套方式 设置优先权方式 自动循环方式 优先权循环方式 OCW2 特殊循环方式 自动中断结束方式 ICW4 结束中断处理方式 普通中断结束方式 非自动中断结束方式 特殊中断结束方式 普通屏蔽方式 OCW2 OCW3 屏蔽中断源方式 特殊屏蔽方式 边沿触发方式 ICW1 中断触发方式 电平触发方式 缓冲方式 ICW4 数据线连接方式 非缓冲方式

特殊全嵌套方式 优先权自动循环方式 优先权特殊循环方式
2. 结束中断处理方式
什么是8259A的中断结束? 8259A利用中断服务寄存器ISR判断: 某位为1,表示正在进行中断服务; 该位为0,就是该中断结束服务。 这里说明如何使 ISR某位为0,不反映 CPU的工作状态。
结束中断处理方式(续)

自动中断结束方式 普通中断结束方式


配合全嵌套优先权方式使用 当CPU用输出指令往8259A发出普通中断结束 EOI命令时,8259A就会把所有正在服务的中 断中优先权最高的ISR位复位 配合循环优先权方式使用 CPU在程序中向8259A发送一条特殊中断结束 命令,这个命令中指出了要清除哪个ISR位
3. 读取状态字
CPU可读出IRR、ISR、IMR和查询字 A0为低: 由OCW3中RR和RIS位设定读取IRR或 ISR, 由OCW3中P位设定读取查询字(反映 8259A是否有中断请求) A0为高电平时读取的都是IMR D7 D6 D5 D4 D3 D2 D1 D0
查询字
4. 命令字和状态字的区别方法
功能 写入ICW1、OCW2和OCW3 写入ICW2~ICW4和OCW1 读出IRR、ISR和查询字 读出IMR 数据总线高阻状态 数据总线高阻状态
四、应用举例 1、8259A在IBM PC机上的应用
日时钟 键盘 保留 串口2 串口1 0
INTR
1 8259 2 中 3 4 断 控 制 器
SP D7~D0
ICW3 级联命令字
ICW4
0 0 0 X 0 0 0 1
改为0
写ICW1
A0=0,D4=1
8259A芯片的初始化 流程P237
写ICW2
是 SNGL=1 否 写ICW3
A0=1
A0=1
按顺序对A0=1端 口写入命令字

IC4=1 是
写ICW4
A0=1
例:P239
当8086系统中8259A单级使用,其端口地址为80H和81H MOV OUT MOV OUT MOV OUT AL,13H 80H,AL; AL,18H 81H,AL; AL,01H 81H,AL; 定义ICW1
主8259A的端口地址为FFE8H和FFE9H 从8259A的端口地址为FFFAH和FFFBH

AL, 11H ;定义ICW1,级联使用方式,边沿触发 DX, 0FFE8H DX, AL AL, 40H ;定义ICW2,中断类型码为40H~47H DX, 0FFE9H DX, AL AL, 08H ;定义ICW3,IR3接从片 DX, AL; AL, 11H ;定义ICW4,特殊完全嵌套,非自动EOI结束, DX, ALH 非缓冲,由SP=1确定为主8259A AL, 0D6H ;定义OCW1,屏蔽掉IR0、IR3和IR5以外的中断源; DX, AL AL, 20H ;定义OCW2,普通EOI结束方式 DX, 0FFE8H DX, AL
二、8259A的中断过程 P233
第一个周期 T1 T2 T3 T4 CLK ALE LOCK INTA 第二个周期 T1 T2 T3 T4
动画
CPU响应周期
D0~D7
SP/EN CAS0~CAS2 IR0~IR7 INT 第一个前保持为高电平 8259A工作波形
三、 8259A的工作方式 P228

中断服务寄存器ISR


中断屏蔽寄存器IMR

2. 与处理器接口
A0 RD* WR* CS* 0 1 0 1 × × 1 1 0 0 1 × 0 0 1 1 1 × 0 0 0 0 0 1 功能
只有两个地址, 如何区分?
写入ICW1、OCW2和OCW3 写入ICW2~ICW4和OCW1 读出IRR、ISR和查询字 读出IMR 数据总线高阻状态 数据总线高阻状态
普通全嵌套方式 优先权固定方式 特殊全嵌套方式 设置优先权方式 自动循环方式 优先权循环方式 特殊循环方式 自动中断结束方式 结束中断处理方式 普通中断结束方式 非自动中断结束方式 特殊中断结束方式 普通屏蔽方式 屏蔽中断源方式 特殊屏蔽方式 边沿触发方式 中断触发方式 电平触发方式 缓冲方式 数据线连接方式 非缓冲方式

特殊中断结束方式

3. 屏蔽中断源方式

普通屏蔽方式


将IMR的Di位置1,则对应的中断IRi被屏 蔽,该中断请求不能从8259A送到CPU 如果IMR的Di位置0,则允许IRi中断产生

特殊屏蔽方式

将IMR的Di位置1,对应的中断IRi被屏蔽 的同时,使ISR的Di位置0
4. 中断触发方式
主程序 初始化 IR3请求中断 开中断 IR3中断处理程序 IR2请求中断 IR2中断处理程序
开中断 开中断 … …
清除 IS3
关中断
中断结束命令

清除 IS2
关中断 中断结束命令 开中断 中断返回
中断全嵌套方式 的流程
开中断 中断返回
3、级联使用初始化程序举例
主8259A的IR0和IR5端上分别引入两个中断 请求,从8259A的IR2和IR3端上也分别引入 两个中断请求
器Hale Waihona Puke 14 硬盘 15 保留并口1 7
INTA INTA INTR
PC/AT机中的中断控制逻辑
2、中断全嵌套的流程
注意的几个问题: 系统进入中断会自动使IF=0,在中断子 程序中可人为的加入STI(开中断)指令, 使系统能够相应更高级的中断,形成中断 嵌套 每个中断处理子程序结束之前必须执行中 断结束命令EOI,清除对应的ISn位,并 执行中断返回指令(IRET)


SP*/EN*引脚为输入端 若8259A级连,由其确定是主片或从片
小节:8259A的工作方式 P228
普通全嵌套方式 优先权固定方式 特殊全嵌套方式 设置优先权方式 自动循环方式 优先权循环方式 特殊循环方式 自动中断结束方式 结束中断处理方式 普通中断结束方式 非自动中断结束方式 特殊中断结束方式 普通屏蔽方式 屏蔽中断源方式 特殊屏蔽方式 边沿触发方式 中断触发方式 电平触发方式 缓冲方式 数据线连接方式 非缓冲方式

边沿触发方式

8259A将中断请求输入端出现的 上升沿作为中断请求信号 中断请求端出现的高电平是有 效的中断请求信号

电平触发方式

5. 数据线连接方式

缓冲方式

8259A的数据线需加缓冲器予以驱动 8259A把SP*/EN*引脚作为输出端,输出允 许信号,用以锁存或开启缓冲器

非缓冲方式
定义ICW2,中断类型码
定义ICW4
由 ICW2 可 确 定 该 8259A 引 入 的 8 级 中 断 的 中 断 类 型 码 为 18H~1FH。
2. 操作命令字OCW


8259A工作期间,可以随时接受操作命 令字OCW OCW共有3个:OCW1~OCW3 写入时没有顺序要求,需要哪个OCW 就写入那个OCW D7 D6 D5 D4 D3 D2 D1 D0
回顾
1. 掌 握 8253 引 脚 , 尤 其 是 CLK 、 OUT 、 GATE引脚的功能 2. 掌握8253的六种工作方式、编程和应用
习题(第263页)——
9.16
相关文档
最新文档