没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
第九章 I/O 系统
9.1 简介
I/O 系统用于连接计算机与外部设备(peripherals)。在个人计算机里,这些设备一般
包括键盘、显示器、打印机和无线网络。在嵌入式系统里,这些设备可能包括吐司机的加热
元件、玩偶的声音同步器、引擎的燃料注入器、卫星的太阳能面板定位马达,等等。处理器
就像访问内存一样使用地址和数据总线访问 I/O 设备。
本章提供了 I / O 设备的具体示例。 9.2 节展示了将一个 I / O 设备连接到处理器并通过
程序访问它的基本原理。9.3 节 介绍了嵌入式系统环境中的 I / O,展示了如何使用基于 ARM
的 Raspberry Pi 单板计算机访问板载外设,包括通用,串行和模拟 I / O 以及定时器。 9.4 节
给出了与其他常见设备(如字符 LCD,VGA 监视器,蓝牙无线电和电机)连接的示例。
9.5 节描述了总线接口,并阐述了流行的 AHB-Lite 总线。 9.6 节调查了 PC 中使用的主要 I /
O 系统。
9.2 内存映射 I/O
回忆一下 6.5.1 节,一部分的地址空间用于 I/O 设备而非内存。例如,设定 0x20000000
到 0x20FFFFFF 范围内的物理地址用于 I/O。每一个 I/O 设备可以指定到这一范围中的一个或
者多个地址上。对于特定地址的写入操作就会给设备发送数据,读出操作就将从设备接收数
据,这种 I/O 设备通讯方式称为内存映射 I/O(memory-mapped I/O)。
在内存映射 I/O 系统里,读出和写入可能访问内存,也可能访问 I/O 设备。图 e9.1 给出
了支持两个内存映射 I/O 设备所需要的硬件。其中,地址译码器决定处理器与哪个设备进行
通讯,根据 Address 和 MemWrite 信号来产生对其它硬件的控制信号。ReadData 多路选择器
在内存和各种 I/O 设备间选择读出数据。写使能寄存器保存了写入到 I/O 设备的值。
图 e9.1 地址映射 I/O 所需的硬件
Processor:微处理器
Address Decoder:地址译码器
Memory:存储器
I/O device: I/O 设备
例 e9.1 与 I/O 设备通讯
假设图 e9.1 中的 I/O 设备 1 被指定到了内存地址 0x20001000。写出把值 7 写入到 I/O
设备 1 和从 I/O 设备 1 读出输出值的 ARM 汇编代码。
解:以下汇编代码把值 7 写入到 I/O 设备 1.
MOV R1, #7
LDR R2, = ioadr
STR R1, [R2]
ioadr DCD 0x20001000
因为地址为 0x20001000,地址译码器将设置 WE1,同时设置 MemWrite 为 TRUE。
WriteData 总线的值(7)被写入到与 I/O 设备 1 输入管脚相连的寄存器中。
为了从 I/O 设备 1 读出,处理器应执行以下的汇编代码。
LDR R1, [R2]
因为地址译码器发现地址位 0x20001000 且 Mem Write 为 FALSE,所以它把 RDsel
1:0
设置
为 01。I/O 设备 1 的输出通过多路选择器传递到 ReadData 总线,然后被读入到处理器的 R1
中。
与 I/O 设备相关联的地址通常称为 I/O 寄存器,因为它们可能与 I/O 设备的物理寄存器
一致,如图 e9.1 中所示。
与 I/O 设备通讯的软件称为设备驱动程序(device driver)。读者可能已经下载或者安装
过打印机或者其他 I/O 设备的设备驱动程序。编写一个设备驱动程序需要详细了解 I/O 设备
硬件知识,包括内存映射 I / O 寄存器的地址和行为。其他程序调用设备驱动提供的函数来
访问设备,而不需知道底层设备的硬件。
9.3 嵌入式 I/O 系统
嵌入式系统使用一个处理器来控制与物理环境的交互。嵌入式系统一般围绕着微控制器
单元(microcontroller unit,MCU)来构造,MCU 结合了一个微处理器与一组容易使用的外
围设备,例如通用数字和模拟 I/O 引脚、串行端口、计时器等。微控制器通常是廉价的,并
且通过集成大部分必要部件到单一芯片上来使系统成本和尺寸最小化。大多数嵌入式系统比
一角硬币更小、更轻,功率只有几毫瓦,成本从几角到几美元不等。微控制器依据处理的数
据量大小来进行分类。8 位微控制器是最小和最便宜的,而 32 位微控制器则提供更多内存
和更高性能。
为了具体化,本节将介绍实际系统环境中的嵌入式系统 I / O。具体来说,我们将重点放
在流行且廉价的 Raspberry Pi 板,其中包含了一个 Broadcom BCM2835 片上系统(SoC)和一
个 700 MHz 32 位的实现了 ARMv6 指令集的 ARM1176JZ-F 处理器。每个小节在原理之后都跟
着在 Pi 上运行的具体示例。2014 年,所有这些例子都在在运行 NOOBS Raspbian Linux 的 Pi
上进行了测试。
图 e9.2 显示了一张 Raspberry Pi Model B +板的照片,这是一台完整的 Linux 计算机,大
小与信用卡大小相当,售价 35 美元。 Pi 板从 5 V USB 电源吸取高达 1 A 的电流。 它有 512
MB 的板载 RAM 和一个 SD 卡插槽,用于含有操作系统和用户文件的存储卡。 连接器提供
视频和音频输出,鼠标和键盘的 USB 端口,以太网(局域网)端口,以及作为本章主要内
容的 40 个通用 I / O(GPIO)引脚。
虽然 BCM2835 SoC 具有许多功能,而不是典型的廉价微控制器,但在通用 I / O 方面非
常相似。 本章首先介绍 Raspberry Pi 上的 BCM2835,并描述内存映射 I / O 的设备驱动程序。
本章的其余部分将说明嵌入式系统如何执行通用数字,模拟和串行 I / O。定时器也经常用于
生成或测量精确的时间间隔。
图 e9.2 Raspberry Pi Model B +板
USB Power:USB 电源
Commented [z1]: 原文:The principles in each
subsection will be followed by specific examples
that run on the Pi. 不知翻译得准不准
HDMI Video:HDMI 视频
Audio:音频
Ethernet:以太网
9.3.1 BCM2835 片上系统
BCM2835 SoC 是 Broadcom 为移动设备和其他多媒体应用设计的功能强大且价格低廉
的芯片。 SoC 包括一个称为应用处理器的 ARM 微处理器,一个用于图形,视频和摄像头的
VideoCore 处理器,以及许多 I / O 外设。 BCM2835 采用塑料球栅阵列封装,下面有微小的
焊球; 它最好由机器人焊接,该机器人将该封装与印刷电路板上匹配的铜焊盘对齐并施加热
量。 Broadcom 没有发布完整的数据表,但是 Raspberry Pi 网站上提供了一个简短的数据表,
描述了如何从 ARM 处理器访问外设。 该数据表描述了本章中为简单起见而省略的许多功能
和 I / O 寄存器。
www.raspberrypi.org/documentation/hardware/
图 e9.3 展示了 Raspberry Pi 模型板的简化示意图。 电路板通过 USB 电源接收 5 V 电源,
稳压器产生 3.3,2.5 和 1.8 V 电平,用于 I / O,模拟和其他功能。 BCM2835 还具有内部开关
稳压器,可为节能的 SoC 产生可变的低电压。 BCM2835 连接到 USB /以太网控制器,也可
直接输出视频。 它还具有 54 个可配置的 I / O 信号,但由于空间原因,用户只能通过插头
引脚访问其中的一小部分。 接头还提供 3.3 V 和 5 V 接地,方便为连接到 Pi 的小型设备供
电,但最大总电流在 3.3 V 时为 50 mA,5 V 时为~300 mA。B 型和 B +类似,但 B +将 I / O 插
头引脚数量从 26 个增加到 40 个,USB 端口数量从 2 个增加到 4 个。包括 Adafruit Pi Cobbler
在内的各种电缆可将这些插头引脚连接到面包板上。
Raspberry Pi 使用 SD 卡作为闪存盘。 该卡通常预装了 Raspbian Linux,这是一个适用于
8 GB SD 卡的小型 Linux 版本。 您可以通过连接 HDMI 显示器和 USB 鼠标和键盘将其转变为
完整的计算机,或通过以太网电缆从另一台计算机连接到 Pi 来使用 Pi。
图 e9.3 Raspberry PI I/O 示意图
USB Power Jack:USB 电源插孔
Regulator:调节器
HDMI Video:HDMI 视频
RCA Video:RCA 视频
SD Card:SD 卡
Camera Link:相机连接处
Crystal Oscillator:晶体振荡器
Ethernet:以太网
I/O header:I / O 头
Stereo Audio Jack:立体声音频插孔
9.3.2 设备驱动程序
程序员可以通过读取或写入存储器映射的 I / O 寄存器来直接操作 I / O 设备。 但是,调
用访问内存映射 I / O 的函数是更好的编程习惯。 这些功能被称为设备驱动程序。 使用设
备驱动程序的一些好处包括:
1. 当代码涉及到明确命名的函数调用而不是在晦涩难懂的内存地址处写入位字段时,
代码更容易阅读。
2. 熟悉 I / O 设备深层工作原理的人可以编写设备驱动程序,普通用户可以调用它而无
需了解细节。
3. 代码更容易移植到具有不同内存映射或 I / O 设备的另一个处理器,因为只有设备驱
动程序必须更改。
4. 如果设备驱动程序是操作系统的一部分,则操作系统可以控制对在系统上运行的多
个程序之间共享的物理设备的访问,并且可以管理安全性(例如,当您向网络浏览器输入密
码时,恶意程序无法读取键盘)。
本节将开发一个名为 EasyPIO 的简单设备驱动程序来访问 BCM2835 设备,以便您可以
了解设备驱动程序中的内容。 普通用户可能更喜欢 WiringPi,一个用于 Pi 的开源 I / O 库,
剩余35页未读,继续阅读
乖巧是我姓名
- 粉丝: 26
- 资源: 343
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- mysql查询语句汇总.zip
- typora-x64-v0.9.93,windows,64位,markdown工具,文本编辑器
- 基于C语言的neon_osd_Draw ARM Neon加速OSD点阵设计源码
- 目标检测-工地工人安全设备佩戴检测数据集-3500张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本+训练日志
- 运筹学运输问题综合实验的实验报告
- home - 副本.vue
- imageProcess.py
- typora-linux-v0.11.18-amd64,linux,64位,markdown工具,文本编辑器
- 基于Java的sky-take-out云霄外卖管理系统设计源码
- SAP-可用性检查应用测试.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0