Newtank

个人站

欢迎来到我的个人站~


嵌入式设备的IO(一)

目录

串行通信

字符分别传输

重要的参数:波特率、每字符的位数、校验位(奇/偶校验)、停止bit长度

分类方式

从属关系

系统设备:OS启动时已注册的设备

  • 如NOR、NAND闪存、触摸面板等
  • OS中有驱动与管理程序
  • 用户只需调用OS提供的API

用户设备:OS启动时未注册的设备

  • 驱动程序由用户提供
  • 包括U盘、SD卡等

使用

专用设备:单一进程使用的设备,被一个进程独占、互斥

共享设备:可被多个进程同时寻址的设备。可被随机寻址,可用提高每个设备的利用率

虚拟设备:通过虚拟技术将一台独占设备虚拟成多台逻辑设备,供多个用户进程同时使用。

特征

存储设备:用于存储的设备,包括硬盘、SSD、闪存等

IO设备:

  • 输入设备:包括触摸板、扫描仪等
  • 输出设备:包括显示器、扬声器等

信息传输单元

块设备:以数据块为单位组织和交换数据

字符设备:以字符为单位组织和交换数据

IO设备的组成

IO设备通常包括两个部分:

  • 机械部分
  • 电子部分
    • 被称为设备控制器或适配器

IO编程

有三种控制寄存器或缓冲区的方式:

  • 独立IO接口
  • 内存映射
  • 混合式,包括内存映射的IO数据缓冲和为IO接口使用的控制寄存器

x86提供了in和out指令。

内存映射的优点:适合C编程、不需要特别的保护机制

内存映射的缺点:与cache机制不兼容、地址检查需要IO设备参与,降低性能

中断

阻塞IO效率低,且实时性差。于是产生了中断,允许设备改变CPU的控制流。

中断的过程:

  1. 设备发起中断请求
  2. CPU发起中断确认
  3. 双方进行数据、地址交互

中断使用子程序调用的机制。

中断使用的两种判断机制:

  • 优先级:判断哪个中断优先被处理
  • 向量:判断每种中断应该调用哪些代码

这两种是正交的,大多数CPU中两者都存在

中断屏蔽:在处理中断时,低优先级的中断被屏蔽,不会被处理

有了中断向量后的中断过程:

  1. 设备向CPU发出中断请求
  2. CPU判断应该处理后,向设备发送中断响应
  3. 设备向CPU发送中断向量

中断代码一般由汇编编写,因为汇编代码在复杂度和性能上可测量,而C语言编写的中断程序在性能上难以预测。

NMI

不可屏蔽中断(无法被中断屏蔽位屏蔽)