Presentation is loading. Please wait.

Presentation is loading. Please wait.

第六章 输入输出和中断技术 本章内容 基本概念 I/O端口的编址 中断 DMA* 输入输出的基本方法:无条件、查询、中断、DMA

Similar presentations


Presentation on theme: "第六章 输入输出和中断技术 本章内容 基本概念 I/O端口的编址 中断 DMA* 输入输出的基本方法:无条件、查询、中断、DMA"— Presentation transcript:

1 第六章 输入输出和中断技术 本章内容 基本概念 I/O端口的编址 中断 DMA* 输入输出的基本方法:无条件、查询、中断、DMA
第六章 输入输出和中断技术 本章内容 基本概念 I/O端口的编址 输入输出的基本方法:无条件、查询、中断、DMA 中断 中断基本概念 8086/8088中断系统 8259中断控制器* DMA* DMA的基本概念 DMA工作过程 DMA的三种传输方式

2 CPU 微型计算机中I/O接口的作用 存 储 器 M I/O 接 口 输 入 设 备 I 数据总线 DB 控制总线 CB 地址总线 AB 出

3

4 什么是I/O接口(电路)? I/O接口是位于系统与外设间、用来协助完成数据传送和控制任务的逻辑电路,I/O接口就是CPU与外设的连接部件。
PC机系统板的可编程接口芯片、I/O总线槽的电路板(适配器)都是I/O接口电路 CPU I/O接口 电路 I/O 设备 接口在CPU与外设之间

5 6.1 输入/输出接口(I/O接口) 6.1.1 概述 I/O接口的定义
把外设连接到总线上的一组逻辑电路的总称。实现外设与主机之间的信息交换。 I/O接口要解决的问题 速度匹配(Buffer) 信号电平和驱动能力(电平转换器、驱动器) 信号形式匹配(A/D、D/A) 信息格式(字节流、块、数据包、帧) 时序匹配(定时关系) 总线隔离(三态门)

6 I/O接口的功能 I/O地址译码与设备选择 把选中的与总线相接,未选中的与总线隔离(高阻态) 数据的缓冲与暂存
缓解接口与CPU工作速度的差异 输出接口有锁存环节 输入接口有缓冲环节 对外设进行监测、控制与管理,中断处理 信号电平与类型的转换 形式、格式、电平、功率、码制等

7 6.1.2 I/O接口的编址方式 I/O端口: I/O信息的三种类型:数据、命令、状态。
传送这三类信息的通道分别称为:数据端口(I、O)、命令端口(O)、状态端口(I)。 不同外设具有的端口数各不相同,计算机中为每一个端口都赋予一个惟一编号——称为端口地址(或端口号)。 端口有两种编址方式:统一编址和独立编址。

8    I/O接口电路的基本结构

9 1. 统一编址 地址空间(共1MB) 定义 把外设接口与内存统一进行编址。各占据统一地址空间的不同部分。 优点 指令统一,灵活;
访问控制信号统一,使用同一组的地址/控制信号。 缺点 内存可用地址空间减小 例如: MCS-51单片机 内存地址 (960KB) EFFFFH F0000H I/O地址 (64KB) FFFFFH

10 2. 独立编址 定义: 外设地址空间和内存地址空间相互独立。 优点:内存地址空间不受I/O编址的影响
定义: 外设地址空间和内存地址空间相互独立。 优点:内存地址空间不受I/O编址的影响 缺点:I/O指令功能较弱,使用不同的读写控制信号 例如: /8086 微机系统 内存地址空间 I/O地址空间 00000H 0000H I/O空间 (64KB) FFFFH 内存空间 (1MB) FFFFFH

11 MCS-51单片机

12 20 16 8088/ 8086

13 例如:8088/8086系统 8 8/8086 总 线 D15/D7~D0 D15/D7~D0 MEMR、MEMW 存储器访问 A19-A0
8/8086 线 A19-A0 A15-A0 MEMR、MEMW IOR、IOW 、AEN 存储器访问 I/O访问 D15/D7~D0 D15/D7~D0

14 8088/8086 CPU的I/O编址方式 采用I/O独立编址方式(但地址线与存储器共用) 地址线上的地址信号用 来区分:
地址线上的地址信号用 来区分: /0 时为I/O地址/M地址 I/O操作只使用20根地址线中的16/8根:A15/7 ~ A0 可寻址的I/O端口数为64K(65536)/256个 I/O地址范围为0~FFFFH/0~FFH IBM PC只使用了10根 A9 ~ A0 1024个I/O地址(0~3FFH) 原因: 够用为度, 简化电路

15 6.1.3 I/O端口地址的译码 、 、 A15 ~ A0 OUT指令 将使总线的 信号有效 IN 指令 将使总线的 信号有效
当接口只有1个端口(仅数据口,无状态口和控制口)时,16位地址线一般应全部参与译码,译码输出直接选择该端口; 下面先介绍这种简单情况 当接口具有多个端口时,则16位地址线的高位参与译码(决定接口的基地址),而低位则用于确定要访问哪一个端口。 I/O接口 (1端口) A0~A15 译码器 CS 例如: 某外设接口有4个端口(如8255/8253),地址为2F0H~2F3H,则其基地址为2F0H,由A15~A2译码得到,而A1、A0用来确定4个端口中的某一个。请思考: A0~A15=? I/O接口 (4端口) A0 A0 A1 A1 译码器 CS A2~A15

16 6.1.4 I/O数据的传送方式 并行 定义: 一个数据单位(通常为字节)的各位同时传送 特点: 速度快、距离短、成本高
例如:PC机的并行接口(通常用于连接打印机) 串行 定义: 数据按位进行传送 特点: 速度慢、距离远、成本低 例如: PC机的串行接口(通常用于串行通信)

17 6.2 简单接口电路 6.2.1 接口电路的基本结构 接主机 接外设 数据输入寄存器 (or 三态门) 译码 数据线 电路 AB
接口电路的基本结构 数据输入寄存器 (or 三态门) 译码 电路 数据线 AB (A0-A15) 接主机 数据输出寄存器 (锁存器) 接外设 DB (D0-D7) 状态线 状态寄存器 (or 三态门) 控制 逻辑 CB (IOR、IOW) 控制线 命令寄存器

18 接口电路的典型结构 C 外 P U 设 CPU对外设输入/输出的控制,通过对接口电路中各I/O端口的读/写操作完成。 端口 地址编号
译码 数据 缓冲 控制 电路 AB DB CB C P U CPU对外设输入/输出的控制,通过对接口电路中各I/O端口的读/写操作完成。 端口 地址编号      数据端口:用于存放CPU与外设间传送的数据信息       状态端口:用于暂存外设的状态信息       控制端口:用于存放CPU对外设或接口的控制信息,      控制外设或接口的工作方式。 按存放信息的不同分类 从编程角度看,接口内部主要包括一个或多个CPU可以进行读/写操作的临时寄存器,又称I/O端口(Port)。 各I/O端口由端口地址区分(80X86 64K) ----编址方式 可用普通逻辑芯片(本章) 也可用专用接口芯片(下章)

19 接口电路的基本结构(续) 一个外设一般占用端口地址情况 I/O接口可用普通门电路或专用电路制作 数据输入/输出寄存器(缓冲器/锁存器)
——暂存输入/输出的数据。 命令寄存器(锁存器) ——存放控制命令,用来设定接口功能、工作参数和工作方式。 状态寄存器(缓冲器) ——保存外设当前状态,以供CPU读取。 一个外设一般占用端口地址情况 ——数据I/O、命令、状态三个寄存器各占一个端口地址(共3个);有时把命令、状态两个寄存器共占一个端口地址(共2个);一些简单外设只有数据寄存器一个端口(共1个)。 I/O接口可用普通门电路或专用电路制作

20 8088CPU最小模式下, I/O端口读周期时序 8088 CLK IO/M A19~A16 /S6~S3 A15~A8 AD7~AD0
T1 T2 T3 T4 IO/M A15~A8 A19~A16 /S6~S3 ALE RD DT/R DEN CLK A7 ~ A0 D7 ~ D0 AD7~AD0 8088 GND A14 A13 A12 A11 A10 A9 A8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR VCC A15 A16/S3 A17/S4 A18/S5 A19/S6 SSO MN/MX HOLD HLDA WR INTA TEST READY RESET

21 8088CPU最小模式下, I/O端口写周期时序 8088 CLK IO/M A19~A16 /S6~S3 A15~A8 AD7~AD0
T1 T2 T3 T4 IO/M A15~A8 AD7~AD0 ALE WR DT/R DEN CLK A7 ~ A0 D7 ~ D0 8088 GND A14 A13 A12 A11 A10 A9 A8 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 NMI INTR VCC A15 A16/S3 A17/S4 A18/S5 A19/S6 SSO MN/MX RD HOLD HLDA INTA TEST READY RESET A19~A16 /S6~S3

22 IN指令时序 OUT指令时序 CPU总线I/O读、写时序(简化) A15~A0 IOR CLK D7~ D0 T4 T1 T2 T3 Tw
IOW D7~D0 OUT指令时序

23 简单接口电路(无条件传输) 数据输入接口 数据输出接口 必须具有三态输出能力,以便与总线挂接 外设有数据保持能力时—可用三态门实现
外设无数据保持能力时—用三态输出的锁存器实现 数据输出接口 常用锁存器实现

24 简单数据输入接口电路 三态门:高电平、低电平、高阻态 通常一个器件中包含8个三态门 常用芯片:74LS244(教材图6.3)
应用例子:开关接口 工作波形图如下: A B E A0~A15 地址有效 IOR 译码输出 D0~D7 开关状态

25 简单的输入接口举例 编程实现如果所有开关都闭合,则程序转向标号NEXT1,否则转向NEXT2。 MOV DX,83FCH IN AL, DX
AND AL,0FFH JZ NEXT1 JMP NEXT2 译码器 1 83FCH ~83FFH 输入设备 接口电路 系统总线

26 简单的输出接口举例 锁存器:由D触发器构成 通常一个器件包含:8个D触发器(+8个三态门) 常用芯片:(教材图6.5、图6.6)
74LS273(具有二态输出的D锁存器,内部结构见图6.5) 74LS374(具有三态输出的D锁存器,内部结构见图6.8) 应用例子:发光二极管接口 MOV DX,0FFFFH MOV AL, B OUT DX,AL +5V 74LS273 R D0 D7 =1 Q0 D0~D7 . . . . 功能: 第1、7个发亮,其余不亮 A0~A15 CP R =1 Q7 IOW 译码器具体连接见图6-6 系统总线 接口电路 输出设备 74LS374使用见图6-9

27 无条件传送方式(包括I/O) 数据 输出端口 选中地址 写信号 输入端口 读信号 无条件传送(I/O)

28 输入/输出接口综合应用例子 根据开关状态在7/8段数码管上显示数字或符号 共阳极7段数码管结构见p255 图6.10
用74LS273作为输出接口,把数据送到7段数码管 74LS273的地址假设为F0H 用74LS244作为输入口,读入开关K0~K3的状态 74LS244的地址假设为F1H 当开关的状态分别为0000~1111时,在7段数码管上对应显示’0’~’F’ 7段码表见下面

29 共阳极、共阴极两种 共阳极 共阴极 a b f g e C d h a b c d e f g h a b c d e f g h com

30 0~F的共阳极7段显示码表(已反相) 符号 形状 ’0’ ’8’ ’1’ ’9’ ’2’ ’A’ ’3’ ’B’ ’4’ ’C’ ’5’
7段码 hgfedcba ’0’ ’8’ ’1’ ’9’ ’2’ ’A’ ’3’ ’B’ ’4’ ’C’ ’5’ ’D’ ’6’ ’E’ ’7’ ’F’

31 74LS273的端口地址: 00F0 H = B 74LS244的端口地址: 00F1 H = B D0 Q0 | Q1 D7 Q2 Q3 Q4 CP Q5 Q6 Q7 a b c d e f g h D0~D7 8个 反相器 译码电路 IOW ≥1 & 74LS138 A7~A4 G1 G2A G2B C B A Rx8 74LS273 7406 共阳极 7段数码管 ≥1 Y0 +5V A15~A8 K0~K3 A3 D0 O1 I1 O2 I2 O3 I3 O4 I4 E1 A2 Y1 D1 A1 D2 A0 D3 ≥1 IOR 开关 74LS244

32 相应程序段如下: …… Seg7 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,67H,77H,7CH,39H,5EH,79H,71H LEA BX, Seg7 ;取7段码表基地址 MOV AH, 0 GO: MOV DX, 0F1H ;开关接口的地址为F1H IN AL, DX ;读入开关状态 AND AL, 0FH ;保留低4位 MOV SI, AX ;作为7段码表的表内位移量 MOV AL, [BX+SI];取7段码 思考:可否改用XLAT? MOV DX, 0F0H ;7段数码管接口的地址为F0H OUT DX, AL JMP GO

33 CPU与外设间的数据传送方式 数据传送控制:使两者高效、可靠地进行数据传送 四种传送方式 (1) 无条件传送方式
I/O接口电路基础:三态缓冲器/锁存器 问题:CPU与外设的工作速度不一致,尤其是当外设由其他CPU或时序电路控制时更加明显,应如何解决效率和可靠性。 数据传送控制:使两者高效、可靠地进行数据传送 四种传送方式 (1) 无条件传送方式 (2) 条件传送方式 ( 查询方式 ) (3) 中断传送方式 (4) DMA传送方式 ( Direct Memory Access ) 存贮器直接存取方式 (程序方式)

34 典型无条件传送方式接口电路(输入) 74LS244 E1/E2 IO总线 例: 开关 DB 三 态 开关 D7 缓冲器 状态 ~ D0
IOR 地址 译码 AB  284H D7 ~ D0 A15 A0 IO总线 例: 开关 图中译码电路的作用: 只当A15~A0上出现284H时, (即 B) 输出0,其他输出1。 74LS244 E1/E2 该电路在CPU执行指令(当外设开关准备好后-开关动作时间固定) MOV DX, 284H IN AL, DX 功能: 将输入设备的数据读入CPU内AL中

35 典型无条件传送方式接口电路(输出) 该电路在CPU执行指令(当外设LED指示灯准备好后—实际上一直处于准备好) MOV AL, 81H
MOV DX, 288H OUT DX, AL 功能: CPU内AL中的数据81H送至输出设备 IO总线 锁存器 输出 设备 数据线 IOW 地址 译码 地址线  288H D7 ~ D0 A15 A0 例:LED指示灯 74LS273 图中译码电路的作用: 只当A15~A0上出现288H时, (即 B) 输出0,其他输出1。

36 无条件传送方式 (同步传送方式) 实现方法 CPU不查询外设工作状态, 与外设速度的匹配通过在软件上延时完成,
(程序方式之一) 实现方法 CPU不查询外设工作状态, 与外设速度的匹配通过在软件上延时完成, 在程序中直接用I/O指令,完成与外设的数据传送 特点 1. 适用于外设动作时间已知, 前提:CPU与外设进行数据传送时,外设保证已准备好。如开关、发光器件(如发光二极管、7段数码管、灯泡等)、继电器、步进电机等。 2. 软硬件十分简单。

37 条件传送方式(查询传送方式) 实现方法: 在与外设进行传送数据前,CPU先查询外设状态,当外设准备好后,再才执行I/O指令,实现数据传送。
(程序方式之二) 实现方法: 在与外设进行传送数据前,CPU先查询外设状态,当外设准备好后,再才执行I/O指令,实现数据传送。 特点: 1. CPU通过不断查询外设状态,实现与外设的速度匹配; 2. CPU的工作效率低,响应速度慢; 3. 适用于简单、慢速的或实时性要求不高的外设. 编程流程 N Y 从状态端口读入状态信息 从数据端口传送一个数据 外设准备好否? 注意:多个外设时,查询流程见教材P259 图6.15-查询顺序代表了优先级

38

39 查询方式输入例 C 输入 P 外 备 U I/O接口 假设外设的状态端口为28C H(83H), 其中D7=1时,表示外设数据准备好
实现从外设读50H个字节到内存缓冲区buffer中。 28CH端口 状态端口 288H端口 数据端口 地址 译码 数据 缓冲 控制 电路 输入 C P U 地址线 数据线 控制线 状态 信号 数据 信号 I/O接口

40 查询方式输入接口电路 输 入 装 置 D7 D6 D0 PC总线 IOR 状态端口 D7=1 表示外设准备好 地址线 288H D7
READY MOV DX, 288H IN AL, DX 三 态 缓冲器 数 据 线 288H  数据 端口 地址 译码 地址线  状态 IOR R Q D D7 28CH  PC总线 A15 ~ A0 D0 & 状态端口 D7=1 表示外设准备好 D0 : D7 READY STB BUSY +5v MOV DX, 28CH IN AL, DX GND

41 流程图 编程从外设读入50H个字节到内存缓冲区buffer中 N Y 从28CH状态端口 读入外设状态信息 D7=1, 外设准备好否?
读入一个字节数据 Y N D7=1, 外设准备好否? 50H个数据传送结束?

42 查询方式输入程序片段 思考: 若状态口和数据口为83H和80H,则程序应如何修改? STATUS EQU 28CH
MOV AX, SEG buffer ;取缓冲区首地址 MOV DS, AX LEA DI, buffer MOV CX, 50H ;传送个数 next: MOV DX, STATUS ask: IN AL, DX ;从状态端口读入状态信息 TEST AL, B ;80H, 检测D7位 JZ ask ;D7=0,继续查询 MOV DX, 288H IN AL, DX ;从数据端口读入数据 MOV [DI], AL ;送缓冲区 INC DI ;修改缓冲区指针 LOOP next ;传送下一个 ….

43 查询方式输出例 C 输出 P 外 备 U I/O接口 假设外设的状态端口为28C H, 其中D0 = 0时,表示外设准备好
编程将缓冲区buffer的80H个字节输出到外设。 28CH端口 状态端口 288H端口 数据端口 地址 译码 数据 缓冲 控制 电路 输出 C P U 地址线 数据线 控制线 状态 信号 数据 信号 I/O接口

44 查询方式输出接口 输 出 设 备 数据 端口 状态端口 D0 = 0 地址 表示外设准备好 译码 PC 总 288H 锁 线 存 器 三 态
数 据 线 288H 数据 端口 地址 译码 地址线  R D Q 三 态 缓冲器 +5v ACK PC 线 IOR A15 ~ A0 D7 D0 IOW 状态 28CH & 查询方式输出接口 MOV DX, 288H OUT DX, AL 状态端口 D0 = 0 表示外设准备好 READY (BUSY) D7 D D0 BUSY MOV DX, 28CH IN AL, DX

45 条件查询输出流程图 编程将缓冲区buffer的80H个字节输出到外设 N Y 从28CH状态端口 读入外设状态信息
将一字节数据送至 288H数据端口 Y N D0=0, 外设准备好否? 80H个数据传送结束?

46 查询方式输出程序片断 STATUS_PORT EQU 28CH DATA_PORT EQU 288H
MOV AX, SEG buffer ;取缓冲区首地址 MOV DS, AX LEA SI, buffer MOV CX, 80H ;传送个数 next: MOV DX, STATUS_PORT ask: IN AL, DX ;从状态端口读入状态信息 TEST AL, B ;检测D0位 JNZ ask ;D0=1,继续查询 MOV AL, [SI] ;从缓冲区取数 MOV DX, DATA_PORT OUT DX, AL ;从数据端口输出数据 INC SI ;修改缓冲区指针 LOOP next ;输出下一个 ….

47 中断传送方式 实现方法: 1. 当外设准备好,向CPU发出中断请求 2. CPU在满足响应中断的条件下,发出中断响应信号;
完成与外设的数据传送; 4. CPU从中断服务程序返回,继续执行被中断的程序

48 外 设 中断方式下CPU执行程序流程 发申请 中断服务程序 发申请 中断服务程序 时间随机 两者无关
硬件中断---NMI 与INTR两根线申请中断(与CALL差别大) 软件中断---INT n与INTO指令(与CALL功能类似)

49 中断传送方式 4 1 3 2

50 中断过程大致分为: 中断请求:由需要提供中断服务程序的设备提出; 中断响应:CPU给设备发出一个中断应答信号;
现场保护:保护执行中断服务程序前的各种信息; 执行中断服务程序:完成特定的操作; 退出中断服务程序:恢复现场。

51 中断传送方式的特点 1. CPU和外设大部分时间处在并行工作状态, 2. 中断传送方式提高了CPU的效率。
进入数据传送的过程。 2. 中断传送方式提高了CPU的效率。 3. 对外设的请求能作出实时响应, 可处理故障。 4. 适于实时、快速、复杂的外设,但不适用于大量、高速频繁数据交换DMA。

52 DMA传输方式 前面3种I/O方式共性: 都需要CPU作为中介: 外设 CPU 内存 两个含义:
1)软件:外设与内存之间的数据传送是通过CPU执行程序来完成的(PIO方式); 2)硬件:I/O接口和存储器的读写控制信号、地址信号都是由CPU发出的(总线由CPU控制)。 缺点:程序的执行速度限定了传送的最大速度(约为几十KB/秒) — 解决办法:DMA传输 外设 内存 DMAC

53 DMA 传送方式(直接存储器存取方式) 1. 由专用接口芯片DMA控制器 (称DMAC) 控 制传送过程,
实现方法 1. 由专用接口芯片DMA控制器 (称DMAC) 控 制传送过程, 2. 当外设需传送数据时,通过 DMAC向 CPU发出总线请求HOLD ; 3. CPU发出总线响应信号HLDA,释放总线; 4. DMAC接管总线,控制外设、内存之间直 接数据传送

54 DMA 传送方式过程 CPU DMAC 内存 外设 总线 响应 请求 (i8237)

55

56 DMAC内部包括四个基本寄存器 ①地址寄存器:用于存取下一个要访问的内存单元的地址,地址寄存器的内容加1或减1操作,取决于DMAC的设计

57 DMA传送流程: HLDA 发存储器地址 传送数据 传送结束? DMA结束 修改地址指针 图7.17 DMA流程图

58 DMA操作方式有哪些? 1. 周期挪用 2 .周期扩展 3 .CPU停机方式 CPU不访问存储器时的那些周期,用来进行DMA操作。
使用专门时钟电路 需要DMA操作时,使CPU的时钟周期加宽,在加宽的时钟周期进行DMA操作。 3 .CPU停机方式 最常见方式

59 DMA传送方式的特点 1. 外设和内存之间,直接进行数据传送, 不通过CPU, 传送效率高。 适用于在内存与高速外设、
或两个高速外设之间进行大批量数据 传送。 2. 电路结构复杂,硬件开销较大。

60 *I/O处理器控制方式(通道方式)

61 几种数据传送方式特点? 无条件传送:慢速外设需与CPU保持同步 查询传送: 简单实用,效率较低,硬件开销小
DMA传送:DMAC控制,外设直接和存储器进行数据传送,适合大量、快速数据传送,需要硬件开销

62 6.3 输入输出的控制方式 主机与外设之间数据传送的控制方式 有以下四种: 无条件传送 查询(条件)方式传送 中断方式传送
6.3 输入输出的控制方式 主机与外设之间数据传送的控制方式 有以下四种: 无条件传送 查询(条件)方式传送 中断方式传送 直接存储器存取(DMA, Direct Memory Access)

63 6.3.1 无条件传送方式 适用场合:适用于总是处于准备好状态(定时固定或已知)的外设 以下简单外设可采用无条件传送方式:
无条件传送方式 适用场合:适用于总是处于准备好状态(定时固定或已知)的外设 以下简单外设可采用无条件传送方式: 开关 发光器件(如发光二极管、7段数码管、灯泡等) 继电器 步进电机 优点:软件及接口硬件简单 缺点:只适用于简单外设,适应范围较窄

64 6.3.2 查询(条件)方式传送 适用场合:适用于外设并不总是准备好,而且对传送速率、传送效率要求不高的场合。
CPU在与外设交换数据前必须询问外设状态——“你准备好没有?” 对外设的要求:应提供设备状态信息 对接口的要求:需要提供状态端口 优点:软件比较简单 缺点:CPU效率低,数据传送的实时性差, 速度较慢

65 查询方式的流程图 注:多个外设时,查询流程见教材图6.15 防止死循环 Y 超时? N 读入并测试外设状态 超时错 N READY? Y
与外设进 行数据交换 注:多个外设时,查询流程见教材图6.15 复位计时器 N 传送完? Y

66 例如:用查询方式进行输出 外设状态端口地址为3FBH,第5位(D5)为状态标志(=1忙,=0准备好)
外设数据端口地址为3F8H,写入数据会使状态标志置1 ;外设把数据读走后又把它置0。 试画出其电路图。(电路图见下页)

67 思考: 程序段? 打印机 D7-D0 外设 IOW A9 | A3 ≥1 & G G2A G2B C B A A15 | A10 A2 A1
74LS374 D7-D0 D7-D0 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 D7 D6 D5 D4 D3 D2 D1 D0 D5 外设 IOW A9 | A3 74LS138 ≥1 & 3F8H G G2A G2B C B A CP Y0 OE STROBE A15 | A10 ≥1 (1忙/0闲) 打印机 BUSY A2 A1 A0 S Y3 Q D ≥1 3FBH CP Q 状态端口 (=1忙,=0准备好) IOR 思考: 程序段?

68 6.3.3 中断方式传送 概念: CPU无需循环查询外设状态,而是外部设备在需要进行数据传送时才中断CPU正在进行的工作,让CPU来为其服务。即CPU在没有外设请求时可以去做更重要的事情,有请求时才去传输数据,从而大大提高了CPU的利用率。 优点:CPU效率高,实时性好,速度快。 缺点:程序编制较为复杂。

69 6.3.4 DMA传输 前面三种I/O方式共性: 都需要CPU作为中介: 外设 CPU 内存 两个含义:
1)软件:外设与内存之间的数据传送是通过CPU执行程序来完成的(PIO方式); 2)硬件:I/O接口和存储器的读写控制信号、地址信号都是由CPU发出的(总线由CPU控制)。 缺点:程序的执行速度限定了传送的最大速度(约为几十KB/秒) — 解决办法:DMA传输

70 优点:数据传输由DMA硬件来控制,数据直接在内存和外设之间交换,可以达到很高的传输速率(可达几MB/秒)
外设 内存 外设直接与存储器进行数据交换 ,CPU不再担当数据传输的中介者; 总线由DMA控制器(DMAC)进行控制(CPU要放弃总线控制权),内存/外设的地址和读写控制信号均由DMAC提供。 优点:数据传输由DMA硬件来控制,数据直接在内存和外设之间交换,可以达到很高的传输速率(可达几MB/秒)

71 几个基本概念 总线控制权、mater、slave DMAC编程周期:slave DMAC控制总线进行数据传输周期:master
基本的:MEM——I/O 扩充的:MEM——MEM I/O ——I/O

72 I/O电路的I/O接口(含DMAC) CPU DMA

73 DMA传送原理示意图 DMAC ① 外设发出DMA请求 ② DMAC向CPU申请总线 ③ CPU完成当前总线周期后响应,并释放总线控制权
CPU DMAC 外设接口 HOLD DRQ HLDA DACK AEN MEMW MEMR IOW IOR AEN MEMW MEMR IOW IOR AEN IOW IOR 系统总线 ① 外设发出DMA请求 ② DMAC向CPU申请总线 ③ CPU完成当前总线周期后响应,并释放总线控制权 ④ DMAC得到总线控制权,并发出DMA响应信号 ⑤ 由DMAC发出各种控制信号,控制外设与存储器之 间的数据传送 ⑥ 数据传送完后,DMAC撤销HOLD信号 ⑦ CPU释放HLDA信号,并重新控制总线 MEMW MEMR 存储器

74 DMA控制器的工作过程: 1)当外设准备好,可以进行DMA传送时,外设向DMA控制器发出“DMA传送请求”信号(DRQ);
2)DMA控制器收到请求后,向CPU发出“总线请求”信号HOLD,表示希望占用总线; 3)CPU在完成当前总线周期后会立即对HOLD信号进行响应。响应包括两个动作:一是CPU将数据总线、地址总线和相应的控制信号线均置为高阻态,由此放弃对总线的控制权。另一方面,CPU向DMA控制器发出“总线响应”信号(HLDA)。 4)DMA控制器收到HLDA信号后,就开始控制总线,并向外设发出DMA响应信号DACK;

75 DMA控制器的工作过程(续) 5)DMA控制器送出地址信号和相应的控制信号,实现外设与内存或内存与内存之间的直接数据传送;
例如,向I/O接口发出读信号,同时往地址总线上发出存储器的地址和存储器写信号和AEN信号,即可从外设向内存传送一个字节。 6)DMA控制器自动修改地址和字节计数器,并判断是否需要重复传送操作。当规定的数据传送完后,DMA控制器就撤销发往CPU的HOLD信号。CPU检测到HOLD失效后,紧接着撤销HLDA信号,并在下一时钟周期重新开始控制总线。

76 总线保持/响应时序

77 DMA的三种传输方式: 连续传送(块传送) 单次传送(每次传送一个字节) 按需传送(猝发传送)
DMAC申请到总线后,将一块数据传送完后才释放总线,而不管中间DREQ是否有效。 单次传送(每次传送一个字节) 每个DMA周期只传送一个字节就立即释放总线。 按需传送(猝发传送) 只要I/O接口的数据缓冲可用,就进行传送。 (注:I/O接口需要有一定大小的FIFO缓冲)

78 数据块传送 允许DMA DMAC请求总线 DMA传送一个字节 地址增量,计数器减量 DMAC释放总线 N DMA请求? Y
CPU响应, DMAC获总线控制权 DMA传送一个字节 地址增量,计数器减量 块结束? Y N DMAC释放总线

79 每次传送一个字节 允许DMA N Y DMAC请求总线 DMA传送一个数据 Y N 测试I/O的DREQ DMA请求?
CPU响应, DMAC获总线控制权 DMA传送一个数据 地址增量,计数器减量 Y 块结束? N 释放总线至少一个总线周期 DMAC释放总线

80 按需传送 允许DMA DMA请求? DMAC请求总线 CPU响应, DMAC获总线控制权 DMA传送一个字节 地址增量,计数器减量 块结束?
N Y DMAC请求总线 CPU响应, DMAC获总线控制权 DMA传送一个字节 地址增量,计数器减量 块结束? Y N 测试I/O的DREQ 有效? Y N 无效,释放总线 释放总线,请求中断

81 连续传送 单次传送 按需传送 DMA传输方式示意图: T T T 图例: 一个总线周期 CPU对总线控制 DMAC控制总线,共传送n个数据
DMAn T DMA共传送n个数据 单次传送 T DMA1 DMA2 DMAn DMA传送k个数据 DMA传送n-k个数据 按需传送 T FIFO可用 FIFO满 FIFO可用 FIFO满 图例: 一个总线周期

82 6.4 中断技术 6.4.1 中断的基本概念 什么是中断? 与生活场景的比较 实际场景 计算机 正在看书 执行程序 中断请求及响应 电话铃响
6.4 中断技术 6.4.1 中断的基本概念 什么是中断? 与生活场景的比较 实际场景 计算机 正在看书 执行程序 中断请求及响应 电话铃响 事件发生 接电话 事件处理 中断处理 继续看书 继续执行程序 中断返回

83 中断的定义 主程序 CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(称为中断服务程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。 INT × 发生事件 IRET

84 中断源 定义: 引起CPU中断的事件——中断源。 例如: 中断源分类:外部中断、内部中断 8086/8088的外部中断信号:INTR、NMI
外设—请求输入输出数据,报告故障等 事件—掉电、硬件故障、软件错误、非法操作、定时时间到等 中断源分类:外部中断、内部中断 内部中断:CPU内部执行程序(INT n等)时自身产生的中断 外部中断:CPU以外的设备、部件产生的中断 8086/8088的外部中断信号:INTR、NMI INTR——可屏蔽中断请求,高电平有效,受IF标志的控制。 IF=1时,执行完当前指令后CPU对它作出响应。 NMI——非屏蔽中断请求,上升沿有效,任何时候CPU都要响 应此中断请求信号。

85 计算机中要引入中断的原因? 提高数据传输率; 避免了CPU不断检测外设状态的过程,提高了CPU的利用率(并行操作)。
实现对特殊事件的实时响应(实时处理/故障处理)。如多任务系统操作系统中: 缺页中断 设备中断 各类异常 实时时钟,…等

86 中断过程 以下以外部中断为主介绍这五个步骤。 五个步骤: 中断请求 中断判优/排队 (有时还要进行中断源识别) 中断响应 中断服务/处理
主程序 五个步骤: 中断请求 中断判优/排队 (有时还要进行中断源识别) 中断响应 中断服务/处理 中断返回 中断服务程序 响应 服务/ 处理 排队 请求 硬/ 软 INT n 返回 IRET 以下以外部中断为主介绍这五个步骤。

87 1)中断请求 外设接口(中断源)发出中断请求信号,送到CPU的INTR或NMI引脚; 中断请求信号类型:边沿请求,电平请求
例如,NMI为边沿请求,INTR为电平请求 中断请求信号应保持到中断被处理为止 (防止重复响应); CPU响应中断后,中断请求信号应及时撤销。 在8086/8088系统中,外设的中断要经过8259A可编程中断控制器(PIC)的排队判优后向CPU发出: (I/O接口) → PIC (8259)→ CPU

88 2.1)中断源识别 计算机中的中断源有很多,CPU必须识别是哪一个设备产生中断。 识别中断源有两个方法:
软件查询。将中断信号从数据总线读入,用程序进行判别,如教材图6.18和图6.19。 硬件法(中断矢量法)。由中断源提供中断类型号n,CPU根据类型确定中断源。(8086/8088即采用此种方法)

89 2)中断判优 多个中断源产生中断,CPU首先为谁服务? ——中断优先级排队问题。 中断优先级控制要处理两种情况: 中断优先级的控制方法:
对同时产生的中断:应首先处理优先级别较高的中断;若优先级别相同,则按先来先服务的原则FIFO处理; 对非同时产生的中断:低优先级别的中断处理程序允许被高优先级别的中断源所中断——即允许中断嵌套。 中断优先级的控制方法: 硬件判优——链式判优、并行判优(中断向量法) 软件判优——顺序查询中断请求,先查询的先服务(即先查询的优先级别高) 通常将中断判优与中断源识别合并在一起进行处理。 x86系统中,这项任务由PIC(8259)和CPU(8086/8088)共同完成。

90 用软件确定中断优先权

91 软件判优的特点 查询方法的优点是: (1) 询问的次序即是优先权的次序。显然,最先询问的,优先权的级别最高。
(2) 省硬件。不需要有判断与确定优先权的硬件排队电路。 但随之而来的缺点是: 由询问转至相应的服务程序入口的时间长,尤其是在中断源较多的情况下。

92 硬件优先权排队电路 1. 中断优先权编码电路 8个新中断源 正在进行中断处理的外设的优先权编码 8个中任一个有中断请求时,通过“或”门,
即可有一个中断请求信号产生 8个新中断源 正在进行中断处理的外设的优先权编码

93 硬件编码器和比较器的优先权排队电路 若有8个中断源,当任一个有中断请求时,通过“或”门,即可有一个中断请求信号产生,但它能否送至CPU的中断请求线,还要受比较器的控制(若优先权失效信号为低电平,则与门2关闭)。 8条中断输入线的任一条,经过编码器可以产生三位二进制优先权编码A2A1A0,优先权最高的线的编码为111,优先权最低的线的编码为000。而且若有多个输入线同时输入,则编码器只输出优先权最高的编码。

94 正在进行中断处理的外设的优先权编码,通过CPU的数据总线,送至优先权寄存器,然后输出编码B2B1B0至比较器,以上过程是由软件实现的。
比较器比较编码A2A1A0与B2B1B0的大小,若A≤B,则“A>B”端输出低电平,封锁与门1,就不向CPU发出新的中断申请(即当CPU正在处理中断时,当有同级或低级的中断源申请中断时,优先权排队线路就屏蔽它们的请求);只有当A>B时,比较器输出端才为高电平,打开与门1,将中断请求信号送至CPU的INTR输入端,CPU就中断正在进行的中断处理程序,转去响应更高级的中断。

95 若CPU不在进行中断处理时(即在执行主程序),则优先权失效信号为高电平,当有任一中断源请求中断时,都能通过与门2,发出INTR信号。
这样的优先权电路,如何能做到转入优先权最高的外设的服务程序的入口呢?当外设的个数≤8时,则它们公用一个产生中断矢量的电路,它有三位由比较器的编码A2A1A0供给,就能做到不同的编码转入不同的入口地址。

96 2. 雏菊花环式或称为链式优先权排队电路 链式判优电路原理图(教材图6.20) 中 断 控 制 器 ┇ 外设1 外设2 外设3 CPU
2. 雏菊花环式或称为链式优先权排队电路 外设1 外设2 外设3 CPU INTA INTR 外设接口1 外设接口2 外设接口3 IREQ IREQ IREQ E 中断确认 中断确认 中断确认 菊花链 逻辑电路 菊花链 逻辑电路 菊花链 逻辑电路 INTAin INTAin INTAin ≥1 链式判优电路原理图(教材图6.20)

97 菊花链逻辑电路 INTR 中 断 向 量 码 n INTAin INTAout DB 外设接口 中断确认 菊花链 逻辑电路 & =1 ≥1
三态门 DB E 中断确认 IREQ 菊花链 逻辑电路 & =1 ≥1 INTAin INTAout INTR

98 3)中断响应 在每条指令的最后一个时钟周期,CPU检测INTR或NMI信号。若以下中断响应条件成立,则CPU响应中断: 当前指令执行完。
当前指令是STI和IRET,则下条指令也要执行完。 当前指令带有LOCK、REP等指令前缀时,则把它们看成一个整体,要求完整地执行完; 对INTR,CPU应处于开中断状态,即IF=1; 当前没有复位(RESET)和保持(HOLD)信号。 若NMI和 INTR 同时发生,则首先响应NMI。

99 3)中断响应(续) CPU中断响应时,要做下述几项工作: 对INTR,向中断源发出INTA中断响应信号;
为何关 单步中断? CPU中断响应时,要做下述几项工作: 对INTR,向中断源发出INTA中断响应信号; 自动关中断,即IF=TF=0(关可屏蔽中断和单步中断) ; 断点保护,包括CS、IP和FLAGS。主要是保证中断结束后能返回被中断的程序----PUSH CS/IP/FLAGS 获得中断服务程序首地址(入口)---JMP CS’:IP’ 如何得到中断处理程序的首地址? 固定入口法----MCS-51单片机中 中断向量法——常用, 如: X86中

100 4)中断处理(中断服务) 中断服务子程序特点 中断服务子程序要做的工作 中断 处理 主程序 中断服务程序
为”远”过程(类型为FAR 或 far) 要用IRET指令返回 ---POP FLAGS/IP/CS 中断服务子程序要做的工作 保护现场(PUSH reg’s) 开中断IF=1(STI) 允许 中断嵌套 进行中断处理 ---用户根据中断处理任务编写 恢复现场(POP reg’s) 中断返回(IRET) 保护现场 PUSH 开中断 STI 中断 处理 中断 嵌套 现场 断点 关中断 CLI 恢复现场 POP 开中断 STI 中断返回 IRET

101 5)中断返回 执行中断返回指令IRET IRET指令将使CPU把堆栈内保存的断点信息弹出到IP、CS和FLAGS中,保证被中断的程序从断点处能够继续往下执行。 相当于POP IP/CS/FLAGS IP IPL SP IPL IPH IPH CSL CSL CS 进入中断服务程序时 中断返回后 CSH CSH FLAGL FLAGL FLAG FLAGH FLAGH SP

102 /8086的中断系统 8088/8086系统的中断源 1 内部中断 除法溢出:类型号0,执行除法指令时,若发现除数为0或商大于目的操作数所能表达的范围时产生。 单步中断:类型号1,TF=1时产生(当前指令需执行完)。 断点中断:类型号3,这是一个软件中断,即INT 3指令。一般用于程序调试,在断点中断服务程序中,可显示有关寄存器、存储单元等内容,以便程序员分析到断点为止程序是否正确。 溢出中断:类型号4,这是一个软件中断,即INTO指令。 若算术指令的执行结果发生举出(OF=1),则执行指令后立即产生一个中断类型码为4的中断。 软件中断:即INT n指令,类型号n(0-255)。

103 单步中断---1型中断 CPU每执行完一条指令都会检查陷阱标志TF的状态。 若TF=1,则CPU就产生中断类型1的中断,使CPU转向单步中断的处理程序。 单步中断可用于程序的调试,使CPU一次执行一条指令,从而能够逐条地观察程序运行情况。 注意:(1)所有类型的中断在其处理过程中,CPU会自动地把状态标志压入堆栈,然后清除TF和IF。因此,当CPU进入单步中断处理程序时,就不再处于单步工作方式,而以正常方式工作。只有在单步处理结束时,从堆栈中弹出原来的标志,才使CPU又回到单步方式; (2)8086/8088指令系统中无设置或清除TF标志指令,但可通过其他方式对TF置位或复位。 PUSHF PHSHF POP AX POPAX OR AX,0100H ;置位TF AND AX,0FEFFH;复位TF PUSH AX PUSH AX POPF POPF 15 11 10 9 8 7 6 4 2 FLAGS O D I T S Z A P C

104 2 外部中断 与中断有关的控制线为:NMI和INTR、INTA 非屏蔽中断NMI:类型号2,不可用软件屏蔽,CPU必须响应它。 可屏蔽中断INTR:类型号n由PIC(8259)提供。IF=1时CPU才能响应,CPU响应信号为INTA。

105 8086/8088中断源类型 中断指令 INT n 外部/硬件中断请求 非屏蔽中断请求 可 屏 蔽 8086/8088 CPU内部逻辑
软件 硬件 8086/8088中断源类型 中断指令 INT n (n=0~255) 内部/软件中断请求 外部/硬件中断请求 软件中断指令 n 中断逻辑 NMI 2 非屏蔽中断请求 溢出中断 4 DB n 断点中断 3 中断控 制器 8259A PIC 除法错 内部排队 中断开关 INTR 1 单步中断 INTA 8086/8088 CPU内部逻辑 中断请求\排队\屏蔽

106 中断源的识别 8088/8086系统采用中断类型码n来识别不同的中断源。每个中断源都有一个与它相对应的中断类型码n 。
溢出、断点、除法溢出、单步、非屏蔽中断的类型码为固定值(4、3、0、1、2) 软件中断的类型码由指令INT n 给出(n) 可屏蔽中断的类型码由PIC(8259)给出(n) CPU响应INTR中断时,会产生两个中断响应总线周期INTA(教材p273 图6.24),要求PIC在第2个中断响应总线周期把中断类型码 n 放到数据总线上,供CPU读入。

107 INTR中断响应INTA周期时序 参见 p273 图6-24 n
LOCK为最大模式下的总线封锁信号。它有效时,CPU锁定总线,不允许其他的总线控制设备申请使用系统总线。

108 中断向量表(IVT) 存放各类中断的中断服务程序的入口地址CS:IP(段CS和偏移IP)——中断向量
表的地址位于内存的00000H~003FFH,大小为1KB,共256个中断向量(中断向量表) 每个中断向量占用4 Bytes,低字为段内偏移IP,高字为段基址CS 根据中断类型号n获得中断服务程序入口的方法: (n为中断类型号) 中断向量在IVT中的存放地址=4×n (中断向量地址)

109 中断向量表的初始化 初始化——将中断服务程序的入口地址放入向量表
例:中断类型码n为48H的中断处理子程序的名字为int48h,编写程序段将该中断处理子程序的入口地址(中断向量)放入中断向量表。 高8位 低8位

110 中断向量表的初始化 CLI PUSH DS MOV AX,0; 也可XOR AX,AX MOV DS,AX MOV SI,48H*4
MOV AX,OFFSET int48h MOV [SI],AX MOV AX,SEG int48h MOV [SI+2],AX POP DS STI RETI 48H*4 Int48h

111 8086/8088 CPU的中断响应过程 内部中断响应过程 : 无INTA周期 中断类型码固定(0、1、3、4)或由指令给出(n)
响应过程主要步骤: ① PUSH FLAGS ② IF=TF=0(关可屏蔽中断和单步中断) ③ PUSH CS ④ PUSH IP ⑤ 取中断向量送入IP’和CS’ PUSH CS/IP/FLAGS JMP CS’:IP’

112 中断响应过程(续) 外部中断响应过程 非屏蔽中断NMI,中断类型码为固定(2) 与内部中断响应过程类似 可屏蔽中断INTR
① INTA(1)PIC进行优先级排队判优处理 ② INTA(2)PIC把中断类型码n放到DB上,CPU读入 ③ PUSH FLAG ④ IF=TF=0(关可屏蔽中断和单步中断) ⑤ PUSH CS ⑥ PUSH IP ⑦ 取中断向量送入IP’和CS’ 与内部中断一样

113 8088/8086系统中各中断的优先级 优先级从高到低顺序如下: 内部中断 (除单步中断外) NMI INTR 单步中断

114 8086/8088的中断处理流程 取指令 FLAG入栈 TEMP←TF 执行指令 IF=TF=0 N CS、IP入栈 执行完否?
计算向量表地址 Y 内部中断? Y 类型码=0~255 高字→CS 低字→IP N 转入中断服务程序 NMI? Y 类型码=2 NMI? Y N N Y INTR? Y Y 中断响应, 读回类型码 TEMP=1? IF=1? N N N 执行中断服务程序 TF=1? Y 类型码=1 恢复CS和IP N 恢复FLAGS IRET指令的操作 返回被中断的程序

115 NMI、INTR、单步和除法错中断同时产生时的中断处理过程
TF=IF=1 NMI、INTR、单步和除法错中断同时产生时的中断处理过程 INTR DIV NMI 除法错 PUSH FLAGS、CS、IP CLEAR IF & TF,中断入口→CS:IP NMI(IF=TF = 0) PUSH FLAGS、CS、IP CLEAR IF & TF,中断入口→CS:IP NMI中断处理程序 (IF=TF = 0) 返回 除法错中断处理程序 (IF=TF = 1) 返回 执行下条指令 INTR仍然有效 识别出INTR INTR PUSH FLAGS、CS、IP CLEAR IF & TF,中断入口→CS:IP 单步 (IF=TF = 0) PUSH FLAGS、CS、IP CLEAR IF & TF,中断入口→CS:IP 单步中断处理程序 (IF、TF = 0) 返回 INTR中断处理程序 (IF、TF = 1) 返回 继续单步执行程序

116 6.5 可编程中断控制器8259A 8259A PIC,Programmable Interrupt Controller
作用:CPU大门的“看门人” 可对8个中断源实现优先级控制 (单个管8个) 可扩展至对64个中断源实现优先级控制(9个管64个) 可编程设置不同工作方式(多套管理方案) 根据中断源向x86提供不同中断类型码n(来访者1人1号) 引脚分配及功能见右图 8259A

117 8259A内部结构

118 8259A逻辑结构及连接

119 6.5.1.8259A的内部结构 8259A的内部结构(教材 p276 图6.27) 中断请求寄存器IRR
保存从IR0~IR7来的中断请求信号,某位=1表示对应的IRi有中断请求 中断服务寄存器ISR 保存所有正在服务的中断源,某位=1表示对应的IRi中断正在被服务 中断屏蔽寄存器IMR 存放中断屏蔽字,某位=1表示对应的IRi输入被屏蔽 中断优先权判别电路 确定是否向CPU发出中断请求,中断响应时确定ISR的哪位应置位及把相应中断的类型码放到数据总线上

120 6.5.2 8259A的工作过程 8259A对中断请求的处理过程如下: 当某IRi有效时,IRR相应位置1
若有效的IRi未被屏蔽,则向CPU发出中断请求INT 检测到第1个INTA信号后,置ISRi=1,IRRi=0 检测到第2个INTA信号后,把ISRi=1中最高优先级的中断类型码 n 放到DB上 若工作在AEOI方式,在第2个INTA结束时,使ISRi复位;否则由CPU发出EOI命令使ISRi复位

121 6.5.3 8259A的工作方式 8259A的工作方式有如下几类: 中断优先方式与中断嵌套 中断结束处理方式 屏蔽中断源的方式 中断触发方式
级联工作方式

122 中断优先方式与中断嵌套 中断优先方式 两类优先级控制方式:固定优先级和循环优先级 固定优先级方式 所有中断请求IRi的中断优先级固定不变
优先级排列顺序可编程改变 加电后8259A的默认方式,默认优先级顺序从高到低为IR0~IR7 默认优先级 优先级可编程改变 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 7 6 5 4 3 2 1 优先级 3 2 1 7 6 5 4 最低级 最高级 最高级 最低级

123 中断优先方式与中断嵌套(续) 循环优先级方式 中断源轮流处于最高优先级,即自动中断优先级循环 初始优先级顺序可用编程改变
某中断请求IRi被处理后,其优先级别自动降为最低,原来比它低一级的中断上升为最高级 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 ISR 内容 1 1 1 ISRi 7 6 5 4 3 2 1 2 1 7 6 5 4 3 最低级 最高级 最高级 最低级 IR4的服务结束以前 IR4的服务结束以后

124 8259A内部中断优先级电路

125 优先级的管理方式

126 中断优先方式与中断嵌套(续) 中断嵌套方式 在中断处理过程中允许被更高优先级的事件所中断称为中断嵌套。8259A有两种中断嵌套方式:
普通全嵌套方式(默认方式) 一中断正被处理时,只有更高优先级的事件可以打断当前的中断处理过程而被服务。 特殊全嵌套方式 一中断正被处理时,允许同级或更高优先级的事件可以打断当前的中断处理过程而被服务。 注: 特殊全嵌套仅用于多个8259A级连时的主8259A, 而不能用于从属8259A或单8259A系统。

127 一般全嵌套方式与特殊全嵌套方式的区别 B. C. A. E. D. 主8259A 从8259A 假定IR3发生中断,并获得服务
一般嵌套方式: 从片的INT被主片封锁,故更高级别的IR0-IR2中断也无法得到响应 主8259A 从8259A IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7 A. 假定IR3发生中断,并获得服务 去CPU INT INT E. 特殊嵌套方式: 因主片不封锁从片的INT,故级别高的IR0-IR2中断可以得到响应。(但IR3-IR7仍被本从片封锁) D. 特殊嵌套方式:IR4的中断被服务时,只封锁IR5-IR7。

128 中断结束处理方式 当某一IRi中断被服务时,ISR中的相应位ISRi=1。当服务结束后,则必须清零该ISRi位。使ISRi=0是通过向8259A发出中断结束命令(EOI命令)实现的。 三种EOI命令 自动EOI(AEOI) ——(自动EOI方式) 非指定EOI(NSEOI)——(正常EOI方式) 指定EOI(SEOI) ——(特殊EOI方式)

129 AEOI:在第2个INTA结束时,由8259A使ISRi自动复位;
SEOI:由CPU发出一条SEOI命令,该EOI命令中指出了所要复位的ISR的位号。 用于特殊屏蔽方式 NSEOI:由CPU发出正常EOI命令,该EOI命令使ISRi=1的位中优先级最高的那一位复位。 用于普通全嵌套方式

130 特殊全嵌套方式下的EOI处理 只有当从PIC的中断全部处理完后,才能向主PIC发EOI命令 中断服务程序 ┇ 向从PIC发EOI命令
读从PIC的ISR 全0? N Y 向主PIC发EOI命令 恢复现场 IRET

131 屏蔽中断源的方式 IMR屏蔽字决定了允许或禁止某位IRi所对应的中断:IMi=1 禁止, IMi=0 允许。 特殊屏蔽方式:
提供了允许较低优先级的中断能够得到响应的特殊手段。 原理:假定当前正在处理IR6,先进入特殊屏蔽方式,然后设置IM6=1。这时,除IR6外的所有中断请求均能得到响应。 特殊屏蔽方式中只能用SEOI命令结束中断。

132 特殊屏蔽例: 。 ;IR4中断处理程序 CLI MOV AL,68H ;OCW3:0 1 1 0 1 0 0 0
OUT 0C0H,AL ;设置特殊屏蔽方式 IN AL,0C2H OR AL,10H ;屏蔽IR4 OUT 0C2H,AL STI 。 ;IR7请求,响应,返回 CLI ;为设命令字 IN AL,0C2H ;读出屏蔽字 AND AL,0EFH ;清除IMR4 OUT C2H,AL MOV AL,48H ;OCW3: OUT C0H,AL ;取消特殊屏蔽 。 ;继续IR4中断服务 MOV AL,20H ;OCW2: (EOI) OUT C0,AL IRET 

133 中断触发方式 边沿触发 电平触发 在第1个INTA结束前,IRi必须保持高电平 IRi出现上升沿表示有中断请求
应注意及时撤除高电平,否则可能引起重复响应 在第1个INTA结束前,IRi必须保持高电平

134 级联工作方式 单片8259A可支持8个中断源; 采用多片8259A级连,可最多支持64个中断源。n片8259A可支持7n+1个中断源;
CAS0-CAS2 SP/EN IRi INT

135 最多1主8从 64个中断源 级连电路连接方法 主片:SP/EN接+5V;从片:SP/EN接地。

136 6.5.4 8259A的编程使用 8259A的控制命令分为: 初始化命令字ICW 操作命令字OCW ICW1~ICW4
OCW1~OCW3 向8259A写入OCW的过程称为操作方式编程

137 8259A内部寄存器的寻址方法 需要CS、A0、RD、WR和D4、D3的配合 内部寄存器的访问方法如下表:
读写操作 1 写入OCW2 写入OCW3 写入ICW1 写入ICW2,ICW3,ICW4,OCW1(顺序写入) x 读出IRR、ISR 读出IMR 由表可见,CPU用A0寻址82C59A的端口共有2个:1个为偶地址,1个为奇地址

138 8259A的初始化顺序 8259的初始化流程如图 注意次序不可颠倒 写ICW1 写ICW2 N Y 写ICW3 N Y 写ICW4 级连?

139 送ICW1,是否用ICW4 用ICW2设中断类型码 级连方式? 设ICW3 需要ICW4? 设ICW4 准备接受中断 Y N

140 8259A的控制命令字 初始化8259A必须从ICW1开始 写ICW1意味着重新初始化8259A 写入ICW1后,8259A的状态如下:
清除ISR和IMR(全0); 将中断优先级设成初始状态:IR0最高,IR7最低; 设定为一般屏蔽方式; 采用非自动中断结束方式; 状态读出逻辑预置为读IRR。

141 ICW1——初始化字 LTIM: 触发方式 SNGL: 级连控制 IC4: ICW4控制
A0 D7 D D D4 D3 D2 D1 D0 0 x x x 1 LTIM x SNGL IC4 LTIM: 触发方式 =1 高电平触发 =0 上升沿触发 SNGL: 级连控制 =1 单片 =0 级连 IC4: ICW4控制 =1 要写ICW4 =0 不写ICW4(默认ICW4为全0)

142 例: 某8086微机系统中,使用单片82C59A,中断请求信号为上升沿触发,需要设置ICW4,端口地址为20H和21H,则其初始化命令字ICW1应为:00010011=13H,设置ICW1的指令为:
MOV AL,13H OUT 20H,AL

143 ICW2——中断向量码 T7~T3: 中断向量码的高5位 T2~T0: 最低3位为中断源的序号IRn 000~111分别对应IR0~IR7
A0 D7 D D D4 D3 D2 D1 D0 1 T T6 T5 T4 T3 x x x T7~T3: 中断向量码的高5位 T2~T0: 最低3位为中断源的序号IRn 000~111分别对应IR0~IR7 由8259A根据中断源的序号自动填入 例如: 若ICW2命令字为48H,则IR0的中断向量码为48H,IR7的中断向量码为4FH,等等。

144 例: 8259A采用前沿触发,单片使用, 需要ICW4, 假设IR0的类型码为08H,试确定ICW1,ICW2.
8259A端口地址: 20H,21H ICW1= B ;前沿触发,单片,需ICW4 ICW2= B MOV AL, B OUT H,AL MOV AL, B OUT H,AL

145 ICW3——级连控制字 主片的级联控制字 从片的级联控制字 Si=1 对应IRi线上连接了从片
A0 D7 D D D4 D3 D2 D1 D0 1 S S6 S5 S4 S3 S2 S1 S0 主片的级联控制字 Si=1 对应IRi线上连接了从片 A0 D7 D D D4 D3 D2 D1 D ID2 ID1 ID0 从片的级联控制字 ID2~ID0 标识码,说明本从片连接到主片的哪个IR引脚上。 000~111分别对应IR0~IR7。

146 ICW3——级连控制字(续) ICW3必须与主从片的连接关系一致:
例如,主片的IR4与从片的INT线连接,则主片的ICW3=10H,从片的ICW3=04H。 中断响应时,主片通过级连线CAS2-CAS0送出被允许中断的从片标识码,各从片用自己的ICW3与CAS2-CAS0比较,二者一致的从片才可发送中断向量码。

147 例: 假设主片8259A的IR3和IR6接了2个从片. 主片端口地址: 20H,21H; 1#从片端口地:A0H,A1H 试设置ICW3. 主片: ICW3= B =48H 从片1#: ICW3= =03H 从片2#: ICW3= =06H 主片ICW3的初始化程序段: MOV AL,48H OUT H,AL 1#从片ICW3的初始化: MOV AL,03H OUT A1H,AL

148 ICW4——中断结束方式字 SFNM: 特殊全嵌套 AEOI: 自动EOI BUF: 缓冲方式 M/S: 主/从缓冲选择
A0 D7 D D5 D4 D3 D2 D1 D SFNM BUF M/S AEOI 1 SFNM: 特殊全嵌套 1 特殊全嵌套方式 0 一般全嵌套方式 AEOI: 自动EOI 1 自动EOI方式 0 非自动EOI方式 BUF: 缓冲方式 M/S: 主/从缓冲选择 BUF M/S 缓冲方式/主PIC 缓冲方式/从PIC x 非缓冲方式/正常

149 初始化编程举例 例: 某8086微机系统中有一片82C59A,中断请求信号为电平触发,中断类型码为40H~47H,中断优先级管理采用普通全嵌套方式,中断结束方式采用自动结束方式,系统中未使用数据缓冲器,系统分配给82C59A的端口地址为20H和21H,试对该82C59A进行初始化编程。

150 分析:由于系统中使用单片82C59A,所以初始化时不需要ICW3,本例中82C59A要求工作在非缓冲方式,故在硬件上将SP. /EN
分析:由于系统中使用单片82C59A,所以初始化时不需要ICW3,本例中82C59A要求工作在非缓冲方式,故在硬件上将SP*/EN*接+5V,ICW4中的M/S*位无意义,可设置为0  对82C59A的初始化程序如下: MOV AL, B ;设置ICW1初始化命令字 OUT 20H,AL ;将ICW1输出到偶地址端口 MOV AL, B ;ICW2中断类型号基值 OUT 21H,AL ;将ICW2送入奇地址端口 MOV AL, B ;ICW4 OUT 21H,AL ;将ICW4送入奇地址瑞口

151 8259A的操作命令字OCW OCW用于设置8259的工作状态 在初始化后写入 OCW的写入顺序可任意 写入地址要求:
OCW1必须写入奇地址端口(A0=1) OCW2,OCW3必须写入偶地址端口(A0=0)

152 OCW1——中断屏蔽字 Mi=1 中断请求线IRi被屏蔽(不允许中断) =0 允许该IRi中断 OCW1将写入IMR寄存器。
A0 D7 D D D4 D3 D2 D1 D0 1 M M6 M5 M4 M3 M2 M1 M0 Mi=1 中断请求线IRi被屏蔽(不允许中断) =0 允许该IRi中断 OCW1将写入IMR寄存器。 A0=1时读OCW1可读出设置的IMR内容。

153 OCW2——中断结束和优先级循环 A0 D7 D6 D5 D4 D3 D2 D1 D0 0 R SL EOI 0 0 L2 L1 L0
非指定EOI 命令(NSEOI),全嵌套方式 指定EOI 命令(SEOI),全嵌套方式,按L2-L0编码复位ISR NSEOI 命令,优先级自动循环 自动EOI,设置优先级自动循环 自动EOI,取消优先级自动循环(固定优先级) SEOI 命令,按L2-L0编码循环优先级(L2-L0设为最低优先级) 按L2-L0编码循环优先级(L2-L0设为最低优先级)

154 OCW3——屏蔽方式和读出控制字 A0 D7 D6 D5 D4 D3 D2 D1 D0 0 0 ESMM SMM 0 1 P RR RIS
特殊屏蔽方式置位 特殊屏蔽方式复位 x 非特殊屏蔽方式 P(Polling): =1 查询方式 =0 非查询方式 RR: 读寄存器 RIS: ISR/IRR选择 RR RIS 读ISR 读IRR x 无效

155 OCW3(续) 查询方式允许8259A不工作于中断方式,而是以查询方式工作。
CPU先写一个D2=1的OCW3,再对同一地址读入,即可得到如下状态字节: I x x x x R2 R1 R0 I=1表示有中断请求,中断请求号为R2-R0 此查询步骤可反复执行,以响应多个同时发生 的中断。 读IRR/ISR:写入此命令后,随后再对同一地址读,即可得到IRR或ISR的内容。

156 8259A编程举例 按以下要求初始化8259A: 根据要求,各初始化参数及工作参数如下: 接口地址为20H和21H;
中断为上升沿触发;单片8259A;不写ICW4; 与IR0-IR3对应的中断向量码为08H-0BH; IR4-IR7不使用。 根据要求,各初始化参数及工作参数如下: ICW1 = = 12H ICW2 = 08H 中断向量码 OCW1 = = 0F0H 中断屏蔽字

157 8259A编程举例(续) 初始化程序如下: INIT8259A: MOV DX,20H ;A0=0,写ICW1
MOV AL,12H ;上升沿触发,单片,不写ICW4 OUT DX,AL MOV DX,21H ;A0=1,写ICW2,OCW1 MOV AL,08H ;ICW2 MOV AL,0F0H ;OCW1:屏蔽IR4-IR7

158 6.4.5 PC机中断程序设计 1)主程序 保存原中断向量 设置自己的中断向量 初始化堆栈指针
设置8259A的中断屏蔽字(其他的已由操作系统设置) STI 2)中断服务程序 保存所用到的寄存器内容 中断服务程序主体 恢复进入时保存的寄存器内容 发EOI命令(必要时可提前) STI(必要时可提前) IRET

159 中断程序举例 PC机中主8259A的I/O地址为20H和21H,中断向量码为08H; 中断请求从IR6引入,故中断类型号为0EH;
主程序如下: ;保存原来的中断向量 mov ah,35h mov al,0eh ;中断类型码 int 21h ;取原中断向量(在es:bx中) mov save_ip,bx ;保存原来的中断向量 mov save_cs,es

160 ;设置自己的中断向量 push ds mov dx,offset my_int mov ax,seg my_int mov ds,ax ;DS:DX的内容为my_int的首地址 mov ah,25h mov al,0eh int 21h ;设置自己的中断向量 pop ds ;初始化堆栈指针 mov sp,my_stack_top ;设置8259A的中断屏蔽字 in al,21h and al, b ;开放IR6中断 out 21h,al sti …… <其他代码放在这里>

161 子程序如下: my_int proc far pusha … <中断服务程序主体> popa
mov al,20h ;EOI命令, B out 20h,al ;写OCW2 sti iret my_int endp

162 教学重点 8237A的工作方式 8237A寄存器组的作用 8237A寄存器组的编程
第6.5节 DMA控制接口 教学重点 8237A的工作方式 8237A寄存器组的作用 8237A寄存器组的编程

163 1 DMA控制器8237A 每个8237A芯片有4个DMA通道,就是有4个DMA控制器 每个DMA通道具有不同的优先权
一次传送的最大长度可达64KB 多个8237A芯片可以级连,扩展通道数

164 1.1 8237A的内部结构和引脚 内部结构和外部引脚都相对比较复杂 应用观点,内部主要由两类寄存器组成 首先分类展开外部引脚 通道寄存器
控制和状态寄存器 首先分类展开外部引脚

165

166

167

168

169 选择 页寄存器 DACK3 DACK2 DACK1 A19~A16 DACK0 A15~A0 DMAC

170 8237的初始化 地址低字节 总清 地址高字节 字数低字节 字数高字节 方式字 命令字 屏蔽字 其他通道参数

171 (1) 请求与响应信号 DREQ0~DREQ3:DMA通道请求。当外设需要请求DMA服务时,将DREQ信号置成有效电平,并要保持到产生响应信号。 HRQ:总线请求。8237A输出有效的HRQ高电平,向CPU申请使用系统总线。 HLDA:总线响应。8237A接受来自CPU的响应信号HLDA,取得了总线的控制权。 DACK0~DACK3:DMA通道响应。8237A使请求服务的通道产生相应的DMA响应信号。

172 (2) DMA传送控制信号 A0~A7:地址线。输出低8位存储器地址。
DB0~DB7:数据线。输出高8位存储器地址;存贮器与存贮器的传送期间,用于数据传送。 ADSTB:地址选通。DMA传送开始时,输出高有效,把在DB0~DB7上输出的高8位地址锁存在外部锁存器中。 AEN:地址允许。输出高有效,将锁存的高8位地址送入系统总线,与芯片此时输出的低8位地址组成16位存储器地址。

173 (2) DMA传送控制信号(续) MEMR*:存储器读。有效将数据从存储器读出 MEMW*:存储器写。有效将数据写入存储器
IOR*:I/O读。有效将数据从外设读出 IOW*:I/O。有效将数据写入外设 READY:准备好。DMA传送的S3下降沿检测到为低时,插入等待状态Sw,直到READY为高才进入第4个时钟周期S4。 EOP*:过程结束。DMA传送过程结束,输出一个低有效脉冲。外部输入低脉冲信号,则终结DMA传送。

174 (3) 处理器接口信号 DB0~DB7:数据线。用于8237A与微处理器进行数据交换。 A0~A3:地址线。用以选择芯片内部寄存器。
CS*:片选。低有效时,微处理器与8237A通过数据线通信,主要完成对8237A的编程。 IOR*:I/O读。读取8237A内部寄存器。 IOW*:I/O写。写入8237A内部寄存器。 CLK:时钟。控制芯片内部操作和数据传输。 RESET:复位。使8237A处于初始状态。

175 8237A的两种工作状态 8237A具有两种工作状态 空闲周期: 作为接口电路,受CPU控制的工作状态 有效周期:
作为DMAC控制DMA传送的工作状态 于是,引脚分成两种作用

176 8237A引脚的两种作用 与CPU连接 (空闲周期)的引脚 与外设连接 (有效周期)的引脚 CLK、RESET
A0~A3、CS*、DB0~DB7 IOR*、IOW* HRQ、HLDA AEN、ADSTB、READY、EOP* A0~A7、DB0~DB7 IOR*、IOW*、MEMR*、MEMW* DREQ0~DREQ3、DACK0~DACK3

177 1.2 8237A的工作时序·空闲周期 进入有效周期 8237A的任一通道都没有DMA请求时 8237A由微处理器控制作为一个接口芯片
CPU可对8237A编程,或从8237A读取状态 8237A采样CS*选片信号,该信号有效,CPU就要对8237A进行读/写操作 8237A还采样通道的请求输入信号DREQ,该信号有效,就进入有效周期 进入有效周期

178 1.2 8237A的工作时序·有效周期 8237A采样到外设有DMA请求,就脱离空闲周期进入有效周期
DMA传送借用系统总线完成,其控制信号以及工作时序类似CPU总线周期 进入DMA传送时序

179 DMA传送时序 S1状态——输出16位存储器地址 AEN输出高电平,表示DMA传送 S2状态——输出DMA响应信号和控制信号
DB0~DB7 DACK ADSTB HRQ DREQ CLK S1 S0 Si S3 S2 S4 HLDA AEN A0~A7 MEMR(IOR) IOW(MEMW) S1状态——输出16位存储器地址 AEN输出高电平,表示DMA传送 S2状态——输出DMA响应信号和控制信号 DMA读:MEMR*和IOW*有效 DMA写:IOR*和MEMW*有效 S3和Sw状态——检测数据传送是否能够完成,决定是否插入等待状态Sw S4状态——完成数据传送 DMA传送时序

180 1.3 8237A的工作方式 DMA传送方式 DMA传送类型 存储器到存储器的传送 · 单字节传送方式 · 数据块传送方式
· 单字节传送方式 · 数据块传送方式 · 请求传送方式 · 级连方式 DMA传送类型 · DMA读 · DMA写 · DMA检验 存储器到存储器的传送

181 DMA传送方式 (1) DMA传送-单字节方式 每次DMA传送时仅传送一个字节
传送一个字节之后,字节数寄存器减1,地址寄存器加1或减1,HRQ变为无效 8237A释放系统总线,将控制权还给CPU 若传送后使字节数从0减到FFFFH,则终结DMA传送或重新初始化 特点: 一次传送一个字节,效率略低 DMA传送之间CPU有机会重新获取总线控制权

182 (2) DMA传送-数据块方式 由DREQ启动就连续地传送数据,直到字节数寄存器从0减到FFFFH终止计数,或由外部输入有效信号终结DMA传送 DREQ只需维持有效到DACK有效 特点: 一次请求传送一个数据块,效率高 整个DMA传送期间CPU长时间无法控制总线(无法响应其他DMA请求、无法处理中断等)

183 (3) DMA传送-请求方式 DREQ信号有效就连续传送数据 DREQ信号无效,DMA传送被暂时中止,8237A释放总线,CPU可继续操作
如果字节数寄存器从0减到FFFFH,或者由外部送来一个有效的信号,将终止计数 特点: DMA操作可由外设利用DREQ信号控制传送的过程

184 (4) DMA传送-级连方式 用于通过多个8237A级连以扩展通道 第二级的HRQ和HLDA信号连到第一级某个通道的DREQ和DACK上
第二级芯片的优先权等级与所连通道的优先权相对应 第一级只起优先权网络的作用,实际的操作由第二级芯片完成 还可由第二级扩展到第三级等

185 DMA传送类型 DMA读——把数据由存储器传送到外设 DMA写——把外设输入的数据写入存储器 DMA检验——空操作
由MEMR*有效从存储器读出数据,由IOW*有效把这一数据写入外设 DMA写——把外设输入的数据写入存储器 由IOR*有效从外设输入数据,由MEMW*有效把这一数据写入存储器。 DMA检验——空操作 8237A不进行任何检验 外设可以进行DMA校验 存储器和I/O控制线保持无效,不进行传送

186 存储器到存储器的传送 固定使用通道0和通道1 通道0的地址寄存器存源区地址
通道1的地址寄存器存目的区地址,通道1的字节数寄存器存传送的字节数 传送由设置通道0的软件请求启动 每传送一字节需用8个时钟周期 前4个时钟周期用通道0地址寄存器的地址从源区读数据送入8237A的临时寄存器 后4个时钟周期用通道1地址寄存器的地址把临时寄存器中的数据写入目的区

187 DMA通道的优先权方式 固定优先权方式——优先权固定 循环优先权方式——优先权循环变化 DMA传送不存在嵌套
通道0优先权最高,通道1其次,通道2再次,通道3最低 循环优先权方式——优先权循环变化 最近一次服务的通道在下次循环中变成最低优先权,其他通道依次轮流相应的优先权 DMA传送不存在嵌套

188 自动初始化方式 每当DMA过程结束信号EOP*产生时(不论是内部终止计数还是外部输入该信号)

189 1.4 8237A的寄存器 8237A共有10种内部寄存器,对它们的操作有时需要配合3个软件命令 8237A的“软件命令”
不需要通过数据总线写入控制字 直接由地址和控制信号译码实现 全部都用地址A0~A3区分

190 (1) 现行地址寄存器 保持DMA传送的当前地址值 每次传送后该寄存器的值自动加1或减1 这个寄存器的值可由CPU写入和读出 基地址寄存器
(1) 现行地址寄存器 基地址寄存器 存放初始值 保持DMA传送的当前地址值 每次传送后该寄存器的值自动加1或减1 这个寄存器的值可由CPU写入和读出

191 (2) 现行字节数寄存器 保持DMA传送的剩余字节数 每次传送后,该寄存器的值减1 这个寄存器的值可由CPU写入和读出
(2) 现行字节数寄存器 基字节数寄存器 存放初始值 保持DMA传送的剩余字节数 每次传送后,该寄存器的值减1 这个寄存器的值可由CPU写入和读出 该寄存器的值减至0,再减1(从0减到FFFFH)时,终止计数 传送N个字节,初始值为N-1

192 读写通道寄存器 CPU与8237A之间通过8位数据总线交换信息,8237A的通道寄存器均为16位

193 高/低触发器 该触发器为0,控制读写低字节 该触发器为1,控制读写高字节 软、硬件复位后,触发器为0
每次读写通道寄存器,自动改变触发器状态。如果对16位寄存器的操作用两次连续读写进行,就不必清除这个触发器 清除高/低触发器软件命令(A3A2A1A0=1100)将使高/低触发器清零

194 3个软件命令 清除高/低触发器软件命令 主清除命令 清屏蔽寄存器命令 A3A2A1A0=1100,使高/低触发器清零
还使命令、状态、请求、临时寄存器清零 使屏蔽寄存器置为全1(禁止DMA请求) 主清除命令与硬件的RESET信号具有相同的功能 清屏蔽寄存器命令 A3A2A1A0=1110,使4个屏蔽位都清零(允许DMA请求)

195 模式寄存器 存放相应通道的方式控制字 选择某个DMA通道的工作方式 其中用最低2位选择哪个DMA通道 请看方式字的格式

196 方式字格式 00 请求模式 01 单字节模式 10 数据块模式 11 级联模式 0 地址增量(加1) 1 地址减量(减1)
D7 D6 D5 D4 D3 D2 D1 D0 00 请求模式 01 单字节模式 10 数据块模式 11 级联模式 0 地址增量(加1) 1 地址减量(减1) 0 禁止自动初始化 1 允许自动初始化 00 DMA校验 01 DMA写 10 DMA读 11 非法 ×× 若D7D6=11 00 通道0 01 通道1 10 通道2 11 通道3

197 命令寄存器 请看命令字的格式 存放8237A的命令字 设置8237A芯片的操作方式 影响每个DMA通道 复位时使命令寄存器清零
设置D2=1才使8237A可以作为DMA控制器 请看命令字的格式

198 命令字格式 0 DACK低有效 1 DACK高有效 0 DREQ高有效 1 DREQ低有效 0 正常时序 1 压缩时序 × 若D0=1
0 允许DMAC工作 1 禁止DMAC工作 0 滞后写 1 扩展写 × 若D3=1 0 固定优先权 1 循环优先权 0 允许通道0地址改变 1 禁止通道0地址改变 × 若D0=0 0 禁止存储器之间传送 1 允许存储器之间传送

199 请求寄存器 存放软件DMA请求状态 除硬件DMA请求外,当工作在数据块传送方式时也可以通过软件发出DMA请求
若是存贮器到存贮器传送,则必须由软件请求启动通道0 请看请求字的格式

200 请求字格式 D7 D6 D5 D4 D3 D2 D1 D0 任意 0 复位 1 置位 00 通道0 01 通道1 10 通道2 11 通道3

201 屏蔽寄存器 请看屏蔽字的格式 控制外设硬件DMA请求是否被响应(为0允许),各个通道互相独立。3种方法: 复位使4个通道全置于屏蔽状态
清屏蔽寄存器命令使4个屏蔽位都清零(允许) 复位使4个通道全置于屏蔽状态 当一个通道的DMA过程结束,如果不是工作在自动初始化方式,则这一通道的屏蔽位置位,必须再次编程为允许,才能进行下次DMA传送 请看屏蔽字的格式

202 单通道屏蔽字格式 任意 0 清屏蔽位 1 置屏蔽位 00 通道0 01 通道1 10 通道2 11 通道3 D7 D6 D5 D4 D3

203 Di=0 清通道I屏蔽位Di=1 置通道I屏蔽位
主屏蔽字格式 D7 D6 D5 D4 D3 D2 D1 D0 任意 Di=0 清通道I屏蔽位Di=1 置通道I屏蔽位

204 状态寄存器 可由CPU读取 低4位反映读命令这个瞬间每个通道是否产生TC(为1,表示该通道传送结束)
高4位反映每个通道的DMA请求情况(为1,表示该通道有请求) 状态位在复位或被读出后,均被清零

205 临时寄存器 在存储器到存储器的传送方式下,临时寄存器保存从源存储单元读出的数据,该数据又被写入到目的存储单元
传送完成,临时寄存器只会保留最后一个字节,可由CPU读出 复位使临时寄存器内容为零

206 1.5 8237A的编程 8327A芯片的初始化编程:只要写入命令寄存器 命令字影响所有4个通道的操作 可先输出主清除命令,进行软件复位
然后写入命令字 命令字影响所有4个通道的操作

207 1.5 8237A的编程(续1) 请看实例 DMA通道的DMA传送编程:
将存储器起始地址写入地址寄存器(如果采用地址减量工作,则是结尾地址) 将本次DMA传送的数据个数写入字节数寄存器(个数要减1) 确定通道的工作方式,写入方式寄存器 写入屏蔽寄存器复位通道屏蔽位,允许DMA请求 请看实例

208 DMA通道0的刷新编程 IBM PC/XT out 0dh,al ;DMAC主清除命令 mov al,0
out 08,al ;DMAC命令字 out 00,al ;通道0的地址寄存器低字节 out 00,al ;通道0的地址寄存器高字节 mov al,0ffh out 01,al ;通道0的字节数寄存器低字节 out 01,al ;通道0的字节数寄存器高字节 mov al,58h out 0bh,al ;通道0模式字 out 0ah,al ;通道0屏蔽字 IBM PC/XT

209 1.5 8237A的编程(续2) 两种方法反映DMA过程结束(即终止计数、发生TC): 应用程序处理DMA传送过程结束: 状态寄存器的低4位
信号(需配合DACK响应信号确定通道) 应用程序处理DMA传送过程结束: 采用软件查询状态字 采用硬件中断在中断服务程序处理

210 A的应用 8237A在PC系列机的使用情况 DMA写传送 DMA设定子程序

211 2.1 8237A在IBM PC系列机上的应用 IBM PC/XT机使用一片8237A IBM PC/AT机采用两片8237A
通道0:动态存贮器DRAM刷新 通道1:用户使用或SDLC卡 通道2:内存与软盘的高速数据交换 通道3:内存与硬盘的高速数据交换 IBM PC/AT机采用两片8237A DMAC1包含通道0~3,支持8位数据传送 DMAC2组成通道4~7,通道5~7支持16位数据传送,通道4用于级连

212 (1) 8237A的初始化 8237A初始化写入命令字为0,确定了:
DREQ高电平有效、DACK低电平有效,固定优先权(依次为通道0、1……7) 不进行存储器到存储器的数据传输 PC机用DMA控制电路进行刷新,所以DMA传送不能长时间占用总线(不应超过15s),一般只能使用单字节传送方式 在PC系列机上,用户如果使用DMA通道,要注意遵从上述系统要求。除了要禁止8237A工作,用户通常不必操作命令寄存器

213 (2) 高位地址的形成 页面寄存器不会自动增减量 高位地址在DMA传送过程中不改变 DMA传送时的高位地址由“页面寄存器”提供
(2) 高位地址的形成 DMA传送时的高位地址由“页面寄存器”提供 页面寄存器由CPU的输出指令实现写入 DMAC1的通道0~通道3:8237A提供系统A0~A15低16位地址,页面寄存器输出系统A16~A23高8位地址 DMAC2的通道5~通道7:8237A提供系统A1~A16的16位地址,而系统A0被强迫为逻辑0,页面寄存器仅输出高7位地址A17~A23 页面寄存器不会自动增减量 高位地址在DMA传送过程中不改变

214 2.2 DMA写传送 CLK D D0~D7 Q +5V 外设数据 外设DMA请求 74LS374 74LS74 RESET DRQ1
DACK1 IOR OE R S

215 通道1工作方式 DMA写传送 mov al,45h ;通道1方式字: ;单字节写传送,地址增量,非自动初始化 out 0bh,al
nop ;延时 nop out 0ch,al ;清高/低触发器命令 DMA写传送

216 通道1起始地址 DMA写传送 mov al,0 out 02h,al ;写入低8位地址到地址寄存器 mov al,50h

217 通道1传送字节数 DMA写传送 mov ax,2048-1 ;AX←传送字节数减1 out 03h,al ;送字节数低8位到字节数寄存器
mov al,ah out 03h,al ;送字节数高8位到字节数寄存器 mov al,01 out 0ah,al ;单通道屏蔽字:允许通道1的DMA请求 …… ;其他工作 DMA写传送

218 通道1传送结束判断 DMA写传送 DMA传送过程结束的判断: 软件查询方式 dmalp: in al,08h ;读状态寄存器
and al,02h ;判断通道1是否传送结束 jz dmalp ;没有结束,则循环等待 …… ;传送结束,处理转换数据 DMA传送过程结束的判断: 软件查询方式 DMA写传送

219 2.3 DMA设定子程序 系统ROM-BIOS的DMA设定子程序:DMA通道2传送编程 软盘的读写利用DMA通道2传送数据

220 通道2工作方式 DMA设定子程序 push cx ;保存CX cli ;关中断 out 0ch,al ;清高/低触发器命令
push ax ;延时 pop ax out 0bh,al ;将AL中的方式字写入通道2 DMA设定子程序

221 形成物理地址 DMA设定子程序 mov cl,4 rol ax,cl ;段地址左移4位 mov ch,al ;高位存入CH
mov ax,es mov cl,4 rol ax,cl ;段地址左移4位 mov ch,al ;高位存入CH and al,0f0h add ax,bx ;加段内偏移地址 jnc j33 inc ch ;物理地址形成 j33: push ax ;保存AX DMA设定子程序

222 通道2起始地址 DMA设定子程序 mov al,ah out 04h,al mov al,ch and al,0fh

223 计算传送字节数 DMA设定子程序 sub al,al ;AX为扇区数乘256 shr ax,1 ;AX为扇区数乘128
mov ah,dh ;取扇区数,计算传送的字节数 sub al,al ;AX为扇区数乘256 shr ax,1 ;AX为扇区数乘128 push ax ;暂存AX mov bx,6 call GET-PARM ;调用参数子程序 mov cl,ah ;出口参数:AH=0/1/2/3 pop ax ;恢复AX shl ax,cl ;AX为DMA传送的字节数 DMA设定子程序

224 通道2传送字节数 DMA设定子程序 dec ax ;字节数减1 push ax ;保存 out 05h,al ;写入字节数寄存器
mov al,ah out 05h,al sti ;开中断 DMA设定子程序

225 设置出口参数 DMA设定子程序 DMA传送过程结束的判断: 硬件中断方式 pop ax ;弹出物理地址的低16位地址
pop cx ;弹出传送的字节数 pop ax ;弹出物理地址的低16位地址 add ax,cx ;相加,根据结果建立标志CF pop cx ;恢复CX mov al,02h ;允许通道2进行DMA响应 out 0ah,al ret ;返回 DMA传送过程结束的判断: 硬件中断方式 DMA设定子程序

226 8237A教学要求 1. 了解8237A引脚特点和工作时序 2. 掌握8237A的各种工作方式 3. 理解8237A内部寄存器的作用和编程
4. 了解8237A在IBM PC系列机上的应用情况

227 CPU与外设间的数据传送方式总结 作业: p292 - 6.1, 6.2, 6.5, 6.7, 6.17(勘误) 无条件传送方式
CPU与外设(通过I/O接口)随时交换数据,不需要先打招呼(太熟悉了,握手过程省了)。 (2) 条件传送方式 ( 查询方式 ) 管理者CPU“盯住”某个外设(通过I/O接口)的管理方式。 (3) 中断传送方式 管理者CPU与外设各行其事,外设(通过I/O接口)做完事打断CPU,分配新任务。 (4) DMA传送方式 ---存贮器直接存取方式 M与外设(通过I/O接口)两被管理者不要CPU管了,直接联系(实际上还要新的管理者DMAC)。 4种传送方式 作业: p , 6.2, 6.5, 6.7, 6.17(勘误)


Download ppt "第六章 输入输出和中断技术 本章内容 基本概念 I/O端口的编址 中断 DMA* 输入输出的基本方法:无条件、查询、中断、DMA"

Similar presentations


Ads by Google