《微机接口技术第3章IO端口地址译码技术.ppt》由会员分享,可在线阅读,更多相关《微机接口技术第3章IO端口地址译码技术.ppt(31页珍藏版)》请在三一办公上搜索。
1、第3章 IO端口地址译码技术,3.1 I/O地址空间和存储器地址空间一样,IO地址空间也是一片连续的地址单元。地址单元可以被任何外设使用,但不可以地址冲突。和存储单元一样,都是以数据字节来组织的。,3.1 I/O端口一。IO端口及其编码方式1.IO端口端口是接口电路中能被CPU直接访问的寄存器的地址。计算机给接口电路中的每个寄存器分配一个地址。IO操作 指CPU对设备相关的IO端口的访问操作,而不是对IO设备的操作,二。IO端口地址编码方式1、统一编址方式端口地址与存储器地址统一编址,优点:指令丰富,电路简单。,缺点:外设占用存储器空间,内存容量减小。,内存译码器,8088 CPU(最大模式)
2、系统总线,AB,去存储器,去I/O接口,/Y0-i,/Y0-j,接口译码器,/XMENR/XMEMW,/XIOR/XIOW,注:最大模式下系统的控制总线来源于总线控制器8288和DMA总线仲裁逻辑,2、独立编址方式,优点:存储器和外设都有自己的地址译码器,地址空间独立,互不影响。用专用的I/O 指令访问I/O 端口。三。独立编址方式的端口访问,输入指令:IN AL,n;n 为8位IO端口地址,IN AL,DX;16位地址用DX间址,输出指令:OUT n,AL,OUT DX,AL,1.IO地址宽度 IO地址在00H0FFH,称为8位地址宽度;IO地址在0100HFFFFH,称为16位地址宽度说明
3、:不论IO地址宽度是8位,还是16位,都 可以用DX间接寻址;只有IO地址是8位宽度才能直接寻址。2.IO 数据宽度 当一次传输1个端口数据,即8位数据时,用AL累加器 当一次传输连续2个端口数据,即16位时,用AX累加器,3.3 IO端口地址分配 一。IO接口硬件分类 系统板(主板)上的IO芯片(如定时器,并口等等)IO扩展槽上的接口控制卡(声卡、网卡、软驱卡、显卡)二。IO端口地址分配参看表3.1 表3.2 三。IO端口地址选用的原则被系统配置已经占用的不可用计算机厂家声明保留的地址不要使用一般IBM实验卡用300H-31FH。,3.4 I/O 端口地址译码,一。IO地址译码电路工作原理及
4、作用 输入信号:地址信号,控制信号 输出信号:“选中”信号。原理:译码器根据地址和控制信号,产生选中信号。不同的地址控制组合,最多只可能使一根“选中”信号有效,该有效的选中信号用于打开它所连接的IO接口芯片的数据线与系统线的通路总开关。,地址译码器,地址信号,控制信号,“选中”信号,“地址”信号线,“控制”信号线,“选中”信号线,在这一段时间,3个控制信号没有同时有效,译码器“选中”信号线输出全部无效,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,控制信号有效时,地址000时,仅/IOY0有效。其余选中线全无效,二。I/O 端口地址译码方法:1
5、.简单接口芯片,只含有一个端口,内部不带带译码器,译码器设计原则:由“IO地址”信号和“IO读/写”控制信号的不同组合实现。控制芯片内寄存器的入口或出口开关。,T1,T2,T3、TW,T4,0026H号IO端口地址,来自CPU内AL中的数据,向IO端口写数据时(OUT 0026H,AL)系统总线时序(假设(AL)=22H),CLK,XA15-0,XREADY,XD7-0,0026H,22H,T1,T2,T3、TW,T4,0025H号IO端口地址,来自0025H号IO端口的数据,从IO端口读出数据(IN AL,0025H)时系统总线时序(25H端口)=11H),CLK,XA15-0,XREADY
6、,XD7-0,11H,0025H,控制线始终保持有效或不带控制线,二。I/O 端口地址译码方法:2.多端口芯片(内部带译码器)由地址信号和控制信号的不同组合实现。其原则是:,(2).低位地址线直接连接到 I/O 接口芯片,由内部译码器实现选中存储单元或IO端口。例如:8255内部有四个端口寄存器,则至少要留出2低位地址线用于8255内部寻找寄存器,(1).高位地址与CPU 的控制信号组合,经外部译码电路产生 I/O 接口芯片的片选信号(/CS),实现选中芯片(就是打开芯片内部译码器)。,3.5 IO端口地址译码电路设计1.固定式端口地址译码指一旦译码电路设计好,接口用到的IO地址不能更改,例1
7、 某接口的IO端口地址为2F8H,在非DMA期间只读,为该接口设计译码器。分析:输入信号:XA0XA9,XIOR,XAEN输出信号:一根选中信号/Y(因为该译码器仅为这一个接口电路服务)输入输出逻辑关系:,/Y,当XA9-02F8H,/XIOR0,XAEN0时,/Y=0;否则/Y=1写出逻辑表达式:,例2。使用74LS138设计一个系统板上IO端口地址译码电路,并且让每个接口芯片内部可以有32个端口,非DMA期间可以访问接口芯片。分析:输入 XA9-5,XAEN。因为低5位地址用来选中芯片内部端口,不作为外部译码器的输入。一片138只能译码3位地址,这里用138对XA7XA5译码。输出 8个芯
8、片选中信号/Y0-/Y7。逻辑关系:XAEN0,XA9XA800时,使译码器工作。XA7-XA5000时,输出/Y0=0,其余全无效为1。XA7-XA5001时,输出/Y1=0,其余全无效为1 XA7-XA5010时,输出/Y2=0,其余全无效为1,参看课本表2.5 74LS138的逻辑真值表,给出设计如下,2.可选式端口地址译码例3。根据下图的可选式地址译码电路,分析开关不同状态时,输出选中信号对应的IO地址,总结:为单个端口设计译码,一般对所有地址线译码;为芯片设计外部译码器,一般对高位地址译码,低位地址让芯片自己内部译码,选内部端口,S0,S1,S2,S3,A,74LS138,/Y0,B
9、/Y1,C/Y2,/Y3,/Y4,/G2B/Y5,/G2A/Y6,G1/Y7,XA2,XA3,XA4,XA5,/XAEN,A0,74LS85,A1,A2,A3,B0,B1,B2,B3,Oa=b,Ia=b,Iab,Iab,Vcc,XA6,XA7,XA8,XA9,分析:假如S0S1合上,S3S2断开。B3-01100,只有当XA961100时,74LS85Oa=b端才输出1。必须要使74LS138工作,则必须/XAEN0,XA50。所以:要/Y0=0,必须 XA9-2为11000000 要/Y1=0,必须 XA9-2为11000001,选中/Y0的地址是XA90为 11000000XX,即300H
10、303H选中/Y1的地址是XA90为 11000001XX,即304H307H选中/Y7的地址是XA90为 11000111XX,即31CH31FH思考,如果开关S1S3合上,S2S0断开,选中/Y0-/Y7的地址分别是什么?,思考:在PC机上设计接口,你设计的接口IO地址必须不能与其他设备接口IO地址冲突,你能想到用什么办法解决这个问题?,方案一:先查PC机硬件说明书,看那些IO地址已经被占用。缺点是麻烦,且非PC机器厂家生产的设备(如扩展接口卡)地址,必须通过查该卡说明书才能了解它占用的IO地址。,不可能!你怎么知道你的卡被客户装在哪台机器上?客户计算机上装了哪些其它厂家的卡,你怎么能预先
11、知道呢?客户买了你的卡回家能不能用只有靠运气了!,方案二:先查PC机硬件说明书,看哪些IO地址已经被PC机厂家的标准设备占用。再设计一个可选式译码器,万一和其它厂家的设备接口冲突,用跳线开关改变你的IO地址用以避免冲突缺点:麻烦,普通客户买了你的设备,你要求他回家跳线,对他来说难度太大。在486以前的计算机开发接口就是这么办的!也要靠运气哦,万一怎么调整也无法避免冲突怎么办?,方案三:设计一种系统总线接口,任意一种新设备接口只要告诉总线接口需要多少IO地址,由系统总线接口自动给你分配所需数量的IO地址且不和已占用的IO地址冲突。总线接口统管计算机中所有IO地址的分配。只要我们能按照这种总线接口设计译码器,就能保证我们的卡插上任何一台这种总线的计算机就能用,绝对不会有地址冲突现象发生,这就是“即插即用”设计技术!,