核心
对于一个多功能可编程接口芯片,我们要想使用它,必须
- 先确定需求,要用什么芯片去干什么
- 设置芯片的工作方式
- 然后再让芯片工作
至于设置的方式,当然是软件编程。
同时重点注意,例如8255A,它一次只能写8位数据,像多干活,就多写几次就好了,反正速度快。需要理解不是一次性完成就好。
与CPU控制接口的方式结合理解
- 无条件
- 查询
- 中断
- DMA
前提
CPU能够对接口进行读写控制,通过IO译码能够选中端口地址,进行数据读写。
控制字的编码含义
我们将8位控制字编码拆开看!
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
1 | x | x | x | x | x | x | x |
0 | x | x | x | x | x | x | x |
首先看最高位D7
- D7 = 1:方式选择控制
- D7 = 0:C端口置0置1控制
方式选择控制
对于方式选择控制,我们拆开看
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||
---|---|---|---|---|---|---|---|---|---|
1 |
- 最高位是1
- D6~D3:A组控制
- D2~D0:B组控制
A组控制
D6 | D5 | D4 | D3 |
---|
- D6D5:A组的方式选择(很好记,与二进制的十进制值一样)
- 00:方式0
- 01:方式1
- 10、11:方式2
- D4:A端口输入输出控制
- D3:C端口高4位输入输出控制
B组控制
D2 | D1 | D0 |
---|
- D2:B组方式选择
- 0:方式0
- 1:方式1
- D1:B端口输入输出控制
- D0:C端口低四位输输出控制
一些通用法则
- A组和B组控制是相互独立的
- 端口的输入,就是1(input的i就像1);端口输出,就是0(output)
- 方式的选择,二进制的十进制值与方式对应
- A、B端口只能作为输入或输出,用于传送外设数据
- C端口不同方式下的含义不同
- 可以设置
D7 = 0
来设置C寄存器的每一位的值 - 方式0下是作为独立的输入输出的
- 其他方式下,作为A组或B组的补充信息位,用于表示A端口或B端口传送状态,空闲位仍可以独立使用
- A组与B组的工作方式可以不一样,因此C端口的高4位和低4位的作用也可以不一样,相互独立
- 可以设置
- 如果没有用到,就写0,当然这只是习惯。
总之,二进制编码分开看待,相互独立,不同情况下含义不同,一样分开看,就什么都能看清楚了。
C端口置0置1控制
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
---|---|---|---|---|---|---|---|---|---|---|
0 | x | x | x |
- x可以直接都写0就好
- D3D2D1:3位编码对应C端口的8个二进制位,用于选中某一位
- D0:0的时候将选中的位置0,1的时候置1
这个控制字的作用,就是控制C端口某一位的值的,如果有单独控制的需要,就设置就好了。
- 可能是设置空闲位
- 也可能设置状态位
对待每种工作方式的思考点
- 接口:如何设置,原理和功能
- CPU :如何控制,控制方式,汇编指令
- 外设:能干啥(数据肯定行,但是响应信号之类的呢?它能不能干,能不能用?)
其实也就这些了,还是内3个器件,4个箭头的事儿。
接下来,将会具体阐述每个工作方式下,二进制编码的含义。
见下一篇。