780 likes | 947 Views
第六章 输入 / 输出方式与接口芯片. 第一节 输入 / 输出方式. 第二节 中断及中断控制器 8259A. 第三节 DMA 及 DMA 控制器 8237A. 第四节 可编程定时 / 计数器 8254 及其应用. 第五节 可编程并行 I/O 接口芯片 8255A 及其应用. 第六节 串行通讯及可编程串行接口芯片 16550. 第七节 多功能接口芯片 82380. 第一节 输入 / 输出方式. 一、 I/O 接口. 第一节 输入 / 输出方式. 一、 I/O 接口. (1)I/O 接口的分类. 并行 I/O 接口和串行 I/O 接口.
E N D
第六章 输入/输出方式与接口芯片 第一节 输入/输出方式 第二节 中断及中断控制器8259A 第三节 DMA及DMA控制器8237A 第四节 可编程定时/计数器8254及其应用 第五节 可编程并行I/O接口芯片8255A及其应用 第六节 串行通讯及可编程串行接口芯片16550 第七节 多功能接口芯片82380
第一节 输入/输出方式 一、I/O接口
第一节 输入/输出方式 一、I/O接口 (1)I/O接口的分类 并行I/O接口和串行I/O接口 可编程接口和不可编程接口 专用接口和通用接口 (2)I/O接口的基本结构 主要包含有数据端口、状态端口和控制端口
(3)I/O端口的寻址方式 在一个微机系统中既有存储单元地址又有I/O端口地址,根据两者地址的不同安排可分为以下两种寻址方式。
A CPU 存储器 WE RD 译码 外设 D a. 存储器统一编址 在这种方式中,把I/O端口作为存储器的一个单元来对待,即每个端口占用一个存储单元地址。此时,对I/O端口操作可以使用全部的存储器指令,而不必另设专门的I/O指令。由于该方式是将I/O地址映射到了存储器地址空间,所以也称为存储器映像方式。
b. I/O端口独立编址 在这种方式下,I/O端口与存储器各自独立编址,这样存储器地址和I/O端口地址可以重叠。此时,CPU利用专门的I/O指令来操作I/O端口以防混淆。
二、CPU与外设之间的数据传送方式 在CPU与外设之间进行数据传送的方式有:无条件传送、查询传送、中断控制、直接存储器存取(Direct Memory Access 简称DMA)传送方式和I/O处理机方式。 适用于随时都是准备就绪的简单外设。接口电路中仅需数据端口。 (1)无条件传送方式
读外设状态 N 准备好? Y 数据输入/ 输出 适用于CPU与慢速的外设间的数据传送。 (2)查询方式 查询式接口电路一般有:数据端口、状态端口、控制端口。
适用对象同程序查询方式 (3)中断控制方式 该方式下,微机与外设并行工作,外设有请求时,微机对其进行服务,否则不对该外设进行任何操作。这样可大大提高CPU的利用率。
(4)直接存储器存取(DMA)传送方式 在主存与外设间建立直接数据通道,进行数据传送。有传送过程不需CPU干预,速度快的特点。其传送过程受专用硬件DMAC控制。 (5)I/O处理机传送方式 该方式中,I/O处理机用自己专门的指令和程序,负责输入输出。此时主CPU将只负责“数据处理”工作。
中断服务程序1 非预料事件1 中断服务程序2 CPU执行流程 非预料事件2 第二节 中断及中断控制器8259A 一、中断的基本概念 什么是中断 在CPU正常运行程序时,由于内部或外部某个非预料事件的发生,使CPU暂停正在运行的程序,而转去执行处理引起中断事件的程序,然后再返回被中断了的程序,继续执行。这个过程就是中断。
不可屏蔽中断(2) 8259A NMI 可屏蔽中断请求 8086 CPU中断逻辑 INTR 除法出错 (0) 单步中断 (1) INT n指令 INT 3断点 INTO溢出 (4) 中断源与中断向量表 中断源能够引发CPU中断的信息源,称为中断源。80X86微机系统中最多允许有256种中断源,其中中断源类型编号为0~255。 按中断源的性质可以把中断分为内中断和外中断两类。
中断向量表 在实模式下,中断向量表就是中断服务程序入口地址。
、、、 CLI MOV AX,0;中断向量表段地址是0 MOV ES,AX MOV DI,4*32H LEA AX,INTSUB CLD STOSW ;AX中的偏移量存入ES:DI MOV AX,SEG INTSUB STOSW ;AX中的段地址存入ES:DI 、、、 、、、 INTH: 中断向量表的设置 当CPU响应中断时,将从中断向量表中读取中断向量送给CS和IP,转去执行中断服务程序。因此,用户必须将中断服务程序的入口地址填入系统的中断向量表中,填入的方法有两种。 ① 用程序设置中断向量表 假设中断类型号为32H,中断服务程序入口处的标号为INTSUB。 中断向量表中先放(小地址)中断服务程序的偏移地址IP,然后是段地址(CS) (大地址)
② 用DOS功能设置中断向量表 利用INT 21H 的 35H 号功能可实现保存原中断向量,所取得中断向量放在ES:BX中。 MOV AL,N; N为被保存的中断类型号 MOV AH,35H INT 21H ; ES:BX中为原中断向量 PUSH ES PUSH BX
利用INT 21H 的 25H 号功能可实现设置新中断向量,新中断向量应放在DS:DX中。 CLI PUSH DS MOV AX,SEG INTSUB ;INTSUB段基址存入DS MOV DS,AX MOV DX,OFFSET INTSUB;INTSUB有效地址存入DX MOV AL,N ;中断类型号 N MOV AH,25H INT 21H ;将DS:DX放置中断向量表中 POP DS STI
若要在主程序结束前恢复原中断向量可采用以下程序段实现:若要在主程序结束前恢复原中断向量可采用以下程序段实现: 、、、 POP DX POP DS ;将保存于堆栈的原中断向量弹出,送入 ; DS:DX MOV AL,N MOV AH,25H INT 21H 、、、
中断描述符表 80486工作在保护模式下时,采用“中断描述符”来描述中断服务程序,用中断描述符表(IDT)取代中断向量表。 IDT可位于线性地址空间中的任何地方,CPU通过中断描述符表寄存器IDTR确定IDT的基地址,该寄存器保存有32位的基地址和IDT界限。
80486保护方式下中断/异常处理程序进入过程 乘8是因为每个IDT占用8字节
中断优先级与中断嵌套 中断优先级 当有多个中断源同时产生中断申请时,CPU先响应优先权最高的中断源,再响应优先级较低的中断源。
中断嵌套当多个中断源同时发出中断请求时,CPU按照中断优先权的高低顺序,依次响应。这种中断套中断的过程称为中断嵌套。中断嵌套当多个中断源同时发出中断请求时,CPU按照中断优先权的高低顺序,依次响应。这种中断套中断的过程称为中断嵌套。 中断嵌套可以有多级,具体级数原则上不限,主要取决于堆栈区的大小(因为中断处理前后均需要保护断点和现场,而断点信息和现场数据的保护是通过堆栈来完成的)。
CPU响应中断的条件 ①CPU内部中断是开放的。 ② 现行指令内无总线请求,没有更高优先级别的中断请求正在被响应或正发出、正挂起。 ③ CPU在现行指令结束后,即运行到最后一个机器周期的最后一个T状态时,才能采样INTR线而响应可能提出了的外中断请求。 中断处理过程 内中断处理过程 ① CPU自动产生中断类型号n; ②(SP)-2→(SP),标志寄存器F内容入栈; ③(SP)-2→(SP),当前代码段CS内容入栈; ④(SP)-2→(SP),当前指令计数器IP内容入栈; ⑤ 禁止外部中断IF=0,禁止单步中断TF=0;
⑥ 从中断向量表中取中断服务程序入口地址(4*N单元的字内容送IP,4*N+2单元里的内容送CS); ⑦ 转中断服务程序; ⑧ 执行中断服务程序并返回,弹出IP,CS,F,返回断点,继续执行。 外中断(INTR)执行过程 ① CPU发出两个中断响应信号INTA,第二个INTA时,CPU从当前数据总线上取中断类型码N(通常由管理INTR的控制器8259A提供); ②(SP)-2→(SP),标志寄存器F内容入栈; ③(SP)-2→(SP),当前代码段CS内容入栈; ④(SP)-2→(SP),当前指令计数器IP内容入栈; ⑤ 禁止外部中断IF=0,禁止单步中断TF=0;
⑥ 首先从中断向量表中取4*N单元的字内容送IP,然后再取4*N+2单元里的内容送CS; ⑦ 转中断服务程序; ⑧ 执行中断服务程序并返回,弹出IP,CS,F,返回断点,继续执行。
二、中断控制器8259 8259A的内部结构与引脚功能
对SP/EN引脚说明 (1)根据情况,可作为输入或输出使用 (2)若是缓冲模式(由ICW4的D3=1决定),则作为输出,作为数据缓冲器的选通线;此时该8259A是主片还是从片由ICW4的D2决定: D2=0,从片;D2=1,主片 (3)若是非缓冲模式(由ICW4的D3=0决定),则作为输入,用于区分主片还是从片:为高电平则是主片,低电平则是从片。此时不由ICW4的D2决定主从片关系,所以不关心该位的值。
8259A Vcc + 5V 总线 18.2Hz IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 方 波 数 据 线 D0 ~ D7 D0 ~ D7 键 盘 保 留 串 口2 IOR RD 串 口1 IOW WR 硬 盘 A0 A0 软 盘 打印机 片 选 译 码 CS A5 ~ A9 20~3FH SP/EN CAS0 CAS1 CAS2 GND 用于多片 8259A 级连情况 INTA INTA INT INTR 8259A与总线的连接
8259A的中断优先权管理方式 8259A有五种优先级管理方式,所有的优先级管理方式均可通过编程来设置。 ⑴ 全嵌套方式(由ICW4设置)(普通方式,不需写OCW1-3,IRQ0优先级最高,IRQ7优先级最低) ⑵ 特殊全嵌套方式(由ICW4设置)(适用于8259A级联的系统,在从片有中断时,主片不封锁从片INT输入端) ⑶ 优先级自动循环方式(由OCW2设置)(某中断源被响应中断后,其优先级自动排为最低) ⑷ 优先级特殊循环方式 (由OCW2设置) (可指定最低优先级) ⑸ 特殊屏蔽方式(由OCW3设置) (可屏蔽高优先级,开放低优先级中断)
8259A处理过程 分两步: ⑴ 处理外设中断申请,决定是否向CPU发中断申请信号。 ⑵ 若发出中断申请信号,且CPU响应,则在CPU中断响应周期送出中断类型号。
执行中断程序 中断未屏蔽 优先级高 1 0 0 1 0 1 0 0 0 0 8259A中断处理过程 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 0 0 0 1 0 1 数 据 线 0 0 D0 ~ D7 D0 ~ D7 EOI 1 0 0 0 PR 优先级 裁决器 A0 0 0 A0 0 0 0 0 片 选 译 码 1 0 A5 ~ A9 CS ICW1芯片控制 RD OCW1中断屏蔽寄存器 IMR ICW2中断类型号 IOR WR ICW3主从片关系 IOW OCW2优先级、发EOI INTA ICW4方式控制 INTA OCW3 特殊屏蔽设置 INT INTR IF=1
保存现场 执行完中断子程中最后一条指令IRET后,返回被中断处,继续执行被中断的程序。 CPU响应中断过程: • ① 取中断类型号N • ② 当前PSW的内容入栈 • ③ 当前CS的内容入栈 • ④当前IP的内容入栈 • ⑤清IF、TF标志为0 • ⑥ 取内存单元( 0 : N ×4 )字内容送IP 取中断子程 • ⑦ 取内存单元( 0 : N ×4 + 2 )字内容送CS 入口地址 • 此时CS:IP指向中断程序的入口,开始执行中断程序。
发中断结束命令 EOI 由 8259A 的工作过程可知:ISR中的内容是优先级裁决器进行裁决的重要依据,CPU响应某级中断后,8259A自动将ISR的对应位置1,如果CPU已执行完中断子程,而ISR中的对应位仍为1,8259A的优先级裁决器仍会据ISR的内容做裁决,从而会屏蔽同级的中断申请。因此,在中断响应后,对 ISR中相应位的清0很重要,它是8259A认为中断结束的标志。 ① 自动结束方式 8259A在接收到第二个中断响应脉冲INTA时就会自动清除ISR中的相应位。该方式只能用在系统中只有一片8259A且多个中断不会嵌套的情况下。 ② 非自动结束方式 ※ 一般结束方式 8259A在接收到一般结束命令时,就会把ISR中最高优先级的1复位,结束当前正在处理的中断。该方式适用于8259A工作在全嵌套方式下的情况。 ※ 特殊结束方式 当8259A工作在非全嵌套方式下,可选特殊结束方式。该方式下,通过命令使8259A ISR中的指定位复位,结束当前中断。
①CPU从引脚 INTA 发中断响应信号,接口芯片接收此信号,把中断类型号准备好;同时ISRi=1,IRRi=0。 ② CPU再从引脚 INTA 发中断响应信号,接口芯片接此信号后,将中断类型号送至数据总线上; ③ 从数据总线获取中断类型号。 ④ CPU根据读取到的中断类型号寻找中断程序的入口地址。 8086CPU如何获取中断类型号 由前面介绍知,当中断源产生中断请求后,不论是内中断、非屏蔽中断,还是可屏蔽中断,只要满足响应条件,在执行完当前指令后,CPU内部硬件会自动完成响应中断的过程,共七个步骤,而第一步就是获取中断类型号。 不同的中断源,8086CPU获取中断类型号的方法不同,一般具有以下几步:
4个初始化命令寄存器 ICW1、ICW2 ICW3、ICW4 3个操作命令寄存器 OCW1 (IMR) OCW2、OCW3 当前中断服务寄存器 ISR 中断申请寄存器 IRR 处理部分 IRR 中断申请 寄存器 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ISR 当前 中断 服务 寄存器 PR 优先级 裁决器 ICW1芯片控制 OCW1 1 0 0 1 0 1 0 0 1 × I3 I4 中断屏蔽寄存器 IMR ICW2中断类型号 0 0 OCW2 ICW3主从片关系 0 1 OCW3 ICW4方式控制 控制部分 8259A的编程 8259A中断控制器内部有9个可读写的寄存器
A0=0 偶地址端口 A0=1 奇地址端口 处理部分 IRR 中断申请 寄存器 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ISR 当前 中断 服务 寄存器 8 D0 ~ D7 PR 优先级 裁决器 A0 CS • 对 9个寄存器的读写均通过这两个端口实现 写入数据的特征位 • 写入的先后顺序 区分是对哪个寄存器进行操作 A0 A0 ICW1芯片控制 OCW1 1 0 1 0 0 1 0 1 0 0 RD ICW2中断类型号 中断屏蔽寄存器 0 1 0 0 根据 WR OCW2 ICW3主从片关系 0 1 0 1 1 × I3 I4 ICW4方式控制 OCW3 1 控制部分 8259A有两个I/O端口地址
0:不要ICW4 1:要ICW4 0:边沿触发 1:电平触发 0:有级连 1:无级连 标志 中断号高5位 从片,低3位代表位置 主片,1:有从片 0:一般嵌套 1:特殊嵌套 0:非缓冲 1:缓冲 1 1 0 1 × T7 T7 1 T4 T4 IC4 × × T6 T6 × T5 × T5 T3 LTIM T3 × × × × SNGL × A0 D7D6 D5 D4D3D2 D1 D0 A0 D7D6 D5 D4D3D2 D1 D0 A0 D7D6 D5 D4D3D2 D1 D0 A0 D7D6 D5 D4D3D2 D1 D0 8259A的初始化编程 8259A的初始化编程的顺序及内容 ①ICW1 ② ICW2 ③ ICW3 ④ ICW4
OCW2的D7~D5位的功能说明 D7 D6 D5 功 能 清除自动循环优先级命令 0 0 0 1 M7 M0 M6 M5 M2 M1 M3 M4 发出EOI 0 0 1 0 1 0 无操作 0 R 0 L0 SL EOI L2 L1 0 发出SEOI(special end of interruption) 0 1 1 最低优先级编码 1 0 0 设置自动循环优先级命令 0 0 SMM RR RIS 1 P ESMM 0 1 0 1 设置自动循环优先级并发EOI 设置特殊循环优先级命令 1 1 0 1 0 :特殊屏蔽设置 1 1 :特殊屏蔽清除 1 0 :读IRR 1 1 :读ISR 0:中断开放 1:最低优先级有效 1:发结束命令 1:优先级循环 1:查询 1 1 1 设置特殊循环优先级并发SEOI A0 D7D6 D5 D4D3D2 D1 D0 A0 D7D6 D5 D4D3D2 D1 D0 A0 D7D6 D5 D4D3D2 D1 D0 8259A的操作编程 ①OCW1 ② OCW2 ③ OCW3 教材 P178,P179页有错
OCW3的的几种用法 1) 向8259A送入D2=0、D1D0=10B的 OCW3指令后,向着8259A偶地址的读指令可读入中断请求寄存器IRR的内容; 2)若D1D0=11B,则可读入中断服务寄存器ISR的内容。 3)送入8259A的OCW3的D2=1时,可使8259A进入查询工作方式(非中断方式)。读取8259A偶地址(A0=0),可得到8259A的状态字,若状态字的D7=1,表示8259A的IR7~IR0中有中断请求发生,D2~D0给出了最高优先级中断请求的编码;若D7=0,则表示没有中断请求发生。
总线 ISR 当前 中断 服务 寄存器 IRR 中断 申请 寄存器 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 数 据 线 D0 ~ D7 D0 ~ D7 PR 优先级 裁决器 A0 A0 片 选 译 码 1 0 0 1 0 1 0 0 A5 ~ A9 CS ICW1芯片控制 RD OCW1中断屏蔽寄存器 IMR ICW2中断类型号 IOR WR ICW3主从片关系 IOW OCW2优先级、发EOI INTA 0 0 ICW4方式控制 INTA OCW3 特殊屏蔽设置 INT INTR 对8259A的奇地址的读指令可读得中断屏蔽寄存器IMR的内容,也可修改IMR的内容。 通过往奇地址端口写入IMR内容实现(即OCW1) 对应位为0,允许该级中断申请进入 对应位为1,禁止该级中断申请进入
例 已知 IBM PC/XT系统中8259A的奇地址端口地址为21H • 新增允许 IR2 的中断申请 • IN AL, 21H;读入原IMR的内容 • AND AL, 1111 1011B;D2=0,允许IR2的中断申请 • OUT 21H, AL;写入IMR(OCW1) • 禁止 IR4 的中断申请 • IN AL, 21H;读入原IMR的内容 • OR AL, 0001 0000B;D4=1,禁止IR4的中断申请 • OUT 21H, AL;写入IMR
IRQ8 IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 IRQ14 IRQ15 PCI 总 线 从8259A INT 中 断 路 由 器 PCI 总 线 IRQ0 IRQ1 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 系统时钟 键盘 主 8259A INT 至CPU IRQ7 IRQ6 IRQ5 IRQ4 IRQ3 IRQ2 ISA总线 8259A在PC中的基本应用 主、从8259A级连的中断控制逻辑 主片的端口地址:20H, 21H 从片的端口地址:A0H, A1H
中断申请引脚 IRQ0 IRQ1 IRQ2 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 IRQ8 IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 IRQ14 IRQ15 中断类型号 08h 09h 0Ah 0Bh 0Ch 0Dh 0Eh 0Fh 70h 71h 72h 73h 74h 75h 76h 77h 哪个设备使用 系统时钟(8254) 键盘 连接从8259 COM2串口2 COM1串口1 保留 软盘控制器 LPT1并口 实时时钟(RTC) 保留(软件指向0Ah类型) 保留 显卡 鼠标 数值协处理器 硬盘控制器 保留 8259A各中断请求的功能分配情况
主、从8259A的中断结束命令 对主8259A有: MOV AL,20H ;EOI命令 OUT 20H,AL ;写主片的OCW2 IRET 对从8259A有: MOV AL,20H ;EOI命令, OUT 0A0H,AL ;写从片的OCW2 IRET
8259A编程方法 ICW1(0)、ICW2(1)、ICW3(1)、ICW4(1)通常由 系统初始化 OCW1(1)中断屏蔽 OCW2(0)特殊操作(如EOI等) OCW3(0)特殊命令(如读命令) 中断编程 (1)确定奇地址、偶地址(如20H、21H) (2)写OCW1 (3)开IF(STI) (4)设置中断向量 (5)在中断服务程序中写OCW2(发EOI) (6)如需要,读ISR、IRR、IMR
第四节 可编程定时器/计数器8254及其应用 微机系统实现定时功能,主要有三种方法:软件定时、不可编程硬件定时和可编程硬件定时。 软件定时是通过执行一个固定的程序段来实现定时。由于CPU执行每条指令都需要一定时间,因此执行一个固定的程序段就需要一个固定的时间。定时或延时时间的长短可通过改变循环次数来控制。 不可编程的硬件定时常采用中小规模集成电路实现。如使用555定时器等,硬件定时方案不占用CPU时间,但电路连接好后,定时值就不能改变。 可编程硬件定时用可编程定时器/计数器来实现,本节主要介绍IBM PC系列微机使用的Intel 8254可编程定时器/计数器。
16位初值寄 存器由CPU 分两次写入 16位减1计数器:在CLK的作用下, 对计数初值N进行减1,当减为0时,在OUT引脚上产生回零时间到信号 16位锁存器其值随 减1计数器改变而改变 计数器0、1、2的内部结构 二、8254的工作方式