当前位置: 首页 > news >正文

并行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~PC7B组控制低4位PC0~PC3仅支持工作方式0
    可作数据、状态和控制端口;分两个4位,每位可独立操作

两组端口

A组:

  • 端口A(PA0~PA7)
  • 端口C的高4位(PC4~PC7)

B组:

  • 端口B(PB0~PB7)
  • 端口C的低4位(PC0~PC3)

关于C口(★)

  1. C端口被分成两个4位端口,两个4位端口只能以方式0工作,可分别选择输入或输出

  2. 在控制上,C端口上半部和A端口编为A组,C端口下半部和B端口编为B组

  3. 当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复位
A1A0选择
00端口A
01端口B
10端口C
11控制寄存器





8255A的控制字(★)

2个控制字:

  • 方式选择控制字(方式控制字):确定三个端口的工作方式,给出标识位。
  • 通道C置位复位控制字(位控字):控制C口的某一位的输出,或用于设置INTE位。

两个控制字共用一根地址线,即A0A1选择是控制器还是端口。
使用D7位判断控制字,即选择方式控制字和位控字。

D7=1表示为方式选择控制字(方式控制字)
D7=0表示为通道C置位/复位控制字(位控字)



位控字(D7=0)

  • 通道C 置位 / 复位控制字用于对单个位的操作。

  • 端口C的每一位都可以通过控制寄存器写入 置位 / 复位控制字,使之置位(输出为1)或复位(输出为0)。

  • C口的控制靠写入控制字,而不是直接写入C口。

  • D6D5D4——未用

  • D3D2D1——选择C口某一位

  • D0——置位 / 复位

在这里插入图片描述




方式选择控制字(D7=1)

在这里插入图片描述

功能
D7必须是1
D6,D5A组方式选择(0、1、2)
D4(PA0~PA7)输入、输出
D3(PC4~PC7)输入、输出
D2B组方式选择(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位端口

时序:

  1. A0 = 1、A1 = 1,D0~D7写入控制字
  2. 改变RD#和WR#,选择读写
  3. 对于输出:通过A0、A1选择A、B、C端口,通过D0~D7写入数据
  4. 对于输入:通过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的数据输出有两种办法:

  1. 通过端口C的I/O地址:向C端口直接写入字节数据。这一数据被写进C端口的输出锁存器,并从输出引脚输出,但对设置为输入的引脚无效

  2. 通过控制端口:向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)的一个核心愿景是开发一个能够有效遵循多模态视觉和语言指令的通用助手,与人类意图一致&#xf…...

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中&#xff0c;v-for的优先级高于v-if。这意味着在同一个元素上使用v-if和v-for时&#xff0c;v-for将首先被解析&#xff0c;然后是v-if。 下面是一个代码示例&#xff1a; <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#-取消任务列表(上)

如果不想等待异步控制台应用程序完成&#xff0c;可以取消该应用程序。 通过遵循本文的示例&#xff0c;可将取消添加到下载网站内容的应用程序。 可通过将 CancellationTokenSource 实例与每个任务进行关联来取消多个任务。 如果选择 Enter 键&#xff0c;则将取消所有尚未完成…...

Linux---ps命令

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

解决k8s拉取私有镜像401 Unauthorized 问题

拉取镜像时未指定账户和密码通常是因为需要访问的镜像仓库启用了认证&#xff0c;但 Kubernetes 默认配置中未提供访问凭据。要解决此问题&#xff0c;可以按照以下步骤配置镜像仓库的认证信息&#xff1a; 1. 创建 Kubernetes Secret 为镜像仓库配置访问凭据&#xff0c;使用…...

Ruby 模块(Module)

Ruby 模块&#xff08;Module&#xff09; 概述 Ruby 是一种动态、开放源代码的编程语言&#xff0c;以其简洁明了的语法和强大的功能而闻名。在 Ruby 中&#xff0c;模块&#xff08;Module&#xff09;是一个重要的概念&#xff0c;它用于封装一组相关的方法和常量。模块提…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...