微机原理与接口技术(三)
总述:本次课程主要讲解了8086架构的总线工作周期以及引脚工作方式,并讲解了基于此的中断工作方式和以及最小模式下的工作时序,完整解释了8086的工作情况。
一、8086总线的工作周期
时钟周期:芯片内部一个时钟脉冲时间,由计算机主频决定。
总线周期:CPU通过总线对存储器或外设I/O口进行一次访问用时。分四个部分T1,T2,T3,T4。
空闲周期:总线上无数据传输系统空闲的、在两个总线周期间隔的时间。
指令周期:一条指令从开始执行到执行结束用时。每次指令执行包括取指令,译码,执行等操作。
图1 总线周期示意图
二、8086中断系统
中断系统可以处理256种不同中断源,用中断识别号(中断类型码)0-255进行唯一标记。
中断向量: 即中断服务程序的入口地址,包括段地址(高字单元)和偏移地址(低字单元)。进入中断时通过此进入中断执行程序。每个中断处理程序有唯一中断向量。
图2 中断向量表
中断类型分为两大类:1.硬件中断 2.软件中断
- 1. 硬件中断(外部中断)
包括两条中断请求信号线:NMI(非屏蔽中断)、INTR(可屏蔽中断)。
可屏蔽中断:
1> INTR线上的中断请求信号引起。
2> 用CPU指令CLI屏蔽(使IF=0),STI允许(IF=1)。
3> 高电平触发,且持续保持至中断指令执行结束。
4> 可屏蔽中断源的中断类型码由8259A提供,且在08H—0FH、070H—077H中。
5> 8086中断系统设计中断控制器(8259A)管理各种外设提出的中断请求。 所有外设的中断请求信号都可送至8259A的中断请求输入端IRQ0~ IRQ7任何一个, 8259A选择其中优先级最高的中断请求,送至CPU的INTR引脚,向CPU申请可屏蔽中断。
可屏蔽中断的中断过程:
(1)CPU响应可屏蔽中断的条件
① 外设提出中断申请;
② 本中断未被中断控制器屏蔽;
③ 本中断优先级最高;
④ CPU允许中断;
(2)CPU响应可屏蔽中断的过程
CPU在每条指令的最后一个T周期,检测INTR,若为高电平,且
IF=1,则CPU响应中断。
响应过程中自动依次完成以下工作:
① CPU向外设发两个/INTA ,外设收到第2个/INTA 后,立即通过数
据线给CPU送中断类型号。
② CPU从数据线上读取中断类型号
③ 将Flags内容入栈
保护现行程序的控制标志及其运行结果产生的状态标志。
④ 关中断(清IF和TF)
为了防止在进入中断处理,但并未执行中断程序这段时间内又响应新的中断。
⑤ 保护断点
将当前指令的下一条指令的CS和IP入栈, 使中断处理完成后能正确的回
到原程序处继续执行。
⑥ 转入相应的中断服务子程序;
⑦ 中断返回
从堆栈中弹出断点的地址(IP和CS)和Flags的内容,返回主程序的断点
处,继续执行主程序。
不可屏蔽中断:
1> NMI线上中断请求信号引起。
2> 中断类型码为2。
3> 优先级高于INTR。
4> 上升沿触发。
5> 不受IF标志影响,CPU在当前指令执行完后,必须立即响应。
6> 由计算机内部硬件出错而引发,一般用于处理紧急事件。
- 2. 软件中断(内部中断)
由指令或由指令驱动状态驱动。
包括5种
1) 除法错中断。
中断类型号为0;除数为0,或所得的商超过了CPU中有关寄存器所能表示的最大值,则立即产生一个类型号为0的内部中断, CPU转去执行除法错中断处理程序。
2) 单步中断
中断类型号为1;
3) 断点中断
中断类型号为3;
4) 溢出中断
中断类型号为4;
5) 软件中断(INT n指令引起中断)
中断类型号由指令定义。
中断优先级:软件中断(除单步中断外) > 非屏蔽中断 > 可屏蔽中断 > 单步中断
对同时产生的中断:
首先处理优先级别较高的中断;若优先级别相同,则按先
来先服务的原则处理;
对非同时产生的中断:
允许低优先级别的中断处理程序被高优先级别的中断源所中断——中断嵌套。
不可屏蔽中断与软件中断执行过程:
图3 非屏蔽中断与软件中断执行示意图
三、8086系统总线结构
CPU设计的工作模式包括两类:最小模式和最大模式。
对外部引脚复用有两类:按时序复用、按模式复用。
8086 +5v供电,引脚共40个,分四部分:1、地址总线 2、数据总线 3、控制总线 4、其他(时钟与电源)。
图4 8086芯片引脚示意图
图5 引脚对应说明图
1. 地址、数据、状态总线
A19-A0: 20位地址总线。T1输出访问存储器或I/O的地址信息。
D15-D0: 16位数据总线。T2-T4输出与存储器和I/O设备交换数据信息。
S6-S3: T2-T4输出CPU的工作状态。1)S6为0用以指示8086当前与总线连通; 2)S5为1表明8086可以响应可屏蔽中断。 3)S4、 S3共有四个组合状态,用以指明当前使用的段寄存器;
S4 |
S3 |
当前正在使用的段寄存器 |
0 |
0 |
ES |
0 |
1 |
SS |
1 |
0 |
CS或未使用任何段寄存器 |
1 |
1 |
DS |
实际存在AD,AS复用以下介绍:
1)AD15~ AD0(2~16, 39)
1>地址/数据复用总线;
2>双向、 三态;
3>分时输出低16位地址信号及进行数据信号的输入/输出。
4> T1输出访问存储器或I/O的地址信息。
5>D15-D0: T2-T4输出与存储器和I/O设备交换数据信息。
2)A19/S6~ A16/S3 (35~38)
1>输出、三态;
2>分时输出地址的高4位及状态信息。
3>A19-A16: T1输出访问存储器的20位地址的高4位地址A19-A16。
4>S6-S3: T2-T4输出CPU的工作状态。
3)BHE/S7(34)
1>高8位数据总线有效/状态复用引脚;
2>三态输出;
3>表示高8位数据线D15~ D8上的数据有效和S7 状态信号;
4>T2-T4状态输出S7状态信号。 8086中无定义。
偶地址单元数据通过数据总线低8位传输。
奇地址单元数据通过数据总线高8位传输。
BHE |
A0 |
总线使用情况 |
0 |
0 |
从偶地址单元开始,在16位数据总线上进行字传送 |
0 |
1 |
从奇地址单元开始,在高8位数据总线上进行字节传送 |
1 |
0 |
从偶地址单元开始,在低8位数据总线上进行字节传送 |
1 |
1 |
无效 |
2. 控制总线
1)RD (32)
1>读信号;
2>三态输出;
3>低电平有效;
4>RD = 0, 表示CPU正在读存储器或I/O端口。
2)READY(22)
1> 准备就绪信号;
2> 输入;高电平有效。
3> READY=1,表示CPU访问的存储器或IO端口已准备好传送数据。若CPU在总线周期T3状态检测到READY=0,表示未准备好, CPU自动插入一个或多个等待状态TW,直到READY=1为止。
3) TEST (23)
1>测试信号, 输入。
2>当CPU执行WAIT指令时, CPU每隔5个T状态进行一次测试;
3>当测试到TEST =1,则CPU 重复执行WAIT指令,即CPU处于空闲等待状态,
4>直到测试到TEST =0时,等待状态结束, CPU继续执行后续指令。
4) RESET (21)
1>复位信号,输入,高电平有效。
2> RESET信号至少要保持4个时钟周期。
3>复位时: 标志寄存器、 IP、 DS、 SS、 ES为0, CS=FFFFH,复位后CPU从FFFF0H处开始执行。
5) INTR (18)
1>可屏蔽中断请求信号;
2>输入, 高电平有效。
3>INTR=1, 表示外设向CPU发出中断请求, CPU在当前指令周期的最后一个T状态去采样该信号, 若此时, IF=1, CPU响应中断, 执行中断服务
程序。
6) NMI (17)
1> 不可屏蔽中断请求信号,
2> 输入,上升沿触发。
3> 该请求信号不受IF状态的影响,也不能用软件屏蔽,一旦该信号有效,则执行完当前指令后立即响应中断。
7) MN/MX (33)
1>工作模式选择信号;
2>输入。
3> MN/MX=1,表示CPU工作在最小模式系统;
MN/MX=0,表示CPU工作在最大模式系统。
3. 其他信号
1) VCC(40) GND(1, 20)
1>电源、 接地引脚
2>输入;
3>8086采用单一的+5V电源;
4>但有两个接地引脚。
2) CLK(19)
1>时钟信号输入引脚。
2>要求时钟信号的占空比为33%;
3>即1/3周期为高电平, 2/3周期为低电平。
四、 最小模式架构
总线是计算机各部之间信息传递通路。
主设备:可以独自启动总线周期。
从设备:只能被动响应。
DMA:信息传递通道,传输数据时完全接管总线,CPU不访问总线。
最小模式特点:
1) MN/MX引脚接5v
2) 用1片8284作为时钟信号发生器。
3) 3片74LS373做地址锁存器。
4) 2片74LS245做总线收发器。
图6 最小模式结构图
具体芯片介绍:
- 1. 时钟发生器:
8284A的功能:
1>产生恒定的时钟信号, 对准备好信号和复位信号进行同步;
2>外界控制信号RDY和RES可以在任何时候到来, 8284A把它们同步在时钟下降沿时输出READY和RESET信号到CPU。
- 2. 地址锁存器:
1>当地址锁存允许信号ALE被送到373的选通端G上时, 373就锁存送到它的数据输入端的数据。
2>当把一个低电平有效的信号送给输出允许端OC(OE)时, 373就把锁存的数据从数据输出端输出。
- 3. 总线收发器:
1>作用:增大计算机带负载能力。
2>G: 控制驱动器A端和B端何时接通
3>DIR: 当DIR输入高电平时。 数据从A传到B;当DIR输入低电平时。 数据从B传到A。
最小模式引脚信号:
1) INTA (24)
1> 中断响应,输出;
2> 低电平有效;
3> 当CPU响应INTR时, INTA=0,表示响应中断。
2) ALE(25)
1>地址锁存允许信号,输出;
2>高电平有效;
3>在任一总线周期的T1期间输出一个正脉冲,用于输出地址锁存信号。
3)DEN (26)
1>数据允许信号;三态、输出;
2>低电平有效;
3>DEN通常作为数据收发器的选通信号;仅当DEN=0时,才允许收发器收发数据。
4)DT/R (27)
1>数据发送/接收信号,三态、输出;
2>DT/R=1时,表示CPU输出(发送)数据;DT/R=0时,表示CPU输入(接收)数据。
5)M/IO (28)
1>存储器或IO端口访问信号,三态、输出;
2>M/IO=1时,表示CPU当前正在访问存储器,M/IO=0时,表示CPU当前正在访问I/O端口。
6)WR (29)
1>写信号,输出、三态;
2>低电平有效。
3>WR=0,表示CPU当前正在写存储器或 I/O 端口。最小模式下,信号M/IO, RD,和WR组合起来决定了系统中数据传输的方式。
7) HOLD (31)
1>总线请求,输入;
2>高电平有效;
3>用于其它主控器(处理器、 DMA等)向本CPU 请求占用总线。
8)HLDA (30)
1>总线请求响应,输出;
2>高电平有效;
3>表示CPU认可其他总线部件提出的总线占用请求,准备让出总线控制权
五、 8086处理器时序
复位与重启:RESET端上的高电平维持4个时钟周期,可使CPU复位。如果是初
次加电引起的复位,则要求维持不小于50us的高电平。复位信号RESET从高电平到低电平的跳变会触发CPU内部的复位逻辑电路, 当RESET由高电平变低电
平7个机器周期后, CPU开始从FFFF0处执行程序。
图7 总线复位示意图
读写操作时序:
T1:
1>.确定读取位置。
2>获取逻辑地址
3>锁存地址
4>确定数据传送方向。
T2:
1>地址状态信息撤销成高阻态。
2>确定读、写方式。
T3:
1>读取数据信息
Tw:
若外设未准备好则等待时间。(T3后T4前)
T4:
所有信号撤销,等待下次周期。
总线保持请求与响应时序:
若其他模块(DMA等)占用总线要给CPU发送信号,CPU交出总线,使用结束再交还总线,并发送信号号告知CPU。
HOLD:外部告知CPU总线请求(高电平)与交还(低电平)。
HOLA:CPU内部告知各部调整状态至高阻态,让出总线。
图8 总线保持示意图