8259中断技术

Posted on 2022-05-23 21:19  Capterlliar  阅读(832)  评论(0编辑  收藏  举报

复习用

教材是微型计算机接口技术及应用(第三版)  刘乐善主编    华中科技大学出版社

1.中断技术

CPU执行程序时由于内部或外部发出中断,调用写好的中断服务程序去处理这个中断,然后继续执行原来的程序。

2.主程序

8259初始化,也就是ICW1234,系统会自动填好,需要人填的是中断向量。中断向量填到中断向量表里,产生相应中断就会按这个表执行对应程序。

填写之前关中断,cli,填写的时候肯定不能处理中断;

填写中断向量表的方式是ax的高字节写查询or修改,低字节写中断向量号,也就是改哪个向量。35h表示查询,25h表示修改。填完int 21h一下。

比如我要改0b号代表的中断向量,那就mov ax,250bh     int 21h

接下来开始填具体内容。只有俩,碰到这个中断要执行的代码的段地址和偏移地址。段地址用seg+子程序名获得,放到ds里,偏移地址就是offset+子程序名,放到dx里,8259会自己拿。然后呢由于我们动了ds,所以要在修改这一段之前push ds,修改完再pop ds.

填完表还要限制一下是处理哪个口的中断,不能谁发中断都处理吧。这个操作就是OCW1,0表示开发,1表示屏蔽。比如要接受2口的中断,就拿和原来数据和11111101与操作一下,保证2口开了,其他不变。当然结束的时候还要复原,也就是or一下00000010。但这是主程序写完的事情了。

最后sti一下,打开中断。

今年网课,代码没跑过不知道能不能跑通就不放了,抄书吧。(网课玩不到实验箱,退钱!

CLI   ;修改中断向量时要关中断!

MOV    AH,    35H
MOV    AL,    N             
INT    21H
MOV    OLD_SEG,ES
MOV    OLD_OFF,BX

PUSH    DS            
    
MOV    DX,    SEG INTRnew   ;取新中断向量段基地址
MOV    DS,    DX
MOV    DX,    OFFSET INTnew ;取新中断向量偏移地址
MOV    AL,    N                   ;中断类型号为N
MOV    AH,    25H
INT    21H

POP    DS

IN    AL,21H                ;8259开中断
AND   AL,0FBH    ;1111 1011B  开发IR2
OUT   21H,AL

STI        

主程序就正常汇编程序,你想干啥干啥。所以接下来我们看中断服务程序怎么写。

3.中断服务程序(子程序)

首先是一般子程序的写法,把要用的寄存器push进来保护现场,最后pop出去。

接下来我们要处理中断,所以cli一下,暂时处理不了别的中断了。然后开始正常处理,不用管别的。处理完要告诉8259我处理完了,也就是OCW2,注意使用OCW2的前提是ICW4里写了手动结束(非自然结束)。重点有俩写法,一是常规结束20h,一是6xh,这里涉及到中断优先级,待会再讲,反正out这个东西就能结束。

mov al,20h
out 20h,al   ;主片
out 0a1h,al  ;从片

最后中断程序返回时iret。

好了,现在程序能跑了。

4.中断优先级

解决一下上面提到的中断优先级问题。既然说优先级,那先看看中断类型。

中断类型有软中断和硬中断两大类,硬中断是外部中断,软中断是内部中断,可以由int n产生,也可以是程序跑着跑着出问题了中断一下,比如溢出。中断有很多原因,每种中断都对应一个中断号。中断号左移两位,就是它在中断向量表里的地址。

有的中断要命,有的不要,天然有优先级。优先级有两种分法:

1.按优先级排队   PC微机中断优先级的顺序: 软件中断>不可屏蔽中断> 可屏蔽中断

2.循环轮流排队

在处理一个中断的时候如果来了优先级更高的中断,就中断优先级低的中断转而去处理优先级高的中断,形成一个美妙的套娃。套娃又有两种套法,一是完全嵌套方式:只能高优先级中断低优先级的中断;二是特殊完全嵌套方式:同级优先级的中断可以相互中断;

需要注意的是,不可屏蔽中断(NMI)也不可以被中断,形成中断嵌套,只有可屏蔽中断(INTR)可以形成。

接下来是分析优先级的过程。8259有8根线,IR0-IR7,一可以接受中断,二是采取完全中断嵌套排队的时候,IR0的优先级最高。所有要产生中断的设备先在中断请求寄存器(IRR)中备案,有中断来置1,处理完置0;中断服务寄存器(ISR)记录正在被相应的中断,并且给它们用复杂的电路排序,但它不会自己清零,所以需要OCW2给它手动清零。20h表示给优先级最高的清理,6xh则可以具体到给谁清。

5.中断的处理

最后看一眼8259是怎么处理中断的,还有这些芯片接口的大致作用。数电部分就不看了吧,毕竟看也看不懂。

用的系统叫可屏蔽中断系统,由两片8259组成;

1.首先是初始化,但系统已经初始化好了,具体内容在P76,要自己初始化看P70;

2.有中断提出申请,经过一些复杂的过程,进行握手,表示可以处理;

3.从cpu获取中断号后,处理标志位,存好端点,准备转移;

4.执行程序;

5.返回断点。

不可屏蔽中断不需要经过中断相应周期,也就是cpu那复杂的过程就能直接响应,响应完直接结束,也不用复杂的结束流程。

关于串行口: