微机原理与接口技术-第六章

第5章数字量输入 输出接口 5 1概述 一 接口电路的分类和功能 外设必须通过接口电路与CPU相连接 数据总线 控制总线 地址总线 接口电路 外部设备 数据线 控制线 状态线 5 1 2I O接口 接口电路的功能 1 缓冲锁存数据2 地址译码3 传递命令4 码制转换5 电平转换 接口电路按通用性分为两类 通用接口和专用接口通用接口 可供多种外部设备使用的标准接口 目的是使微机正常工作通用接口通常制造成集成电路芯片 称为接口芯片 最初的IBM PC使用了6块接口芯片 8284 8288 8255 8259 8237 8253后来的微机将这些芯片集成为大规模集成电路芯片 称为芯片组 如82430TX芯片组 由两片芯片组成 北桥 82439TX南桥 82371AB 接口电路的基本结构 接口电路通常包含一组能够与处理器交换信息的寄存器 称为I O端口寄存器 简称为I O端口1 数据端口 存放数据信息2 状态端口 存放状态信息 忙 空闲 准备好等机器状态 即反映外设当前工作状态的信息3 控制端口 存放控制信息 启动 停止等动作 状态信息与控制信息可以广义地看作数据信息 因此可以通过数据总线传送 数据信息分数据量 模拟量和开关量三类 接口电路组成 5 1 3I O端口及其编址方式 一 I O端口和I O操作1 I O端口端口 port 是接口电路中能被CPU直接访问的寄存器的地址 CPU通过这些地址即端口向接口电路中的寄存器发送命令 读取状态和传送数据 因此 一个接口可以有几个端口 如命令口 状态口和数据口 分别对应于命令寄存器 状态寄存器和数据寄存器 I O操作 通常所说的I O操作是指对I O端口的操作 而不是对I O设备的操作 即CPU所访问的是与I O设备相关的端口 而不是I O设备本身 端口地址编址方式 对上述端口有两种编址方式 一种是端口地址和存储器地址统一编址 即存储器映射方式 另一种是I O端口地址和存储器地址分开独立编址 即I O映射方式 1 统一编址这种方式 是从存储器空间划出一部分地址空间给I O设备 把I O接口中的端口当作存储器单元一样进行访问 不设置专门的I O指令 有一部分对存储器使用的指令也可用于端口 2 独立编址这种方式是接口中的端口地址单独编址而不和存储空间合在一起 大型计算机通常采用这种方式 统一编址优点 1 由于对I O设备的访问是使用访问存储器的指令 所以指令类型多 功能齐全 这不仅使访问I O端口可实现输入 输出操作 而且还可对端口内容进行算术逻辑运算 移位等等 2 另外 能给端口有较大的编址空间 这对大型控制系统和数据通信系统是很有意义的 这种方式的缺点是端口占用了存储器的地址空间 使存储器容量减小 另外指令长度比专门I O指令要长 因而执行速度较慢 独立编址主要优点是 1 I O端口地址不占用存储器空间 使用专门的I O指令对端口进行操作 I O指令短 执行速度快 2 并且由于专门I O指令与存储器访问指令有明显的区别 使程序中I O操作和存储器操作层次清晰 程序的可读性强 3 同时 由于使用专门的I O指令访问端口 并且I O端口地址和存储器地址是分开的 故I O端口地址和存储器地址可以重叠 而不会相互混淆 I O端口与存储单元统一编址 51单片机 I O端口独立编址 INTEL86系列 独立编址方式的端口访问 1 I O指令中端口地址的宽度IBM PC系列采用I O指令访问端口 实现数据的I O传送 在I O指令中可采用单字节地址或双字节地址寻址方式 若用单字节地址作为端口地址 则最多可访问256个端口 是直接在指令中给出端口地址 其指令格式为INAL PORT 输入OUTPORT AL 输出这里 PORT是一个8位的字节地址 若用双字节地址作为端口地址 则最多可寻址216 64K个端口 采用双字节地址 并且是用寄存器间接给出端口地址 地址总是放在寄存器DX中 其指令格式为MOVDX xxxxHINAL DX 8位传送MOVDX xxxxHOUTDX AL 8位传送这里 xxxxH为16位的两字节地址 I O端口访问 所谓对端口的访问就是CPU对端口的读 写 而通常所说的微处理器CPU从端口读数据或向端口写数据 仅仅是指I O端口与CPU的累加器之间的数据传送 并未涉及数据是否传送到存储器 RAM 的问题 例如 输入时MOVDX 300H I O端口INAL DX 从端口读数据到ALMOV DI AL 将数据从AL存储器输出时MOVDX 301H I O端口MOVAL SI 从内存取数到ALOUTDX AL 数据从Al送端口 I O端口地址分配 对于接口设计者来说 搞清楚系统I O端口地址分配十分重等 因为要把新的I O设备加入到系统中去就要在I O地址空间中占一席之地 哪些地址已分配给了别的设备 哪些是计算机制造商为今后的开发而保留的 哪些地址是空闲的 了解了这些信息才能为我所用 下面以IBM PC系列为例来分析I O端口地址分配情况 不同的微机系统对I O端口地址的分配是不同的 PC微机是根据上述I O接口的硬件分类 把I O空间分成两部分 虽然 PC微机I O地址线可有16根 对应的I O端口编址可达64K 但由于IBM公司当初设计微机主板及规划接口卡时 其端口地址译码是采用非完全译码方式 即只考虑了低10位地址线AO A9 而没有考虑高6位地址线A10 A15 故其I O端口地址范围是0000H 03FFH 总共只有1024个端口 并且把前512个端口分配给了主板 后512个端口分配给了扩展槽上的常规外设 I O端口地址选用的原则 只要设计I O接口电路 就必然要使用端口地址 为了避免端口地址发生冲突 在选用I O端口地址时要注意 凡是被系统配置所占用了的地址一律不能使用 原则上讲 未被占用的地址 用户可以使用 但对计算机厂家申明保留的地址 不要使用 否则 会发生I O端口地址重叠和冲突 造成用户开发的产品与系统不兼容而失去使用价值 一般 用户可使用300 31FH地址 用户可以使用 但是 由于每个用户都可以使用 所以在用户可用的这段I O地址范围内 为避免与其他用户开发的插板发生地址冲突 最好采用地址开关 I O端口地址译码 CPU为了对I O端口进行读写操作 就需确定与自己交换信息的端口 寄存器 那么 是通过什么媒介把来自地址总线上的地址代码翻译成为所需要访问的端口 寄存器 的 这就是所谓的端口地址译码问题 这个 媒介 就是I O地址译码电路 5 1 4I O的控制方式 1 程序传送方式2 中断传送方式3 DMA传送方式 无条件传送程序查询传送 条件传送 一 程序传送方式 一 无条件传送 CPU与外设间的数据交换在程序控制下进行 不查询外设状态 认为外设已经准备就绪 直接与外设传送数据 外设准备就绪 对于输入设备 已经把数据放入接口电路的数据输入寄存器 CPU可以读取 对于输出设备 已经准备好接收数据 接口电路的数据输出寄存器已空 CPU可以向它输出数据 由于不查询外设状态 接口电路不需要状态寄存器 输入方式 输出方式 INAL 0A0H OUT0A1H AL A1 例 采用同步传送系统 查询式输入接口电路 二 条件传送 查询式输出接口电路 Poll Inal S portTestal 80hJnzpollmoval storeOutD port al 例 采用查询方式传送的数据采集系统 Start movdl 0f8h 1111 1000启动A D转换leadi detor 输入数据存放地址Again moval dl andal 0efh 1110 1111 AL 1110 1000out 4 al 停止A D转换 并选择模拟量A0calldelay moval dl AL 1111 1000out 4 al 启动A D转换 poll inal 2 输入状态信息shral 1 jncpoll 若未Ready 等待inal 3 否则 输入数据stosb 将数据存入内存incdl 取下一个模拟量jneagain 状态端口 程序查询传送的小结 在执行输入输出前 要先查询接口中状态寄存器的状态 输入时 状态寄存器的状态指示要输入的数据是否已经准备就绪输出时 状态寄存器的状态指示输出设备是否空闲 图1 6程序查询方式流程图 二 中断传送方式 使用查询方式 CPU必须检测接口电路的状态寄存器 如果设备未准备好 CPU就要不断地查询 降低了CPU的运行效率中断方式 当外设作好传送准备后 主动向CPU请求中断 CPU响应中断后在中断处理程序中与外设交换数据 若外设未准备好 CPU可以执行其他程序 提高了CPU的利用率每条指令完成后 CPU均可响应中断 因此当设备准备好时 可及时与CPU交换数据 提高了实时性 查询式输入输出方式是通过对外设的状态查询 实现CPU与外设间的正确的输入输出操作 从而使不同工作速度的外设可以和CPU协调工作 由于查询过程中 CPU实际上处于等待状态 不能进行其它操作 降低了CPU的效率 特别是当外部设备输入输出速度较低时 如键盘 打印机等 CPU为了完成一次输入输出操作 用于查询的时间要比实际用于输入输出指令的执行时间要长得多 从而造成CPU的极大的浪费 因此 提出了中断传送方式 中断输入输出方式的思想是 当CPU需要输入输出数据时 先执行启动外设工作的指令 然后CPU继续执行原程序 如果是输入操作 当输入数据已存入外设接口的输入寄存器中时 或是输出操作 当外设已经把前一个输出数据从接口寄存器中取走 就由外设向CPU发出中断请求 CPU在收到中断请求信号后 就暂时停止原来执行的程序 即实现中断 转去执行输入或输出处理程序 三 DMA传送方式 对于高速外设 如磁盘 高速A D 中断方式不能满足数据传输速度的要求 DMA DirectMemoryAccess 直接存储器访问DMA方式是一种由专门的硬件电路执行I O的数据传送方式 它可以让外设接口直接与内存进行高速的数据传送 而不必经过CPU 这种专门的硬件电路称为DMA控制器 简称DMAC 中断输入输出方式可以大大提高CPU的效率 但仍需要CPU通过程序进行传送 每次中断处理需要保护断点 保护现场及恢复现场恢复断点 这些操作都要占用CPU的额外时间 这对于高速的外部设备在成批地交换数据时 这种中断传送方式 就显得太慢 因而不能满足高速交换数据的要求 DMA方式能摆脱CPU的直接干预 利用硬件控制设备DMA控制器 DMAC 实现外部设备与内存间的直接数据传送 几种传送方式的比较 1 无条件传送 只能用于外部设备与CPU动作同步时 否则出错 这种方式已较少使用 2 查询传送 接口简单 但在传送过程中 若外设数据没有准备好 则CPU一直在查询 等待 而不能做其他事情 CPU的效率低下 3 中断传送 只有当外设数据准备好时 向CPU发出请求 CPU才进行数据传送 在中断服务程序中 其余时间CPU可以做其他事情 CPU效率大大提高 但是 每传送一次数据 CPU都要执行一次中断服务程序 在中断服务程序中 除执行IN和OUT指令外 还要进行下列工作 保护断点 保护标志寄存器 保护某些通用寄存 恢复等一些工作 95 的时间是额外开销 从而传送效率并不高 4 DMA传送 在DMAC的控制下 外设直接和存储器 也可外设与外设 存储器与存储器之间 进行数据传送 而不必经过CPU 传送速度基本取决于外设与存储器的速度 从而传送效率大大提高