ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

8259中断技术

2022-05-23 21:34:40  阅读:142  来源: 互联网

标签:优先级 中断向量 中断 8259 技术 MOV 处理


复习用,比较意识流,还不排版

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

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那复杂的过程就能直接响应,响应完直接结束,也不用复杂的结束流程。

标签:优先级,中断向量,中断,8259,技术,MOV,处理
来源: https://www.cnblogs.com/capterlliar/p/16303403.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有