并行接口8255A
首先,它是传输并行数据的,与CPU一样,然后,它是可编程的,也是多功能的,CPU可以对其进行一些控制。
管脚
先从最宏观层面分类
- 一部分引脚与外设相连
- 一部分引脚与CPU相连
- GND和Vcc
注意:该芯片没有时钟(clk
)信号!
关于并行,这里也清楚了,因为使用的是多根总线,与CPU一样的,数据不是一位一位传输而是并行传输的吧!
然后,我们再来按照这个分类,看看管脚的细节。
- 黄色部分是与外设相连的A、B和C三个并行端口,能够传输8位二进制数。
- 红色部分是电源和地
- 紫色部分是读写控制逻辑,由CPU发出控制命令,是单向的
- 蓝色部分是端口地址,也是读写控制逻辑的一部分,是单向的,用于选择接口内的4个寄存器
- 肉色部分是与CPU数据总线相连的,CPU通过它来给接口发送二进制数,进而控制接口和外设
跟这个图对比下不难发现,8255A的相关引脚功能,都有完整的体现。
进一步放大细节:8255A的结构
之前我们把接口芯片当作黑箱子,只看了外部引脚和它连接的器件,现在,我们来看看它的内部结构,这个结构依旧在一个抽象层面。
我们给它分分类,再逐一理解和展开。
接口内部:4个寄存器
我们知道接口一个重要的功能就是数据缓冲,以解决外设和CPU速度严重不匹配的问题,所以,接口内部一定有存储数据的器件。
在8255A中,是4个8位存储器。
那么,寄存器的内容,是数据、控制还是状态? 不一定!因为8255A是可编程的,信息的含义是可以改变的。
我们现在只需要知道,8255A有4个存储器,每个存储器能够存储8位二进制数,并且对应了4个端口地址,以便于外部访问它们。
它也有一个初级的分类
- ABC三个端口寄存器,是与外设相连的
- 控制字寄存器,是接口内部的,专门用于 “ 被编程 ” 的
与CPU交互的部分:数据传送与读写控制
毫无疑问,读写控制逻辑,是决定了D0 ~ D7
的数据能否进行读写的,我们看功能表。
对于地址控制端,是A1A0
可以选中4个存储器,具体对应关系看表。
然后就是~RD ~WR ~CS
三个信号,分别是读、写和片选,控制逻辑看表即可。
我们很容易知道,数据什么时候写入/读取哪个寄存器的值,特别注意,控制字是只写不可读的。
另外,数据总线是双向的,读写控制逻辑的单向(CPU --> 接口)的。
至于RESET
复位信号,不需要解释,就是clear寄存器。
现在,我们已经明白了CPU与接口之间信息的基本交互控制方式了。
接口与外设的交互
下面,我们看看接口和外设之间的交互。
这个事情很简单,也有些复杂。
很明显,我们宏观上的理解是
对吧,就是这样的,三个端口,对应3个外设嘛,端口的二进制位都是数据。
复杂的是,有的时候,端口C的二进制位代表的是状态,它被添加到A、B端口二进制位中,作为补充信息描述A、B端口的、除了数据之外的其他信息。
这也是芯片多功能的体现。
我们逐一去分析,就能明白了。
控制字的作用
我们现在知道一些事实
- ABC三个端口,还有D,都是双向的
- 8255A是多功能的
那么问题来了,这几个端口,什么时候输入?什么时候输出?芯片什么时候采用什么功能?如何选择功能?
因此我们需要一个控制器,来控制我们需要控制的东西,这个东西就是控制字寄存器,它有8位,不同的位代表不同的信息,我们通过编码,就能完成上述我们需要的功能的选择。
具体控制字如何控制的?不同编码下,不同器件的功能又是什么?信息又是什么含义?我们之后展开。
最后一个发现:8255A就是组合逻辑和状态器件的组合
我们可以发现,8255A没有时钟信号,只是一些组合逻辑,再加上一些暂存信息的器件,这很神奇,这说明它更多地,我们需要思考的是功能的设计,组合逻辑电路实现起来也不是那么困难不是吗?
这个芯片的最底层本质,就是组合逻辑电路,又加了一些存储器件,就是如此简单!