520 likes | 681 Views
可编程接口芯片. 第七章 可编程接口芯片. 接口芯片简介. 第 7.1 节 接口芯片简介 接口的功能 数据缓冲 :外设数据输入到总线时需要缓冲。 数据锁存 :总线数据输出到外设时的锁存,解决 CPU 与外设速度不匹配问题。 传输控制命令和状态信息 :计算机与外设有时需使用硬件握手。例如:计算机利用查询输出到打印机。 信息转换 :串并转换、数模转换、电平格式转换 可由程序改变功能的接口芯片称为 可编程接口芯片. 常用接口芯片. 8086 系统常用可编程接口芯片 并行接口芯片 INTEL 8255 ,有三个 8 位端口 A 、 B 、 C
E N D
可编程接口芯片 第七章 可编程接口芯片
接口芯片简介 第7.1节 接口芯片简介 • 接口的功能 • 数据缓冲:外设数据输入到总线时需要缓冲。 • 数据锁存:总线数据输出到外设时的锁存,解决CPU与外设速度不匹配问题。 • 传输控制命令和状态信息:计算机与外设有时需使用硬件握手。例如:计算机利用查询输出到打印机。 • 信息转换:串并转换、数模转换、电平格式转换 • 可由程序改变功能的接口芯片称为可编程接口芯片
常用接口芯片 • 8086系统常用可编程接口芯片 • 并行接口芯片 • INTEL8255,有三个8位端口A、B、C • INTEL8155,有三个端口,内带256字节RAM,两个定时器 • 串行接口芯片 • INTEL8251,同步异步串行接口 • INTEL8250,异步串行接口芯片 • 计数定时器 • INTEL8253/8254,三个通道16位定时计数器 • 直接内存访问控制器(DMA) • INTEL8237
A 组 PA7 ~ PA0 端口A 控制 D7~D0 端口C 缓冲 PC7 PC4 ~ RD (上部) WR 读写 A0 控制 端口C A1 PC3 ~ PC0 逻辑 (下部) CS RESET B 组 PB7 ~ PB0 端口B 控制 8255内部接构 第7.2节 可编程并行接口8255A • 8255A内部结构与功能 (一)8255A内部结构
8255内部接构 • 内部结构说明 • 端口 • 端口A:由一个8位数据输入锁存器和一个8位数据输出锁存缓冲器组成,可工作于双向方式。 • 端口B:由一个8位数据输入缓冲器和1个8位数据输出锁存缓冲器构成。 • 端口C:由一个8位数据输入缓冲器和一个8位数据输出锁存缓冲器构成。C口可分为两个部分,配合A口和B口工作。 • A组控制和B组控制 接收CPU控制字,决定8255工作方式。
8255内部接构 • 读写控制逻辑 由RD、WR、CS、A0、A1和RESET组成,8255占用4个端口地址。 • 数据总线缓冲器 8位双向数据缓冲器,可直接与数据总线相连。
8255引脚功能 • 引脚功能说明 8255A为40引脚双列直插的NMOS器件,其引脚如下: • PA7~PA0:端口A的数据线,双向,三态输出。 • PB7~PB0:端口B的数据线,可输入,也可输出。 • PC7~PC0:端口C的数据线,可输入,也可输出,还可做A口或B口的控制信号线。 • D7~D0:数据线,与系统总线连接。 • RD:读信号,输入,低电平有效,从8255A读取数据 • WR:写信号,输入,低电平有效,把数据写入8255。 • CS:片选信号,输入,低电平有效,决定芯片地址。 • A0 A1:端口选择信号,8255占四个端口地址。 • RESET:复位信号,输入,高电平有效。复位后清所有内部寄存器
操 作 A1 A0 RD WR CS 读端口A 0 0 0 1 0 读端口B 0 1 0 1 0 1 0 0 1 0 读端口C 0 0 1 0 0 向端口A输出 0 1 1 0 0 向端口B输出 1 0 1 0 0 向端口C输出 1 1 1 0 0 向控制口输出 8255端口选择 • 8255端口选择 A1 A0 = 00 对A口操作 01 对B口操作 10 对C口操作 11 对控制口操作
8255的计算机连接 D7 ~ PA7 PA0 ~ D7 ~ D0 D0 RD IOR ~ PB7 PB0 8255A WR IOW A1 A2 A1 A0 PC0 PC7 ~ RESET RESET CS +5V A15 74LS138 +5V A14 74LS30 A13 G1 A12 Y3 G2A A11 A8 G2B A10 C A7 A9 A6 B 74LS04 A5 A 8255与计算机的连接
端口 A0 A15 ~ A8 A4A3 A2A1 A7 A6 A5 地址 A口 0 0 0060H B口 0 1 0062H 0 0 ~ 0 0 1 1 X X C口 0064H 1 0 控制口 0066H 1 1 8255与计算机的连接 • 连接说明 • 8255的数据线D7~D0接8086系统的数据线低8位。 • 8255的A0接8086的A1,8255的A1接8086的A2,使用偶地址传递信息。 • 端口地址
D6 D5 1 D4 D3 D2 D1 D0 B组 A组 端口C 方式选择 标识 (下半部) 00=方式0 1=输入 01=方式1 0=输出 1X=方式2 端口B 1=输入 端口A 0=输出 1=输入 0=输出 方式选择 0=方式0 端口C 1=方式1 (上半部) 1=输入 8255工作方式控制字 0=输出 8255控制字 • 8255A的控制字与工作方式 (一) 8255A的控制字 • 方式控制字 方式控制字送到控制口,以选择A口,B口和C口的工作方式。
8255控制字 • 说明 • 8255A有三种工作方式,每种方式都可以输入也可以输出。 • 方式0:无条件(基本)输入输出。 • 方式1:查询(选通)输入输出。 • 方式2:双向方式。 • A口有三种工作方式,B口仅有方式0和方式1工作方式。 • 在方式1和方式2中C口作为联络信号。
D0 D7 X B2 B1 X B0 0 X 1/0 D0=1 置1 标识 未用 D0=0 复位 1 2 0 4 6 3 5 7 1 1 0 0 1 0 0 1 0 0 1 0 1 0 1 1 1 0 1 1 0 0 1 0 8255控制字 • 端口C按位控制字 • 说明 • 按位控制字写入8255的控制口; • 该控制字仅对8255的端口C的输出锁存器操作。
8255工作方式 (二)8255A的工作方式 • 方式0 —基本输入输出方式 • 输入 • 端口A、B和PC7~PC4及PC3~PC0都可工作于此方式 • 在此方式下,口线直接与端口输入缓冲器相连,输入不具有锁存功能 • CPU用IN指令读取数据口以得到当前口线状态
8255工作方式 • 输出 • 端口A、B、PC7~PC4和PC3~PC0均可编程工作于此方式。 • 在此方式下,输出口线通过端口输出缓冲器连接到端口输出锁存器,而且输出缓冲器被打开。 • CPU用OUT指令写数据到数据口,以把数据输出到端口输出锁存器,并到达口线。
PC4 PA7~PA0 PC2 PB7~PB0 INTEA STBA INTEB PC4 STBB PC2 PC5 IBFA PC1 IBFB PC3 PC0 INTRA INTRB A口选通输入控制信号 B口选通输入控制信号 8255工作方式 • 方式1 — 选通输入输出方式 • 选通输入方式
8255工作方式 • 信号说明 • STB 选通输入:低电平有效,表示外设送出新数据。 • IBF 输入缓冲区满:输出,高电平有效。通知外设输入缓冲区满,不要送新数据,由CPU读取数据清除。 • INTR 中断请求信号:输出,高电平有效,可向CPU申请中断。 • INTEx 中断允许:INTEA是C口输出锁存器的PC4,INTEB是C口输出锁存器的PC2,由它们分别控制A口和B口的中断申请。 • INTEx=1 中断允许 • INTEx=0 中断禁止
PC6 PA7~PA0 PC2 PB7~PB0 INTEA ACKA PC6 INTEB ACKB PC2 PC7 OBFA OBFB PC1 PC3 INTRA PC0 INTRB A口选通输出控制信号 B口选通输出控制信号 8255工作方式 • 选通输出方式
8255工作方式 • 信号说明 • OBF 输出缓冲器满,输出,低电平有效,通知外设端口已有可用数据。 • ACK 收到信号,输入,低电平有效。外设通知8255已取走数据,由其清除OBF,并置“1”INTR。 • INTR 中断请求信号,输出,高电平有效,可向CPU申请中断。 • INTEx 中断允许信号 • INTEA为PC6输出锁存器,INTEB为PC2输出锁存器 • INTEx=1 中断允许, • INTEx=0 禁止中断。
控制信号 • INTR 中断请求信号,输出,高电平有效,向CPU提出中断请求。由输入ACKA或输入STBA使中断申请信号有效。 • OBFA 输出缓冲器满,输出,低电平有效,通知外设端口已有有效数据。 INTRA PC3 PC7 OBFA ACKA PC6 INTE1 PA7 PC6 ~ PA0 PC5 IBFA PC4 STBA INTE2 PC4 8255工作方式 • 方式2 — 双向方式 仅A口有此方式
8255工作方式 • ACKA 输入,低电平有效。外设发出ACKA打开A口输出缓冲器,读取数据,同时清除OBFA,并使INTR有效。 • STBA 选通信号,输入,低电平有效,外设准备好数据,通过STBA把数据锁存到端口输入锁存器,同时使IBFA和INTRA有效。 • IBFA 输入缓冲区满,输出,高电平有效。通知外设端口已有数据。该信号由CPU对数据端口读操作清除。 • INTEx 中断允许信号 • INTE1为PC6输出锁存器,INTE2为PC4输出锁存器 • INTEx = 1 中断允许 • INTEx = 0 禁止中断
com a b f g c e dp d b c d e f g dp a 共阳极数码管内部结构 字型图 8255应用举例 • 8255A应用举例 例1由8255A的A口输出控制一位共阳极数码管,由C口 PC7~PC4输入接入四位DIP开关的设置,根据开关设置值,在 数码管上显示字型。 注:LED数码管由8个发光二极管组成七段数码和小数点
十六进制 字型码 十六进制 字型码 00H C0H 08H 80H 01H F9H 09H 98H 02H A4H 0AH 88H 03H B0H 0BH 83H 04H 99H 0CH C6H 05H 92H 0DH A1H 06H 82H 0EH 86H 07H F8H 0FH 8EH 8255应用举例 • 程序 • 8255初始化控制字:88H • 十六进制到字型码采用软件译码方式
8255应用举例 PORTA EQU 60H PORTB EQU 62H PORTC EQU 64H PCTRL EQU 66H DIS PROC MOV AL, 88H OUT PCTRL,AL ;初始化8255 IN AL,PORTC ;读开关状态 MOV CL,4 SHR AL,CL ;转成低4位 LEA BX,SH_TAB XLAT SH_TAB ;查表 OUT PORTA,AL ;显示输出 RET ;字型表 SH_TAB DB 0C0H 0F9… DIS ENDP
8253内部结构 第7.3节 计数器/定时器INTEL8253 • 8253内部结构与功能 Intel8253是三个通道16位再装入定时计数器,可由软件设定6种工作方式。 (一)内部结构 • 内部结构说明 • 8253内部有三个独立的通道; • 每个通道有6种工作方式,由控制寄存器选择; • 每个通道可对外部输入CLK进行二进制或十进制减1计数。计数由引脚GATE控制; • 计数器归0时由OUT引脚输出信号。
CLK0 数据 D7~D0 计数器0 GATE0 缓冲器 OUT0 RD 读写 WR CLK1 控制 计数器1 A0 GATE1 A1 逻辑 OUT1 CS CLK2 控制 计数器2 GATE2 寄存器 OUT2 8253内部结构 8253内部结构
8253引脚功能 • 引脚功能 8253具有24个引脚,各引脚功能如下: • D7~D0数据总线,双向三态,可直接与计算机系统数据总线相连。 • RD读信号,输入,低电平有效,若有效则CPU从8253内部读取数据. • WR写信号,输入,低电平有效,若有效则CPU将数据写入8253内部寄存器。 • CS片选信号,输入,低电平有效,与计算机连接时分配有效地址。 • A1A0内部计数器选择信号。 8253内部有三个计数通道,使用四个端口地址。
A0 CS A1 RD WR 功 能 0 1 0 0 0 对计数器0设置计数初值 0 1 0 0 1 对计数器1设置计数初值 0 1 0 1 0 对计数器2设置计数初值 0 1 0 1 1 设置控制字 0 0 1 0 0 从计数器0读出计数值 0 0 1 0 1 从计数器1读出计数值 0 0 1 1 0 从计数器2读出计数值 8253引脚功能 • CLK0、CLK1、CLK2 通道0,通道1和通道2的计数时钟输入端,下降沿使通道减1。 • GATE0、GATE1、GATE2门控制,输入,高电平有效或上升沿有效,有效时才允许计数器对输入时钟进行计数。 • OUT0、OUT1、OUT2 通道输出信号,当计数器计数到“0”时由此引脚输出一信号。
8253 +5V GATE0 D7 D7 GATE1 ~ ~ D0 PB0(8255) D0 GATE2 IRQ0(8259) OUT0 RD IOR 刷新电路 OUT1 IOW WR 驱动器 OUT2 A1 A2 A1 A0 CLK0 PB1(8255) CLK1 CLK2 CS +5V 74LS175 PCLK C Q A15 74LS138 +5V D Q A14 74LS30 A13 G1 A12 G2A Y2 A11 A8 G2B A10 A7 C A9 A6 B A5 74LS04 A 8253与计算机的连接 • 8253与计算机的连接
端口 地址 A4 A3 A2A1 A0 A15~A8 A7 A6 A5 通道0 0 0 040H 通道1 0 1 042H 0 0~ 0 0 1 0 X X 1 0 通道2 044H 1 1 控制口 046H 8253与计算机的连接 • 8253与计算机连接说明 • 8253数据线D7~D0接系统数据总线的低8位。 • 8253的A1和A0分别接系统的A2和A1,使用偶地址传递信息 • 由74LS138,74LS30和74LS04译码选中8253
8253与计算机的连接 • 8253三个通道的时钟由PCLK分频得到,频率为:2.38636/2=1.1931816MHz • 在IBM-PC/XT微机系统中,通道0定时OUT0接8259的IR0,通道1刷新动态存储器,通道2控制扬声器发声。
D7 D0 SC1 SC0 RW1 M2 M1 M0 BCD RW0 8253控制字 • 8253控制字及工作方式 (一)8253控制字 控制字写入控制口,说明如下: • SC1 SC0 计数器通道选择 0 0 通道0 0 1 通道1 1 0 通道2 1 1 非法
8253控制字 • RW1 RW0 计数器读写选择 0 0 计数器锁存 0 1 只读写低8位 1 0 只读写高8位 1 1 先低8位,再高8位 • M2M1M0计数器工作方式选择 0 0 0 方式0 0 0 1 方式1 x 1 0 方式2 x 1 1 方式3 1 0 0 方式4 1 0 1 方式5 • BCD 计数器进制选择 • 0 16位二进制计数器 • 1 BCD码计数器
N=4 CW WR CLK OUT FF 0 1 3 2 4 方式0时序图 8253工作方式 (二)8253工作方式 • 模式0 —计数结束产生中断 • 控制字写入后OUT即变为低电平,当计数器为0时,输出OUT变为高电平,并停止现行操作。 • 计数初值写入后在下一个CLK下降沿才送入计数器,因此计数值为N+1。 • 当GATE变为低电平时计数停止,再变为高电平时计数继续进行。 • 若计数过程中重新送入初值,则按新值重新计数。
N=3 CW WR CLK GATE OUT 0 3 2 1 3 2 FF FE 方式1时序图 8253工作方式 • 模式1 — 可重新触发单稳态触发器 • 写入控制字后OUT变为高电平,GATE上升沿后,下一个CLK的下降沿使得OUT为低电平并开始计数,回零时OUT变为高电平。 • GATE再来一次上升沿后会再次使OUT变为低电平,计数器以初值重新计数。 • 再次给通道写入时间常数,不影响现行操作过程,GATE再次触发后才按新的时间常数操作。
CW N=3 WR CLK GATE OUT 1 1 1 2 3 3 2 3 2 方式2时序图 8253工作方式 • 模式2 — 分频器 • 写入控制字后OUT为高电平,输入时间常数后,下一时钟开始计数,减到1时输出变为低电平,经过一个CLK输出变为高电平,计数重新开始。 • GATE=1计数进行,GATE=0计数停止,且下一个CLK下降沿计数器重新赋初值,GATE变为高电平,计数重新开始。 • 计数期间送入新值,本周期继续进行,下一个周期按新值计数操作。
8253工作方式 • 模式3 — 方波发生器 • 写入控制字后OUT为高电平, 输入时间常数后,下一时钟开始计数,计到一半时输出变为低电平,计到终值时变为高电平,并开始下一次计数过程。 • 若N为偶数,高低电平持续时间相等;若为奇数,则高电平持续时间为(N+1)/2,低电平持续时间为(N-1)/2。 • GATE=1计数进行,GATE=0计数停止,OUT为高,计数器重新赋初值,GATE变高,在下一个CLK下降沿计数重新开始。 • 计数期间送入新值,本周期继续进行,下一个周期按新值计数。
CW N=4 WR CLK GATE OUT 4 3 2 1 3 2 4 1 方式3时序图 8253工作方式 • 模式4 — 软件触发选通 • 写入控制字后OUT为高电平,输入时间常数后,下一个时钟周期开始计数,计数器为0时,输出一个周期负脉冲,并停止现行操作。 • GATE=1允许计数,GATE=0禁止计数,GATE不影响输出 • 计数期间送入新的时间常数,则下一个时钟按新值重新计数
CW N=3 WR CLK GATE OUT FC FF FE FD 2 1 0 3 方式4时序图 8253工作方式 • 模式5——硬件触发选通 • 写入控制字后OUT变为高电平,输入时间常数后由GATE上升沿启动计数。计数为0时输出一个时钟的负脉冲,并停止现行操作。 • 计数过程中,若GATE又来一个上升沿,则下一个时钟计数器重新赋值计数
CW N=3 WR CLK GATE OUT 2 1 3 FF 0 FE 1 0 3 2 方式5时序图 8253工作方式 • 计数过程中写入时间常数,当前周期不受影响,只有下一个 GATE上升沿才启动新值计数
8253应用举例 • 8253应用举例 (一)ROMBIOS对8253初始化 • 对计数器0的初始化 MOV AL,36H OUT 46H,AL MOV AL,00H OUT 40H,AL OUT 40H,AL • 说明 • 计数器0工作于方波发生器方式,对CLK(1.1931816MHz)进行65536分频。
8253应用举例 • 计数器0的输出端OUT0接8259的IR0,每次归0产生一次中断请求,中断类型码由BIOS设置为8。 • 中断时间间隔为54.925ms,每秒钟来18.2次中断。 • 通道0的时间间隔是计算机系统时钟基础。 • 对计数器1的初始化 MOV AL,54H OUT 46H,AL MOV AL,18 OUT 42H,AL • 通道1给DMA控制器提供时钟; • 输出频率为66.288KHz。
8253应用举例 • 对计数器2的初始化和接通喇叭 MOV AL,0B6H OUT 46H,AL MOV AX,533H OUT 44H,AL MOV AL,AH OUT 44H,AL IN AL,62H ;读入8255的PB口 MOV AH,AL ;保护原值 OR AL,03H ;置1 PB1和PB0 OUT 62H,AL ;输出
8253应用举例 • 说明 • 定时器2工作在方波发生器方式,驱动扬声器发声; • 发声频率为896Hz; • 扬声器发声还受8255的PB0和PB1控制。
8253应用举例 (二)8253应用 例 由8253的计数器0定时55ms 控制扬声器变调发声,响5.5秒后停止。 • 说明 • 8253计数器0的OUT0接8259的IR0,由ROMBIOS初始化,中断类型码为08H,并在完全嵌套方式下工作。 • 8253计数器0由ROMBIOS设置为模式3,定时时间为55ms。 • 扬声器发声由8253的计数器2控制发声频率,发声允许由8255的PB0和PB1控制。
8253应用举例 • DOS功能调用25H号子功能为设置中断向量。 • 入口参数 AH=25H,AL=中断类型码 DS:DX 中断服务程序入口地址 • 返回参数:无 • DOS功能调用35H号子功能为取中断向量 • 入口参数 AH=35H,AL=中断类型码 • 返回参数 ES:BX 中断服务程序入口地址
8253应用举例 • 中断服务程序为INT_08H • 保护现场和恢复现场; • 中断返回前要开中断并发EOI; • 中断返回IRET。 • 每次定时器0中断使扬声器的发声频率的分频常数增加100,并使计数变量count增1。 • 主程序查询count到100后停止扬声器发声,恢复中断向量,程序退出。
8253应用举例 mov ds, ax mov al, 0b6h out 43h, al mov ax, constant add ax, 100 mov constant, ax out 42h, al mov al, ah out 42h, al inc count mov al, 20h ;发EOI out 20h, al pop ds pop ax sti iret Int_08h endp main proc far mov ax, data mov ds, ax cli mov ah, 35h mov al, 08h int 21h mov word ptr old_int08h, bx mov word ptr old_int08h[2], es data segment old_int08h dd ? count dw 0 constant dw 60 state db ? data ends st_seg segment stack db 256 dup (?) st_seg ends code segment assume cs:code,ds:data Int_08h proc far push ax push ds mov ax, data
8253应用举例 jc main1 mov al, state ;恢复8255状态 out 61h, al mov ah, 25h ;恢复原中断向量 lds dx, old_int08h mov al, 08h int 21h mov ax, 4c00h ;返回操作系统 int 21h main endp code ends end main push cs ;设置新中断向量 pop ds mov ah, 25h mov dx, offset int_08h mov al, 08h int 21h mov ax, data mov ds, ax in al, 61h ;打开8255控制 mov state, al or al, 3 out 61h, al sti main1: mov ax, count cmp ax, 100 ;判断5.5S是否到