并行IO接口8255
文章目录
- 8255A
- 芯片组成
- 外设接口
- 三个端口
- 两组端口
- 关于C口(★)
- 内部逻辑
- CPU接口
- 8255A的控制字(★)
- 位控字(D7=0)
- 方式选择控制字(D7=1)
- 8255A的工作方式
- 工作方式0(基本输入/输出方式)(★)
- 工作方式1(选通输入/输出方式)
- 工作方式2(双向传输方式)
- 补充(★)
8255A
8255A包含3个带锁存或缓冲的数据端口,可与外设并行进行数据交换。
- 含3个独立的8位并行输入/输出端口,各端口均具有数据的控制和锁存能力,即A端口(通道)、B端口(通道)、C端口(通道)
- 也可联合使用,构成单线、双线或三线联络信号的并行接口,此时,C端口完全服务于A、B端口。
- 可通过编程设置各端口的工作方式和数据传送方向(入/出/双向)。
芯片组成
外设接口
三个端口
- 端口A:PA0~PA7(8位)
A组
,工作方式0、1、2
常作数据端口,功能最强大。 - 端口B:PB0~PB7(8位)
B组
,工作方式0、1
常作数据端口 - 端口C:PC0~PC7(8位)
A组
控制高4位PC4~PC7
,B组
控制低4位PC0~PC3
,仅支持工作方式0
可作数据、状态和控制端口;分两个4位,每位可独立操作
两组端口
A组:
- 端口A(PA0~PA7)
- 端口C的高4位(PC4~PC7)
B组:
- 端口B(PB0~PB7)
- 端口C的低4位(PC0~PC3)
关于C口(★)
-
C端口被分成两个4位端口,两个4位端口只能以方式0工作,可分别选择输入或输出
-
在控制上,C端口上半部和A端口编为A组,C端口下半部和B端口编为B组
-
当A和B端口工作在方式1或方式2时,C端口的部分或全部引脚将被用来为A、B端口输出控制信号或输入状态信号。
内部逻辑
三个端口在内部分成两组控制
A组控制电路控制A端口和端口C的上半部分
B组控制电路控制B端口和端口C的下半部分
- 根据CPU的命令字控制8255A的工作方式,每组控制电路从读写控制逻辑接受各种命令,从内部数据总线接受控制字并发出命令到各自相应的端口。
- 根据CPU的命令字对端口C的每一位实现按位置位(1)或复位(0)。
CPU接口
连接系统端的主要引线:
D0~D7
——控制字输入端口CS
——片选信号RD、WR
——决定内外部总线上信息传送的方向A0、A1
——端口寻址RESET
——复位信号,接系统总线的RESET
,使8255A复位
A1 | A0 | 选择 |
---|---|---|
0 | 0 | 端口A |
0 | 1 | 端口B |
1 | 0 | 端口C |
1 | 1 | 控制寄存器 |
8255A的控制字(★)
2个控制字:
- 方式选择控制字(方式控制字):确定三个端口的工作方式,给出标识位。
- 通道C置位复位控制字(位控字):控制C口的某一位的输出,或用于设置
INTE
位。
两个控制字共用一根地址线,即A0
、A1
选择是控制器还是端口。
使用D7
位判断控制字,即选择方式控制字和位控字。
D7=1
表示为方式选择控制字(方式控制字)
D7=0
表示为通道C置位/复位控制字(位控字)
位控字(D7=0)
-
通道C 置位 / 复位控制字用于对单个位的操作。
-
端口C的每一位都可以通过控制寄存器写入 置位 / 复位控制字,使之置位(输出为1)或复位(输出为0)。
-
C口的控制靠写入控制字,而不是直接写入C口。
-
D6
,D5
,D4
——未用 -
D3
,D2
,D1
——选择C口某一位 -
D0
——置位 / 复位
方式选择控制字(D7=1)
位 | 功能 |
---|---|
D7 | 必须是1 |
D6,D5 | A组方式选择(0、1、2) |
D4 | (PA0~PA7)输入、输出 |
D3 | (PC4~PC7)输入、输出 |
D2 | B组方式选择(0、1) |
D1 | (PB0~PB7)输入、输出 |
D0 | (PC0~PC3)输入、输出 |
8255A的工作方式
- 方式0:基本输入输出方式,适用于无条件传送和查询方式的接口电路。
- 方式1:选通输入输出方式,适用于查询和中断方式的接口电路。
- 方式2(仅A口):双向选通传送方式,适用于与双向传送数据的外设。适用于查询和中断方式的接口电路。
链接1
链接2
工作方式0(基本输入/输出方式)(★)
-
A口、C口的高4位,B口、C口的低4位 可分别定义为输入或输出,各端口互相独立,故共有16种不同的组合。
-
8255相当于三个独立的8位简单接口。
-
各端口既可设置为输入口,也可设置为输出口,但不能同时实现输入及输出。
-
定义为输出的口均有锁存数据的能力,而定义为输入的口则无锁存能力。
-
在方式0下,C口还可以通过位控字按位进行置位和复位。
-
C端口即可以是一个8位的简单接口,也可以分为两个独立的4位端口。
时序:
- A0 = 1、A1 = 1,D0~D7写入控制字
- 改变RD#和WR#,选择读写
- 对于输出:通过A0、A1选择A、B、C端口,通过D0~D7写入数据
- 对于输入:通过A0、A1选择A、B、C端口,通过D0~D7读出数据
应用:
- 用于连接简单外设。
- 适用于:无条件输入输出方式。查询输入输出的方式:把A、B口作为8位数据的输入或输出口,C口的高/低4位分别定义为A、B口的控制位和状态位。
工作方式1(选通输入/输出方式)
-
A、B口作输入或输出口,C口的部分位固定用作A、B口的选通控制信号。
-
每一个8位数据端口(A、B)均可设置为输入、输出方式,且两种工作方式均可锁存,而且可以进行中断控制。
-
输入时
PC3(INTR)
、PC4(STB#)
、PC5(IBF)
,输出时PC3(INTR)
、PC6(ACK#)
、PC7(OBF#)
三位控制端口A状态。 -
输入时
PC2(STB#)
、PC1(IBF)
、PC0(INTR)
, 输出时PC2(ACK#)
、PC1(OBF#)
、PC0(INTR)
三位控制端口B状态。 -
未被用到的C端口,都可用位控字随便设置输入输出。
-
A、B口的
INTR
可输出中断到CPU,INTE
可控制中断使能失能。 -
对
INTE
的可通过写入端口C的对应位。输入时端口A的INTE
对应PC4
,端口B的INTE
对应PC2
。输出时端口A的INTE
对应PC6
,端口B的INTE
对应PC2
。
数据输入 | |
---|---|
STB# | 数据选通信号,表示外设已经准备好数据。将输入设备送来的数据锁存在输入锁存器中。 |
IBF | 输入锁存器满,表示已经接收到数据,由STB的前沿产生,CPU的IN指令清除此信号。 |
INTR | 中断请求信号,由STB后沿产生,要求CPU读取数据。 |
INTE | 中断允许位,允许INTR发出中断请求。当INTE = 1和IBF位高电平时允许INTR请求。 |
数据输出 | |
---|---|
OBF# | 输出缓冲器满信号,通知外设取走数据 。 |
ACK# | 外设响应信号,表示已从数据段口取走数据。会使OBF变成无效的高电平。 |
INTR | 通知CPU输出下一个数据,ACK上升沿产生(常接到8259A)。 |
INTE | 中断允许位,INTE = 1和OBF为高电平时,允许产生INTR信号。 |
输入 | |
---|---|
![]() | ![]() |
输出 | |
---|---|
![]() | ![]() |
时序:
应用:
- 主要用于中断控制方式下的输入输出。
- C口除部分位用作选通信号外,其余位可工作在方式0下,作为输入或输出线。特别是A、B均为方式1时仅使用C口的6条线,余下二条线可作为单独的输入输出线,用程序指定其数据传送方向。
工作方式2(双向传输方式)
-
外设通过端口A即可向CPU发送数据,又能从CPU接收数据。
-
工作方式2只适用于端口A,端口B仍按方式0或方式1工作。
-
端口A可工作于双向方式,端口C的PC7~PC3位作为端口A的控制/状态信号端口,PC2~PC0用于B组。
-
端口A的输入/输出均有锁存功能。在方式2工作状态下,端口A既可工作于查询方式,又可工作于中断方式。
-
读数据时,WR的下降沿使得中断信号intr关闭,屏蔽外界中断,对应的是箭头1
-
读数据的上升沿2,将数据送入到OBF中,OBF处于下降沿,表示数据已经保存到输出缓存区,即输出缓存区已经满了。OBF的下降沿使得ACK的成功接收数据,处于下降沿,处于有效位,对应箭头3
-
ack的上升沿,会打开intr的中断,使得中断有效。可以继续接受外部的数据。
-
写数据时,stb低电平有效,送来的数据已经保存在锁存器中,其下降沿使得IBF,输入数据缓冲区产生上升沿,对应的是箭头7
-
stb上升沿,打开中断,使得intr高电平有效,同之cpu调用中断处理程序,中断处理程序发出读指令RD,低电平有效,读出IBF中的数据,使得IBF从高电平变为低电平,数据清空,对应箭头9
时序:
-
地址在读数据以前就一定要稳定,并且前后都要有一定的保险时间,对应的就是CS,A1,A0
-
D0~D7表示的是总线上获取的数据,紧紧跟在RD后,RD是在下降沿写入,在上升输出到总线上
-
主要分清两种情况,一种是有外界事件引起的,一种是由当前的状态变化引起的。
应用:
- 可用于中断控制输入输出方式。
- 当A口工作于方式2时,B口可工作于方式1(此时C口的剩余位都用作B口选通控制线);B口也可工作于方式0(此时C口的剩余位也只能用作方式0下的输入输出线)。
补充(★)
对端口C的数据输出有两种办法:
-
通过端口C的I/O地址:向C端口直接写入字节数据。这一数据被写进C端口的输出锁存器,并从输出引脚输出,但对设置为输入的引脚无效
-
通过控制端口:向C端口写入位控字,使C端口的某个引脚输出1或0,或置位复位内部的中断允许触发器
相关文章:

并行IO接口8255
文章目录 8255A芯片组成外设接口三个端口两组端口关于C口(★) 内部逻辑CPU接口 8255A的控制字(★)位控字(D70)方式选择控制字(D71) 8255A的工作方式工作方式0(基本输入/输…...

Level DB --- SkipList
class SkipList class SkipList 是Level DB中的重要数据结构,存储在memtable中的数据通过SkipList来存储和检索数据,它有优秀的读写性能,且和红黑树相比,更适合多线程的操作。 SkipList SkipList还是一个比较简单的数据结构&a…...

第二十二周机器学习笔记:动手深度学习之——线性代数
第二十周周报 摘要Abstract一、动手深度学习1. 线性代数1.1 标量1.2 向量1.3 矩阵1.4 张量1.4.1 张量算法的基本性质 1.5 降维1.5.1 非降维求和 1.6 点积1.6.1 矩阵-向量积1.6.2 矩阵-矩阵乘法 1.7 范数 总结 摘要 本文深入探讨了深度学习中的数学基础,特别是线性代…...
leetcode 50个简单和中等难度的题
简单难度题目(25个) 两数之和 (Two Sum)有效的括号 (Valid Parentheses)罗马数字转整数 (Roman to Integer)最长公共前缀 (Longest Common Prefix)合并两个有序链表 (Merge Two Sorted Lists)移除链表元素 (Remove Linked List E…...

多模态大模型(5)--LLaVA
人类通过如视觉、语言、听觉等多种渠道与世界互动,每个单独的渠道在表示和传达某些概念时都有其独特的优势,人工智能(AI)的一个核心愿景是开发一个能够有效遵循多模态视觉和语言指令的通用助手,与人类意图一致…...

Vue实训---3-element plus的使用与布局
1.引入ElementPlus ElementPlus官网指南:快速开始 | Element Plus 在我们的项目main.js文件中,加入红框里的内容: import { createApp } from vue import App from ./App.vue // 引入全局样式,是对样式的初始化 import "/a…...

TritonServer中加载模型,并在Gunicorn上启动Web服务调用模型
TritonServer中加载模型,并在Gunicorn上启动Web服务调用模型 一、TritonServer中加载模型1.1 搭建本地仓库1.2 配置文件1.3 服务端代码1.4 启动TritonServer二、Gunicorn上启动Web服务2.1 安装和配置Gunicorn2.2 启动Gunicorn三、调用模型四、性能优化与监控五、总结在深度学习…...
快速删除 node_modules 目录的集中方法
要快速删除 node_modules 目录,可以使用以下几种方法: 方法 1: 使用 rimraf 如果你在 Windows 上或者想要一个跨平台的解决方案,可以使用 rimraf 这个工具,它是 Node.js 版本的 rm -rf。 安装 rimraf: npm install …...
shell编程--if判断与for循环
shell编程与其他编程语言一样都有if判断与循环,今天了解一下if判断语句和for循环语句。 if判断语句讲解 我们写出一个if判断 a 1 b 2if [ "$a" -eq "$b" ]; thenecho "相等" elseecho "不相等" fi 在shell中-eq是表示…...

Makefile基础应用
1 使用场景 在Linux环境下,我们通常需要通过命令行来编译代码。例如,在使用gcc编译C语言代码时,需要使用以下命令。 gcc -o main main.c 使用这种方式编译代码非常吃力,每次调试代码都需要重新在命令行下重新编译,重复…...

计算机网络基础全攻略:探秘网络构建块(1/10)
一、计算机网络基础概念 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路和通信设备连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统…...
SpringMVC-Day1
SpringMVC 1.SpringMVC介绍 springMVC是一种基于Java实现MVC模型的轻量级Web框架 优点: 使用简单,开发便捷(相较于Servelt) 灵活性强 使用SpringMVC技术开发web程序流程 创建web工程(Maven结构) 设置…...

【虚拟机】VMWare的CentOS虚拟机断电或强制关机出现问题
VMware 虚拟机因为笔记本突然断电故障了,开机提示“Entering emergency mode. Exit the shell to continue.”,如下图所示: 解决方法:输入命令: xfs_repair -v -L /dev/dm-0 注:报 no such file or direct…...

探索 RocketMQ:企业级消息中间件的选择与应用
一、关于RocketMQ RocketMQ 是一个高性能、高可靠、可扩展的分布式消息中间件,它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递,它是一个轻量级的、功能强大的消息队列系统&…...
vue中v-if和v-for优先级
在Vue中,v-for的优先级高于v-if。这意味着在同一个元素上使用v-if和v-for时,v-for将首先被解析,然后是v-if。 下面是一个代码示例: <template><div><div v-for"item in items" v-if"item.isDispl…...
使用Kotlin写一个将字符串加密成short数组,然后可以解密还原成原始的字符串的功能
文章目录 一、运行效果1.1 单个字符串加解密1.2 多个字符串数组加解密二、源代码2.1 控制流图2.2 实现的源代码一、运行效果 1.1 单个字符串加解密 待加密的单个字符串: 测试字符串转化成short数组-----字节卷动 单个字符串加密后的数据: [19914, -21676, 31702, 23463, 2833…...
windows C#-取消任务列表(上)
如果不想等待异步控制台应用程序完成,可以取消该应用程序。 通过遵循本文的示例,可将取消添加到下载网站内容的应用程序。 可通过将 CancellationTokenSource 实例与每个任务进行关联来取消多个任务。 如果选择 Enter 键,则将取消所有尚未完成…...

Linux---ps命令
Linux ps 命令 | 菜鸟教程 (runoob.com) process status 用于显示进程的状态 USER: 用户名,运行此进程的用户名。PID: 进程ID(Process ID),每个进程的唯一标识号%CPU: 进程当前使用的CPU百分比%MEM: 进程当前使用的…...

解决k8s拉取私有镜像401 Unauthorized 问题
拉取镜像时未指定账户和密码通常是因为需要访问的镜像仓库启用了认证,但 Kubernetes 默认配置中未提供访问凭据。要解决此问题,可以按照以下步骤配置镜像仓库的认证信息: 1. 创建 Kubernetes Secret 为镜像仓库配置访问凭据,使用…...
Ruby 模块(Module)
Ruby 模块(Module) 概述 Ruby 是一种动态、开放源代码的编程语言,以其简洁明了的语法和强大的功能而闻名。在 Ruby 中,模块(Module)是一个重要的概念,它用于封装一组相关的方法和常量。模块提…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...