第六章 输入 / 输出方式与接口芯片

85
第第第 第第 / 第第第第第第第第第 第第 / 第第第第 第第第 第第第第第第第第 8259A 第第第 DMA 第 DMA 第第第 8237A 第第第 第第第第第 / 第第第 8254 第第第第 第第第 第第第第第 I/O 第第第第 8255A 第第第第 第第第 第第第第第第第第第第第第第第 16550 第第第 第第第第第第第 82380

Upload: lainey

Post on 17-Jan-2016

139 views

Category:

Documents


0 download

DESCRIPTION

第六章 输入 / 输出方式与接口芯片. 第一节 输入 / 输出方式. 第二节 中断及中断控制器 8259A. 第三节 DMA 及 DMA 控制器 8237A. 第四节 可编程定时 / 计数器 8254 及其应用. 第五节 可编程并行 I/O 接口芯片 8255A 及其应用. 第六节 串行通讯及可编程串行接口芯片 16550. 第七节 多功能接口芯片 82380. 第一节 输入 / 输出方式. 一、 I/O 接口. 第一节 输入 / 输出方式. 一、 I/O 接口. (1)I/O 接口的分类. 并行 I/O 接口和串行 I/O 接口. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第六章 输入 / 输出方式与接口芯片

第六章 输入 / 输出方式与接口芯片

第一节 输入 / 输出方式

第二节 中断及中断控制器 8259A

第三节 DMA及 DMA控制器 8237A

第四节 可编程定时 / 计数器 8254及其应用 第五节 可编程并行 I/O 接口芯片 8255A 及其应用 第六节 串行通讯及可编程串行接口芯片 16550

第七节 多功能接口芯片 82380

Page 2: 第六章 输入 / 输出方式与接口芯片

第一节 输入 / 输出方式 一、 I/O接口

Page 3: 第六章 输入 / 输出方式与接口芯片

第一节 输入 / 输出方式 一、 I/O接口

(1)I/O接口的分类

并行 I/O接口和串行 I/O接口 可编程接口和不可编程接口 专用接口和通用接口

(2)I/O接口的基本结构

主要包含有数据端口、状态端口和控制端口

Page 4: 第六章 输入 / 输出方式与接口芯片

(3)I/O端口的寻址方式

在一个微机系统中既有存储单元地址又有 I/O端口地址,根据两者地址的不同安排可分为以下两种寻址方式。

Page 5: 第六章 输入 / 输出方式与接口芯片

a. 存储器统一编址

在这种方式中,把 I/O端口作为存储器的一个单元来对待,即每个端口占用一个存储单元地址。此时,对 I/O端口操作可以使用全部的存储器指令,而不必另设专门的 I/O指令。由于该方式是将 I/O地址映射到了存储器地址空间,所以也称为存储器映像方式。

CPU

译码

存储器

外设

WE

D

RD

A

Page 6: 第六章 输入 / 输出方式与接口芯片

b. I/O 端口独立编址 在这种方式下, I/O端口与存储器各自独立编址,这样存储器地址和 I/O端口地址可以重叠。此时, CPU利用专门的 I/O指令来操作 I/O端口以防混淆。

Page 7: 第六章 输入 / 输出方式与接口芯片

二、 CPU与外设之间的数据传送方式

在 CPU与外设之间进行数据传送的方式有:无条件传送、查询传送、中断控制、直接存储器存取( Direct

Memory Access 简称 DMA)传送方式和 I/O处理机方式。(1) 无条件传送方式

适用于随时都是准备就绪的简单外设。接口电路中仅需数据端口。

Page 8: 第六章 输入 / 输出方式与接口芯片

(2) 查询方式 适用于 CPU与慢速的外设间的数据传送。

读外设状态

准备好?Y

数据输入 / 输出

N

查询式接口电路一般有:数据端口、状态端口、控制端口。

Page 9: 第六章 输入 / 输出方式与接口芯片

(3) 中断控制方式 适用对象同程序查询方式

该方式下,微机与外设并行工作,外设有请求时,微机对其进行服务,否则不对该外设进行任何操作。这样可大大提高 CPU的利用率。

Page 10: 第六章 输入 / 输出方式与接口芯片

(4)直接存储器存取( DMA)传送方式 在主存与外设间建立直接数据通道,进行数据传送。有传送过程不需 CPU干预,速度快的特点。其传送过程受专用硬件 DMAC控制。

(5)I/O 处理机传送方式 该方式中, I/O处理机用自己专门的指令和程序,负责输入输出。此时主 CPU将只负责“数据处理”工作。

Page 11: 第六章 输入 / 输出方式与接口芯片

第二节 中断及中断控制器8259A

一、中断的基本概念什么是中断 在 CPU正常运行程序时,由于内部或外部某个非预料事件

的发生,使 CPU 暂停正在运行的程序,而转去执行处理引起中断事件的程序,然后再返回被中断了的程序,继续执行。这个过程就是中断。

中断服务程序 1

中断服务程序 2

非预料事件 1

非预料事件 2

CPU 执行流程

Page 12: 第六章 输入 / 输出方式与接口芯片

中断源与中断向量表

中断源 能够引发 CPU 中断的信息源 , 称为中断源。 80X86 微机系统中最多允许有 256种中断源,其中中断源类型编号为 0 ~ 255。 按中断源的性质可以把中断分为内中断和外中断两类。

不可屏蔽中断 (2)

8086 CPU 中断逻辑

INT n指令

INT 3断点

除法出错(0)

单步中断(1)

  

 8259A

可屏蔽中断请求INTO

溢出(4)

NMI

INTR

Page 13: 第六章 输入 / 输出方式与接口芯片

中断名 中断号 指令 说明除法错中断 0 DIV/IDIV 除数为 0 或商过大单步 1 任何指令NMI 2 INT2 NMI

断点 3 INT3

溢出 4 INTO 在 OF=1 时执行INTO

数组边界检查 5 BOUND

IRQ0~7 8~FH 主 8259A

BIOS 调用 10H~1FH

BOS 功能调用 20H~3FH

IRQ8~15 70~77H 从 8259A

中断源与中断号分配

Page 14: 第六章 输入 / 输出方式与接口芯片

中断向量表 在实模式下,中断向量表就是中断服务程序入口地址。

Page 15: 第六章 输入 / 输出方式与接口芯片

中断向量表的设置 当 CPU响应中断时,将从中断向量表中读取中断向量送给 CS和 IP ,转去执行中断服务程序。因此,用户必须将中断服务程序的入口地址填入系统的中断向量表中,填入的方法有两种。

① 用程序设置中断向量表 、、、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 :

假设中断类型号为 32H ,中断服务程序入口处的标号为INTSUB 。 中断向量表中先放 ( 小地址 ) 中断服务程序的偏移地址IP, 然后是段地址 (CS) ( 大地址 )

Page 16: 第六章 输入 / 输出方式与接口芯片

利用 INT 21H 的 25H 号功能可实现设置新中断向量,新中断向量应放在 DS: DX 中。

CLIPUSH DSMOV AX, SEG INTSUB ; INTSUB段基址存入 DSMOV DS, AXMOV DX, OFFSET INTSUB; INTSUB 有效地址存入 DXMOV AL, N ;中断类型号 NMOV AH, 25HINT 21H ;将 DS:DX放置中断向量表中POP DSSTI

② 用 DOS 功能设置中断向量表

Page 17: 第六章 输入 / 输出方式与接口芯片

用 DOS 功能取出中断向量

利用 INT 21H 的 35H 号功能可实现保存原中断向量,所取得中断向量放在 ES: BX 中。

MOV AL, N; N 为被保存的中断类型号MOV AH, 35H

INT 21H ; ES: BX 中为原中断向量PUSH ESPUSH BX

Page 18: 第六章 输入 / 输出方式与接口芯片

若要在主程序结束前恢复原中断向量可采用以下程序段实现:

、、、 POP DX

POP DS ;将保存于堆栈的原中断向量弹出,送入; DS:DX

MOV AL , N

MOV AH , 25H

INT 21H

、、、

Page 19: 第六章 输入 / 输出方式与接口芯片

中断描述符表

80486工作在保护模式下时,采用“中断描述符”来描述中断服务程序,用中断描述符表( IDT)取代中断向量表。 IDT可位于线性地址空间中的任何地方, CPU通过中断描述符表寄存器 IDTR确定 IDT的基地址,该寄存器保存有 32

位的基地址和 IDT界限。

Page 20: 第六章 输入 / 输出方式与接口芯片

80486保护方式下中断 / 异常处理程序进入过程 乘 8 是因为每个 IDT占用 8 字节

Page 21: 第六章 输入 / 输出方式与接口芯片

中断优先级与中断嵌套

中断优先级 当有多个中断源同时产生中断申请时, CPU先响应优先权最高的中断源,再响应优先级较低的中断源。

Page 22: 第六章 输入 / 输出方式与接口芯片

中断嵌套 当多个中断源同时发出中断请求时, CPU按照中断优先权的高低顺序 , 依次响应。这种中断套中断的过程称为中断嵌套。

中断嵌套可以有多级,具体级数原则上不限,主要取决于堆栈区的大小(因为中断处理前后均需要保护断点和现场,而断点信息和现场数据的保护是通过堆栈来完成的)。

Page 23: 第六章 输入 / 输出方式与接口芯片

CPU响应中断的条件① CPU内部中断是开放的。② 现行指令内无总线请求,没有更高优先级别的中断请求正在被响应或正发出、正挂起。③ CPU在现行指令结束后,即运行到最后一个机器周期的最后一个 T 状态时,才能采样 INTR线而响应可能提出了的外中断请求。

内中断处理过程① CPU自动产生中断类型号 n ;②( SP) -2→( SP),标志寄存器 F 内容入栈;③( SP) -2→( SP),当前代码段 CS内容入栈;④( SP) -2→( SP),当前指令计数器 IP内容入栈;⑤ 禁止外部中断 IF= 0 ,禁止单步中断 TF= 0 ;

中断处理过程

Page 24: 第六章 输入 / 输出方式与接口芯片

⑥ 从中断向量表中取中断服务程序入口地址( 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 ;

Page 25: 第六章 输入 / 输出方式与接口芯片

⑥ 首先从中断向量表中取 4*N单元的字内容送 IP,然后再取4*N+ 2 单元里的内容送 CS;⑦ 转中断服务程序;⑧ 执行中断服务程序并返回,弹出 IP, CS, F ,返回断点,继续执行。

Page 26: 第六章 输入 / 输出方式与接口芯片

二、中断控制器 82598259A 的内部结构与引脚功能

Page 27: 第六章 输入 / 输出方式与接口芯片

对 SP/EN引脚说明(1)根据情况,可作为输入或输出使用(2)若是缓冲模式(由 ICW4 的 D3=1决定),则作为输出,作为数据缓冲器的选通线;此时该 8259A是主片还是从片由 ICW4 的 D2决定 : D2=0,从片; D2=1,主片

(3)若是非缓冲模式(由 ICW4 的 D3=0决定),则作为输入,用于区分主片还是从片:为高电平则是主片,低电平则是从片。此时不由 ICW4 的 D2决定主从片关系,所以不关心该位的值。

Page 28: 第六章 输入 / 输出方式与接口芯片

方 波键 盘保 留串 口 2

硬 盘软 盘

打印机

IOW

18.2Hz

A0

CS

8259A

总线

A0

数 据 线

IOR RD

WR

片选译码

IR0IR1IR2IR3IR4IR5IR6IR7

A5~

A9

D0~

D7

D0~

D7

Vcc

SP/ENCAS0CAS1CAS2

GND

+ 5V

20~3FH 用于多片8259A

级连情况INTAINT

INTA INTR

串 口 1

8259A 与总线的连接

Page 29: 第六章 输入 / 输出方式与接口芯片

8259A 的中断优先权管理方式 8259A有五种优先级管理方式,所有的优先级管理方式均可通过编程来设置。

⑴ 全嵌套方式 ( 由 ICW4设置 )( 普通方式 , 不需写 OCW1-3,IRQ0优先级最高 ,IRQ7优先级最低 )

⑵ 特殊全嵌套方式 ( 由 ICW4设置 )( 适用于 8259A级联的系统 , 在从片有中断时 , 主片不封锁从片 INT输入端 )

⑶ 优先级自动循环方式 ( 由 OCW2设置 )( 某中断源被响应中断后 , 其优先级自动排为最低 )

⑷ 优先级特殊循环方式 ( 由 OCW2设置 ) ( 可指定最低优先级 )

⑸ 特殊屏蔽方式 ( 由 OCW3设置 ) ( 可屏蔽高优先级 , 开放低优先级中断 )

Page 30: 第六章 输入 / 输出方式与接口芯片

8259A 处理过程

分两步 :

⑴ 处理外设中断申请,决定是否向 CPU发中断申请信号。

⑵ 若发出中断申请信号,且 CPU响应,则在 CPU中断响应周期送出中断类型号。

Page 31: 第六章 输入 / 输出方式与接口芯片

8259A 中断处理过程

IOR

IOW

数 据 线D0~

D7

INTA

A0片选译码

A5~

A9CS

A0

RD

INTA

WR

INT

D0~

D7

ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制

ISR当前中断服务寄存器

IR0IR1IR2IR3IR4IR5IR6IR7

OCW1 中 断屏蔽寄存 器 IMR 0 0

OCW2 优先级、 发EOI OCW3 特殊屏蔽设置

PR优先级裁决器

IRR中断申请寄存器

1 0 0 1 0 1 0 0

INTR

10

00

01

00

00

00

00

00

1中断未屏蔽优先级高

01

IF=1

执行中断程序

EOI

0

Page 32: 第六章 输入 / 输出方式与接口芯片

① 取中断类型号 N

② 当前 PSW 的内容入栈③ 当前 CS 的内容入栈④当前 IP 的内容入栈⑤清 IF、 TF标志为 0

⑥ 取内存单元 ( 0 : N ×4 )字内容送 IP 取中断子程⑦ 取内存单元 ( 0 : N ×4 + 2 )字内容送 CS 入口地址 此时 CS:IP 指向中断程序的入口,开始执行中断程序。

CPU响应中断过程:

保存现场

执行完中断子程中最后一条指令 IRET后,返回被中断处,继续执行被中断的程序。

Page 33: 第六章 输入 / 输出方式与接口芯片

发中断结束命令 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 中的指定位复位,结束当前中断。

Page 34: 第六章 输入 / 输出方式与接口芯片

8086CPU如何获取中断类型号 由前面介绍知,当中断源产生中断请求后,不论是内中断、非屏蔽中断,还是可屏蔽中断,只要满足响应条件,在执行完当前指令后, CPU

内部硬件会自动完成响应中断的过程 ,共七个步骤,而第一步就是获取中断类型号。

不同的中断源, 8086CPU 获取中断类型号的方法不同,一般具有以下几步:

① CPU从引脚 INTA 发中断响应信号,接口芯片接收此信号,把中断类型号准备好;同时 ISRi=1,IRRi=0 。

② CPU 再从引脚 INTA 发中断响应信号,接口芯片接此信号后,将中断类型号送至数据总线上;

③ 从数据总线获取中断类型号。

④  CPU 根据读取到的中断类型号寻找中断程序的入口地址。

Page 35: 第六章 输入 / 输出方式与接口芯片

8259A 的编程

8259A 中断控制器内部有 9个可读写的寄存器

1 × I3 I4ICW1 芯片控制

ICW2 中断类型号

ICW3 主从片关系

ICW4 方式控制

处理部分

控制部分

000 0 0 0 0 0

ISR当前中断服务寄存器

PR优先级裁决器

IRR中断申请寄存器

000 0 0 0 0 0

中 断 屏 蔽 寄 存 器 IMR

OCW2

1 0 0 1 0 1 0 0

0 0

0 1

OCW3

OCW1

Page 36: 第六章 输入 / 输出方式与接口芯片

8259A 有两个 I/O 端口地址

• 对 9 个寄存器的读写均通过这两个端口实现

写入数据的特征位

• 写入的先后顺序

区分是对哪个寄存器进行操作

根据

1 × I3 I4ICW1 芯片控制

ICW2 中断类型号

ICW3 主从片关系

ICW4 方式控制

处理部分

控制部分

000 0 0 0 0 0

ISR当前中断服务寄存器

PR优先级裁决器

IRR中断申请寄存器

000 0 0 0 0 0

中断屏蔽寄存器

OCW2

1 0 0 1 0 1 0 0

0 0

0 1

OCW3

OCW1

D0~

D7

A0

CS

RD

WR

8

0

1

1

1

A01

0

0

A0

Page 37: 第六章 输入 / 输出方式与接口芯片

8259A 的初始化编程8259A 的初始化编程的顺序及内容① ICW1

A0 D7 D6 D5 D4 D3 D2 D1 D0

0 × × × ×1 LTIM SNGL IC4

② ICW2

A0 D7 D6 D5 D4 D3 D2 D1 D0

1 T7 T6 T5 ×T4 T3 × ×

③ ICW3

A0 D7 D6 D5 D4 D3 D2 D1 D0

1

④ ICW4A0 D7 D6 D5 D4 D3 D2 D1 D0

1 T7 T6 T5 ×T4 T3 × ×

0:不要 ICW41:要 ICW4

0:有级连1:无级连

0:边沿触发1:电平触发

标志

中断号高 5位

主片 ,1:有从片从片 , 低 3 位代表位置

0:非缓冲1:缓冲

0:一般嵌套1:特殊嵌套

Page 38: 第六章 输入 / 输出方式与接口芯片

8259A 的操作编程① OCW1

A0 D7 D6 D5 D4 D3 D2 D1 D0

1 M7 M6 M5 M2M4 M3 M1 M0

② OCW2

A0 D7 D6 D5 D4 D3 D2 D1 D0

0 R SL EOI L20 0 L1 L0

③ OCW3

A0 D7 D6 D5 D4 D3 D2 D1 D0

0 0 ESMM SMM P0 1 RR RIS

D7 D6 D5

0 0 0

0 0 1

0 1 0

0 1 1

1 0 0

1 0 1

1 1 0

1 1 1

功 能

清除自动循环优先级命令

发出 EOI

无操作

发 出 SEOI ( special end of interruption)

设置自动循环优先级命令

设置自动循环优先级并发 EOI

设置特殊循环优先级命令

设置特殊循环优先级并发 SEOI

OCW2 的 D7 ~ D5 位的功能说明

教材 P178,P179页有错

0:中断开放

最低优先级编码1:最低优先级有效

1:发结束命令1:优先级循环

1 0 :读IRR

1 1 :读ISR

1:查询1 0 :特殊屏蔽清除 1 1 :特殊屏蔽设置

Page 39: 第六章 输入 / 输出方式与接口芯片

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 ,则表示没有中断请求发生。

Page 40: 第六章 输入 / 输出方式与接口芯片

通过往奇地址端口写入 IMR 内容实现 (即 OCW1)

对应位为 0 ,允许该级中断申请进入 对应位为 1 ,禁止该级中断申请进入

对 8259A 的奇地址的读指令可读得中断屏蔽寄存器 IMR 的内容,也可修改 IMR的内容。

IOR

IOW

总线数 据 线

D0~

D7

INTA

A0片选译码

A5~

A9CS

A0

RD

INTA

WR

INT

D0~

D7

ICW1 芯片控制 ICW2 中断类型号 ICW3 主从片关系 ICW4 方式控制

000 0 0 0 0 0

ISR当前中断服务寄存器

IR0IR1IR2IR3IR4IR5IR6IR7

OCW1 中 断 屏 蔽 寄 存 器 IMR 0 0

OCW2 优 先 级 、 发EOI OCW3 特殊屏蔽设置

PR优先级裁决器

IRR中断申请寄存器

100 0 0 0 0 1

1 0 0 1 0 1 0 0

INTR

Page 41: 第六章 输入 / 输出方式与接口芯片

新增允许 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

例 已知 IBM PC/XT 系统中 8259A 的奇地址端口地址为21H

Page 42: 第六章 输入 / 输出方式与接口芯片

8259A在 PC 中的基本应用

从8259A

IRQ8IRQ9

IRQ10IRQ11IRQ12IRQ13 IRQ14IRQ15

主8259A

IRQ0IRQ1

IRQ3IRQ4IRQ5 IRQ6IRQ7

INT至 CPU

INT中断路由器

IRQ

7IR

Q6

IRQ

5IR

Q4

IRQ

3IR

Q2 ISA总线

PCI

线

PCI

线

系统时钟键盘

主、从 8259A级连的中断控制逻辑

主片的端口地址: 20H, 21H

从片的端口地址: A0H, A1H

Page 43: 第六章 输入 / 输出方式与接口芯片

8259A各中断请求的功能分配情况中断申请引脚

IRQ0IRQ1IRQ2IRQ3IRQ4IRQ5IRQ6IRQ7IRQ8IRQ9

IRQ10IRQ11IRQ12IRQ13IRQ14IRQ15

中断类型号08h09h0Ah0Bh0Ch0Dh 0Eh0Fh70h71h72h73h74h75h76h77h

哪个设备使用系统时钟 (8254)

键盘连接从 8259

COM2 串口 2COM1 串口 1

保留软盘控制器LPT1 并口

实时时钟 (RTC)保留 (软件指向 0Ah 类型 )

保留显卡鼠标

数值协处理器硬盘控制器保留

Page 44: 第六章 输入 / 输出方式与接口芯片

主、从 8259A 的中断结束命令

对主 8259A 有:

MOV AL, 20H ; EOI命令

OUT 20H, AL ;写主片的 OCW2

IRET

对从 8259A 有:

MOV AL, 20H ; EOI命令,

OUT 0A0H, AL ;写从片的 OCW2

IRET

Page 45: 第六章 输入 / 输出方式与接口芯片

8259A 编程总结

操作 寄存器 地址 (A0) 数据 说明写 ICW1 0 D4D3:1x 触发方式 , 是否级联等

写 ICW2 1 定义中断号写 ICW3 1 定义级联写 ICW4 1 定义嵌套与结束方式写 OCW1 1 中断允许与屏蔽写 OCW2 0 D4D3:00 定义循环方式 / 写

EOI(20h)

写 OCW3 0 D4D3:01 定义屏蔽方式 / 查询等功能

读 IRR 0 写 OCW3 (D1D0:10)

读 ISR 0 写 OCW3 (D1D0:11)

读 IMR 1

查询 0 写 OCW3 (D2:1)

Page 46: 第六章 输入 / 输出方式与接口芯片

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

Page 47: 第六章 输入 / 输出方式与接口芯片

中断程序例子 如图 , 中断程序从初值 0 开始对开关 K 的按

键 次 数 计 数 , 并 在 CRT 上 显 示 次 数( 0,1,2…F ),到 F 后结束程序。

Page 48: 第六章 输入 / 输出方式与接口芯片

CODE SEGMENT ASSUME CS:CODE

START:MOV AX,350BHINT 21H

PUSH ES PUSH BX ; 保留原中断向量 ;////////////////////////////////////////////

Page 49: 第六章 输入 / 输出方式与接口芯片

MOV AX,SEG INTPROCMOV DS,AXMOV DX,OFFSET INTPROCMOV AX,250BHINT 21H ; 设置新的中断向量

IN AL,21HAND AL,0F7HOUT 21H,AL ;8259 的 IR3 不屏蔽STI ;CPU 中断开放

 

Page 50: 第六章 输入 / 输出方式与接口芯片

MOV CX,0MOV DL,'0'MOV AH,2INT 21H

WAIT0: CMP CH,1 ;产生中断后给出标志 JNZ WAIT0 MOV CH,0

MOV DL,CL;CL 记录中断次数AND DL,0FHCMP DL,9JBE NEXTADD DL,7

NEXT: ADD DL,30H MOV AH,2

INT 21HCMP CL,0FH

JNZ WAIT0

Page 51: 第六章 输入 / 输出方式与接口芯片

;//////////////////////////

POP DX POP DS MOV AX,250BH INT 21H ; 恢复原中断向量

;/////////////////////////////////////////  MOV AH,4CH INT 21H 

Page 52: 第六章 输入 / 输出方式与接口芯片

INTPROC PROC FAR ; 中断程序 INC CL ; 计数值 +1

MOV CH,1 ; 产生中断的标志MOV AL,20H

OUT 20H,AL; 发结束命令IRET ; 中断返回

INTPROC ENDP

CODE ENDS

END START

Page 53: 第六章 输入 / 输出方式与接口芯片

第四节 可编程定时器 / 计数器 8254及其应用

微机系统实现定时功能,主要有三种方法:软件定时、不可编程硬件定时和可编程硬件定时。

软件定时是通过执行一个固定的程序段来实现定时。由于 CPU

执行每条指令都需要一定时间,因此执行一个固定的程序段就需要一个固定的时间。定时或延时时间的长短可通过改变循环次数来控制。

不可编程的硬件定时常采用中小规模集成电路实现。如使用 555

定时器等,硬件定时方案不占用 CPU时间,但电路连接好后,定时值就不能改变。

可编程硬件定时用可编程定时器 / 计数器来实现,本节主要介绍IBM PC系列微机使用的 Intel 8254可编程定时器 / 计数器。

Page 54: 第六章 输入 / 输出方式与接口芯片

一、 8254的内部结构和引脚功能(24pin)

Page 55: 第六章 输入 / 输出方式与接口芯片

计数器 0 、 1 、 2 的内部结构

16位初值寄存器由 CPU分两次写入

16位减 1 计数器:在CLK的作用下, 对计数初值 N 进行减 1 ,当减为 0 时 , 在 OUT引脚上产生回零时间到信号

16位锁存器其值随减 1 计数器改变而改变

二、 8254的工作方式

Page 56: 第六章 输入 / 输出方式与接口芯片
Page 57: 第六章 输入 / 输出方式与接口芯片
Page 58: 第六章 输入 / 输出方式与接口芯片
Page 59: 第六章 输入 / 输出方式与接口芯片

三、 8254的编程

1. 方式控制字 (A1 A0: 1 1)

2. 计数初值( N )

定时时间T=

CLK时钟周期 tCL×计数初值( N ) N=T/tCL

Page 60: 第六章 输入 / 输出方式与接口芯片

• 关于初值计算问题 , 设输入 CLK 频率为 f,周期为 T=1/f, 设初值为 N, 以方式 3 为例 :

从图可以看出 , 在方式 3 为方波方式 , 若初值设为 N,则 OUT 脉冲的高电平占 N/2 个 CLK 周期 , 低电平也为 N/2 个 CLK 周期 ( 设 N 为偶数 ), 也就是 OUT 的周期为 CLK 周期的 N 倍 , 则 OUT 脉冲的频率为 CLK的 1/N, 即若初值为 N, 则输出时钟是输入时钟频率的1/N

Page 61: 第六章 输入 / 输出方式与接口芯片

D7 D6 D5 D4 D3 D2 D1 D0 A1A0

0 0 0 0 x x x x 1 1 0 1 1 0

写初值 (若选择先低后高时应写 2次 )A1 A0: 0 0 通道 0, 0 1 通道 1, 1 0 通道 2

3.写命令字(1)锁存命令字 : 将指定通道的 CE 存入 OL

D7 D6 D5 D4 D3 D2 D1 D0

(2) 读回命令字 : 将选定(可多个)通道的 CE 或(和) SR 存入 OL及SL

1 1 0 0 1 1 1 0 1 1 存 CE 存 SR 通道 2 通道 1 通道 0

A1A0

Page 62: 第六章 输入 / 输出方式与接口芯片

D7 D6 D5 D4 D3 D2 D1 D0 A1A0

OUT 状态 D5 D4 D3 D2 D1 D0 :同控制字 0 0 0 1

1 0

4.读 OL :在某通道 CE 被锁存后读出A1 A0: 00 通道 0, 01 通道 1, 10 通道 2

5.读 SL :在某通道 SR 被锁存后读,若 SL、 OL 同时有效,则先读SL

D6 0 :可读计数 1 :无效计数

Page 63: 第六章 输入 / 输出方式与接口芯片

8254编程总结 功能 端口 D7 D6 D5 D4

写通道的方式控制字,对用到的每个通道各写一次

3 ( 1 1 ) 0 00 11 0

0 11 01 1

写锁存命令字,只锁存计数值,对用到的每个通道

各写一次

3 ( 1 1 ) 0 00 11 0

0 0

写读回命令字,可一次锁存所有通道的计数和状态

3 ( 1 1 ) 1 1  

写初值或修改初值 0 ( 00 )通道 0

1 ( 01 )通道 1

2 ( 10 )通道 2

   

读计数值 0 ( 00 )通道 0

1 ( 01 )通道 1

2 ( 10 )通道 2

   

读状态值 0 ( 00 )通道 0

1 ( 01 )通道 1

2 ( 10 )通道 2

   

Page 64: 第六章 输入 / 输出方式与接口芯片

三、 8254在 PC中的应用 PC使用一片 8254,其 3 个计数通道分别用于日时钟计时、 DRAM刷新定时和控制扬声器发声声调

Page 65: 第六章 输入 / 输出方式与接口芯片

定时中断和定时刷新MOV AL, 36H ; 00110110 计数器 0 为方式 3 ,采用二进制计数,先低后高写入计数值OUT 43H, AL ;写入方式控制字MOV AL, 0 ;计数值为 0OUT 40H, AL ;写入低字节计数值OUT 40H, AL ;写入高字节计数值注 :1.19318M/65536=18.206Hz 周期为 55ms

MOV AL, 54H ; 01010100 计数器 1 工作为方式2 ,采用 二进制计数,只写低 8 位计数值 , 方式二是频 率发生器OUT 43H, AL ;写入方式控制字MOV AL , 18 ; 计 数 初 值 为 18; 18*1/1.19=15.084uSOUT 41H, AL ;写入计数值

Page 66: 第六章 输入 / 输出方式与接口芯片

扬声器控制 ;发音频率设置子程序; 入口参数: AX=1.19318×106÷发音频率SPEAKER PROC

PUSH AX

MOV AL, 0B6H ; 10110110 定时器 2 为方式 3 , ; 先低后高写16位计数值

OUT 43H, AL POP AX OUT 42H, AL ;写入低 8 位计数值 MOV AL, AH OUT 42H, AL ;写入高 8 位汁数值 RET

SPEAKER ENDP

Page 67: 第六章 输入 / 输出方式与接口芯片

注 :61H:8255B口SPEAKON PROC ;扬声器开子程序

PUSH AX IN AL, 61H ;读取 61H端口的原控制信息 OR AL, 03H ; D1D0= PB1PB0= 11B,

其他位不变 OUT 61H, AL ;直接控制发声 POP AX

RETSPEAKON ENDPSPEAKOFF PROC ;扬声器关子程序 PUSH AX

IN AL, 61H AND AL, 0FCH ; D1D0= PB1PB0= 00B,

其他位不变 OUT 61H, AL ;直接控制闭音 POP AX RETSPEAKOFF ENDP

Page 68: 第六章 输入 / 输出方式与接口芯片

可编程硬件延时 采用日时钟延迟 5S,日时钟中断来自 8254的 OUT0,接到主片 8259的 IRQ0,周期约 55mS

;延时开始MOV AH, 0 ;读取日时钟功能调用(附录 5 )

INT 1AH ;返回 : CH:CL 时 : 分 ;

DH:DL 秒 : 时钟中断次数(55mS,1/18 S)

ADD DX, 90 ;加 5 秒( 5×18= 90) MOV BX, DX ;期望值送 BX

L1: INT 1AH ;再读日时钟 CMP BX, DX ;与期望值比较 JNE L1 ;不等,则循环 …… ;相等,则延时结束

Page 69: 第六章 输入 / 输出方式与接口芯片

可编程硬件延时

采用实时时钟中断可实现更短延时 . 实时时钟中断周期为976uS,接到从片 8259IRQ0(即 IRQ8,中断号 70h),延迟时间必须是 976uS的倍数 .

下面程序实现 2mS延时

MOV CX, O ;CX:DX延迟的微秒数 .

MOV DX, 1952 ;延时 1.952MS= 2×976uS

MOV AH, 86H

INT 15H ;功能调用返回时,定时时间到

Page 70: 第六章 输入 / 输出方式与接口芯片

第五节 可编程并行 I/O接口芯片 8255及其应用 并行传送是主机与外设之间交换信息的一种基本方式,其特点是

数据的各位同时传送。 8255是一种通用可编程并行 I/O接口芯片,在 PC中常用于传递键盘信息、扬声器信息等。

一、 8255的内部结构和引脚功能

Page 71: 第六章 输入 / 输出方式与接口芯片

二、 8255的工作方式8255A有三种工作方式: 方式 0 、 方式 1 、 方式 2

1.方式 0 :基本输入输出方式

这种方式下,端口与外设间不需要联络信号。 8255A的 3 个端口都可以工作在该方式下,并由控制字规定为输入或输出。当 8255A

的端口工作在方式 0 时, CPU只要用输入或输出指令就可以与外设进行数据交换。因此,方式 0 也称为无条件的输入 / 输出方式。

2.方式 1 :选通输入输出方式

这种方式下,只有 A 口和 B 口可以作为 8 位的输入或输出端口, C 口主要作为 A 、 B 两个端口输入 / 输出时的联络信号。且 A 口和 B 口无论输入或输出都有数据锁存功能。该方式下 CPU与 8255A间可以用中断方式或查询方式进行信息交换。

Page 72: 第六章 输入 / 输出方式与接口芯片

选通输入方式

A 口、 B 口中有一个为方式 1 时,余下 13根可为方式0 (入 / 出)A 口、 B 口同为方式 1 时,余下 2 根 C 口线可为输入 / 出联线定义固定,不可更改 .

Page 73: 第六章 输入 / 输出方式与接口芯片

选通输入方式方式 1 工作时序,分为输入与输出

Page 74: 第六章 输入 / 输出方式与接口芯片
Page 75: 第六章 输入 / 输出方式与接口芯片

选通输入方式端口 A 和端口 B 工作于方式 1 的输入方式时,其引脚和时序如下

Page 76: 第六章 输入 / 输出方式与接口芯片

选通输出方式端口 A 和端口 B 工作于方式 1 的输出方式时,其引脚和时序如下

Page 77: 第六章 输入 / 输出方式与接口芯片

3.方式 2 :双向选通方式 方式 2 是将方式 1 的选通输入输出功能组合成一个双向数据端口,外设利用这个端口既能发送数据,又能接收数据。 8255A只有端口 A 可以工作于方式 2 ,端口 A 工作在方式 2 的引脚和时序如下:

Page 78: 第六章 输入 / 输出方式与接口芯片

三、 8255的编程1. 方式选择控制字

Page 79: 第六章 输入 / 输出方式与接口芯片

2. C口按位置位 / 复位控制字

Page 80: 第六章 输入 / 输出方式与接口芯片

3.初始化举例 例如,若规定端口 A 为方式 1 输出,端口 C 上半部分为输出,端口 B 指定为方式 0 输入,端口 C 下半部分为输入,则方式选择控制字应是:1 01 0 0 0 1 1 B 或 A3H。 若将此控制字的内容写入 8255A 的控制寄存器,即完成了对8255A的初始化。初始化程序段为: MOV DX , 20bH ;假设控制端口的地址为20bH

MOV AL, 0A3H ;方式选择控制字 OUT DX, AL ;送到控制端口 又如:要使端口 C 的 PC5置“ 1”, PC2置“ 0”,可通过下面的程序段实现(假设 8255A的控制端口地址为 20BH):

MOV AL , 0BH ; 0 000 101 1 PC5置“ 1”

MOV DX,20BH

OUT DX, AL ;送到控制端口 MOV AL , 04H ; 0 000 010 0 PC2置“ 0”

OUT DX, AL ;送到控制端口

Page 81: 第六章 输入 / 输出方式与接口芯片

四、 8255A的应用1.8255A 在 PC 中的应用

PC使用一片 8255A管理键盘、控制扬声器和输入系统配置开关的状态等。这片 8255A的端口 A 、 B 、 C 和控制口的地址分别为 60H、 61H、 62H和 63H。 在 PC机中, 8255A工作在基本输入 / 输出方式。端口 A为方式 0 输入,用来读取键盘扫描码。端口 B 工作于方式 0 输出, PB6和 PB7控制键盘接口电路、 PB0和 PB1控制扬声器发声。端口 C 为方式 0 输入,存放系统配置开关的状态。这样,系统利用如下两条指令就完成了 8255A的初始化编程: MOV AL, 100 1 1 0 0 1B ; 8255A的方式控制字99H OUT 63H, AL ;设置端口 A 和端口 C 为方式 0 输入、端口 B 方式 0 输出 80286 以上的微机系统中,由其他的多功能芯片取代了8255A 的功能,为了保证和低档微机的兼容性,系统仍使用8255A的口地址,仍然可从 60H端口地址读取按键扫描码,可使用 PB0和 PB1来控制发声系统。

Page 82: 第六章 输入 / 输出方式与接口芯片

2. 8255A 在简单输入输出中的应用 设系统中外扩了一片 8255A和相应的实验电路,如图所示。

要求每按一次 K 键,则使发光二极管 LEDi的状态随开关 Ki的状态变化( Ki闭合, LEDi亮; Ki断开, LEDi灭 , 需将读入的状态取反)。主机键盘有任意键按下结束。

Page 83: 第六章 输入 / 输出方式与接口芯片

按查询方式完成该例 , 方式选择控制字为: 1 000 0 11

0B,即 86H.参考程序如下: CODE SEGMENT

ASSUME CS: CODEMAIN: MOV AL, 86H

OUT 83H, AL ;写入方式选择控制字AGAIN: MOV AH, 1

INT 16H ;键盘有键按下?(无按键时 ZF=1)JNZ DONE ;有 ,ZF=0,转 DONEIN AL, 82H ;读 8255A C口TEST AL , 00000010B ; K 键已按 下 ( IBFB 即

PC1=1)?JZ AGAIN ;没有,重复IN AL, 81H ;读 8255A B口NOT ALOUT 80H, AL ;输出到 8255A 口JMP AGAIN

DONE: MOV AH, 4CHINT 21H

CODE ENDSEND MAIN

Page 84: 第六章 输入 / 输出方式与接口芯片

按中断方式完成该例 , 方式选择控制字为: 10000110B ,即 86H.

INTEB 为 1 ,即将 PC2置“ 1”,其控制字为: 00000101B或 05H,参考程序如下: CODE SEGMENT

ASSUME CS: CODE MAIN: MOV AL, 86H

OUT 83H, AL ;写入方式选择控制字MOV AL, 05HOUT 83H, AL ; PC2=1( INTEB=1)MOV AX, 0MOV DS, AXMOV BX, 0AH*4 ; IR2,0A号中断LEA AX, INTSUB ;填充中断向量表MOV [BX], AXMOV AX, SEG INTSUBMOV [BX+2], AXIN AL, 21H ;读 8259A的 IMRAND AL, 11111011BOUT 21H, AL ;开放 8259A IR2的中断STI ;开中断

Page 85: 第六章 输入 / 输出方式与接口芯片

AGAIN: MOV AH, 1INT 16H ;键盘有键按下?JZ AGAIN ; ZF=1,没有,等待MOV AH, 4CHINT 21H ;返回 DOS操作系统

INTSUB PROC FAR

IN AL, 81H ;读 8255A端口 BNOT ALOUT 80H, AL ;输出至 8255A端口 AMOV AL, 20HOUT 20H, AL ;中断结束命令IRET ;中断返回

INTSUB ENDP

CODE ENDSEND MAIN