本文的内容本来是打算放在我刚出版的《专业嵌入式软件开发 — 全面走向高质高效编程》一书中的。但后来由于将该书定位为偏向软件,所以将本文所在的章全部删除了,打算将之放在我另一本偏向硬件的书中。最近,由于网友在我的博客空间中问起如何通过3/8译码器扩展地址空间,所以在此将之整理与大家分享。
假设我们希望实现图1所示的采用3/8译码器将处理器的CS1片选信号扩展成两个以分别控制以太网芯片和Flash芯片。为了方便解释,进一步假设CS1的片选空间是0xFFE00000~0xFFFFFFFF。我们希望经过片选扩展以后,Flash位于0xFFE00000~0xFFEFFFFF地址空间,而以太网芯片位于0xFFF00000~0xFFFFFFFF地址空间。
图1
先来说一说3/8译码器的功能是什么,从名字来看就是将3位比特转换为8(2的3次方)根独立的信号线。3/8译码器有三根输入信号线(图1中74LS138的A、B和C)和八根输出信号线(Y0~Y7)。注意:图1中如在管脚名称上加了一条横线则表示该信号是低电平有效,否则是高电平有效。
图 2是74LS138译码器的真值表,其表达了输入与输出之间的对应关系,表中的“X”表示信号是高阻态。从图中可以看出,这一3/8译码器的作用,其实就是将CBA的二进制数值分别转换为Y0~Y7中一根线的低电平信号。从图 1中的原理图来看,CS1与G1是相连的,即只有当CS1为高电平有效时,Y0~Y7才会有低电平信号输出。另外,Y6和Y7是被用作片选信号扩展的两根管脚,当Y6为低电平时,CBA三根信号线的电平组合分别是110,而Y7为低电平时CBA的组合变为了111。如何将CBA三根信号线与处理的地址线连接,以实现片选信号扩展呢?
图2
图 3列出了Flash和以太网芯片各自开始地址所对应的比特位,其中只列出了四个比特。可以看出,A20地址线将能决定是选择哪一块芯片。如果将A22与74LS138的C相连、A21与74LS138的B相连以及A20与74LS138的A相连,则完全可以实现将Y6和Y7作为两个片选信号,且各片选信号的地址空间也是我们所希望的。
图3
阅读(3347) | 评论(0) | 转发(0) |