总线
- 芯片总线
- 内总线
- 外总线
数据传输四个阶段
- 总线请求和仲裁
- 寻址
- 数据传送
- 结束
- RAM
- SRAM
- DRAM
- NVRAM
- ROM
- MROM
- PROM
- EPROM
- EEPROM
- 位扩充:扩充数据位
- 字扩充:扩充容量 用部分地址线选芯片
- 全译码:片选+片内
- 部分译码:部分高位地址片选
- 线选译码:一根线表示01
- 单独编码
- 统一编码
- 程序控制
- 无条件
- 查询
test al,01h;检查端口 - 中断
- DMA
- I/O处理机
- 中断请求
- 中断响应
- 关中断
- 断点保护
- 中断识别
- 现场保护
- 中断服务
- 恢复现场
- 开中断
- 中断返回
- 内部中断:异常
- 触发错中断
- 指令中断
INT N - 溢出中断
INTO - 单步中断 TF
- 外部中断:中断
- NMI 向量号为2
- INT:IF
方式
- 计数结束中断
- 可编程单稳脉冲
- 频率发生器(分频器)
- 方波发生器
- 软件触发选通信号
- 硬件触发选通信号
每种工作方式的过程类似:
- 设定工作方式
- 设定计数初值
- (硬件启动)
- 计数初值进入减1计数器
- 每输入一个时钟计数器减1的计数过程
- 计数过程结束
$A_3A_2A_1A_0$
- 清除高/低触发器软件命令
-
$A_3A_2A_1A_0$ =1100,使高/低触发器清零
-
- 主清除命令
-
$A_3A_2A_1A_0$ =1101,使高/低触发器清零 - 还使命令、状态、请求、临时寄存器清零
- 使屏蔽寄存器置为全1(禁止DMA请求)
- 主清除命令与硬件的RESET信号具有相同的功能
-
- 清屏蔽寄存器命令
-
$A_3A_2A_1A_0$ =1110,使4个屏蔽位都清零(允许DMA请求)
-
-
请求传送方式
- DREQ有效就传送 无效就暂时中止
- 直到字节数寄存器为FFFFH或外部信号终结
- 可由外设利用DREQ控制传送过程
-
单字节传送方式
- 每次传送一个字节后 交还系统总线控制权
- 效率低
-
数据块传送方式
- 由DREQ启动就传送数据
- 直到字节数寄存器为FFFFH或外部信号终结
- 效率高
- CPU长时间无法控制总线
-
级联方式
- 第二级的HRQ和HLDA连到第一级某通道的DREQ和DACK上
- 实际操作由第二级芯片完成
- 第二级芯片优先权与所连2通道优先权对应
方式
- 基本输入输出方式
- 适用于无条件传送和查询方式的接口电路
- 选通输入输出方式
- 适用于查询和中断方式的接口电路
- 双向选通传送方式
- 适用于与双向传送数据的外设
- 适用于查询和中断方式的接口电路
ICW固定写入顺序 OCW无写入顺序
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| X | X | X | 1 | LTIM | X | SNGL | IC4 |
| 建议为0 | 作为标志 | 中断触发方式 | 单片或级联方式 | 是否写入ICW4 |
中断触发方式
- 边沿触发
- 电平触发
SNGL:
- 级联
- 单片
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| T7 | T6 | T5 | T4 | T3 | X | X | X |
设置中断向量号
- T7~T3为中断向量号的高5位
- 低3位由8259A自动确定
- IR0为000、 IR1为001、……、IR7为111
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| S7 | S6 | S5 | S4 | S3 | S2/ID2 | S1/ID1 | S0/ID0 |
级联命令字
- 主片8259A:$S_i=1$对应$IR_i$有从片
- 从片8259A:ID0~ID2编码说明从片INT引脚接到主片的IR引脚
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | SFNM | BUF | M/S | AEOI | $\mu$PM |
| 嵌套方式 特殊(1)/普通(0)全嵌套 |
缓冲方式:缓冲(1) | M/S* | AutoEOI |
$\mu$PM:微处理器类型
- 8位8080/8085
- 16位80x86
普通全嵌套:
- 8259A的中断优先权顺序固定不变
- 中断请求后,8259A对当前请求中断中优先权最高的中断IRi予以响应,将其向量号送上数据总线,对应ISR的Di位置位,至到中断结束(ISR的Di位复位)
- 在ISR的Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0 |
屏蔽命令字 Di=Mi对应IRi
为1禁止IRi中断
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| R | SL | EOI | 0 | 0 | L2 | L1 | L0 |
| 产生中断 | 结束EOI命令 | 和改变优先权顺序 | 指定 | IR | 引脚 |
R SL EOI 为一组
L2~0为一组
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| 0 | ESMN | SMM | 0 | 1 | P | RR | RIS |
| 设置中断 | 屏蔽方式 | 规定随后读取 | 状态字 | 含义 |
ESMN SMM一组
P RR RIS一组
-
$A_0$ 为低 OCW3中RR和RIS设定读取IRR或ISR P设定为读取查询字 -
$A_0$ 为高 读取都是IMR
查询字反应8259A是否有中断请求
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| I | W2 | W1 | W0 | ||||
| 是否有外设请求中断 | 当前中断请求 | 的 | 最高优先级 |
| CS* A1 A0 | I/O地址 | RD* | WR* |
|---|---|---|---|
| 0 0 0 | 40H | Read Cnt0 | Write Cnt0 |
| 0 0 1 | 41H | Read Cnt1 | Write Cnt1 |
| 0 1 0 | 42H | Read Cnt2 | Write Cnt2 |
| 0 1 1 | 43H | NOP | 写控制字 |
写入控制字I/O地址
$A_1A_0=11$
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| 计数器 | 读写格式 | 工作方式 | 数制 | ||||
计数器:
| 00 | 01 | 10 | 11 |
|---|---|---|---|
| 计数器0 | 计数器1 | 计数器2 | 非法 |
读写格式:
| 00 | 01 | 10 | 11 |
|---|---|---|---|
| 计数器锁存 | 低字节only | 高字节only | 先低字节后高字节 |
工作方式:000-101 方式0-5
数制
- binary
- BCD
通道的方式控制字
最低二位选择通道
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
|---|---|---|---|---|---|---|---|
| 传送方式 | 地址增量 | 自动初始化 | 传送类型 | 通道 | |||
传送方式:
| 模式 | |
|---|---|
| 00 | 请求 |
| 01 | 单字节 |
| 10 | 数据块 |
| 11 | 级联 |
地址增量
0 自增
1 自减
工作方式
| 传送类型 | |
|---|---|
| 00 | DMA校验 |
| 01 | DMA写 |
| 10 | DMA读 |
| 11 | 非法 |
存放8237A的命令字
影响每个DMA通道
复位清零
D2=1设置8237A为DMAC
| 位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| 标志 | DACK | DREQ | 写 | 优先权 | 时序 | DMAC | 通道0地址改变 | 存储器间传送 |
| 1 | 高有效 | 低有效 | 扩展写 | 循环 | 压缩 | 禁止DMAC工作 | 禁止 | 允许 |
| 0 | 滞后写 | 固定 | 正常 |
| CS* A1 A0 | I/O地址 | RD* | WR* |
|---|---|---|---|
| 0 0 0 | 60H | Read PA | Write PA |
| 0 0 1 | 61H | Read PB | Write PB |
| 0 1 0 | 62H | Read PC | Write PC |
| 0 1 1 | 63H | 非法 | 写控制字 |
- 8259A开始工作前,必须进行初始化编程:
- 给8259A写入初始化命令字ICW
mov al,11h ;写入ICW1
out 20h,al
jmp intr1
intr1: mov al,08h ;写入ICW2
out 21h,al
jmp intr2
intr2: mov al,04h ;写入ICW3
out 21h,al
jmp intr3
intr3: mov al,1h ;写入ICW4
out 21h,almov al,36h;00110110B
;计数器0为方式3,采用二进制计数,
;先低后高写入计数值
out 43h,al ;写入方式控制字
mov al,0 ;计数值为0
out 40h,al ;写入低字节计数值
out 40h,al ;写入高字节计数值mov al,54h
;计数器1为方式2,采用二进制计数,只写低8位计数值
out 43h,al ;写入方式控制字
mov al,18 ;计数初值为18
out 41h,al ;写入计数值- 写入命令寄存器
- 可先输出主清除命令 进行软件复位
- 然后写入命令字
MOV AL,10011001B;99H 方式控制字
OUT 63H,AL