RT-Thread IO设备模型

IO设备模型

RTT提供了一套简单的I/O设备模型框架,它位于硬件和应用程序之间,共分成三层,从上到下分别是I/O设备管理层、设备驱动框架层、设备驱动层。

RT-Thread IO设备模型_第1张图片

  • 应用程序通过I/O设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层I/O硬件设备进行交互。
  • I/O设备管理层实现了对设备驱动程序的封装。
  • 设备驱动框架是对同类硬件设备驱动的抽象,将不同厂家的同类硬件设备驱动中相同的部分抽取出来,将不同部分留出接口,由驱动程序实现。
  • 设备驱动层是一组驱使硬件设备工作的程序,实现访问硬件设备的功能。

简单设备的注册不经过设备驱动框架层,直接将设备注册到I/O设备管理器中。

  • 设备驱动根据设备模型定义,创建出具备硬件访问能力的设备实例,将该设备通过rt_device_register()接口注册到I/O设备管理器中。
  • 应用程序通过rt_device_find()接口查找到设备,然后使用I/O设备管理接口来访问硬件。

RT-Thread IO设备模型_第2张图片
对于一些复杂设备,需要使用到对应的设备驱动层框架,进行注册,如:看门狗定时器。

  • 看门狗设备驱动程序根据看门狗设备模型定义,创建出具备硬件访问能力的看门狗设备实例,并将该看门狗通过rt_hw_watchdog_register()接口注册到看门狗设备驱动框架中。
  • 看门狗设备驱动框架通过rt_device_register()接口将看门狗设备注册到I/O设备管理器中。
  • 应用程序通过I/O设备管理接口来访问看门狗硬件设备。

RT-Thread IO设备模型_第3张图片

I/O设备类型

RT-Thread IO设备模型_第4张图片

创建和注册IO设备

驱动层负责创建设备实例,并注册到I/O设备管理器中。
rt_device_t rt_device_create(int type, int attach_size);

设备被创建后,需要实现它访问硬件的操作方法
RT-Thread IO设备模型_第5张图片
设备被创建后,需要注册到I/O设备管理器中,应用程序才能够访问。
RT-Thread IO设备模型_第6张图片
RT-Thread IO设备模型_第7张图片
设备注销后,将从I/O设备管理器中移除,也就不能再通过设备查找搜索到该设备。注销设备不会释放设备控制器占用的内存。
unregister

访问IO设备

应用程序通过I/O设备管理接口来访问硬件设备,当设备驱动实现后,应用程序就可以访问该硬件。
RT-Thread IO设备模型_第8张图片
数据收发回调,当硬件设备收到数据时,可以通过函数回调另一个函数来设置数据接收指示,通知上层应用线程有数据到达。

UART串口设备

常用接口函数:
RT-Thread IO设备模型_第9张图片
查找串口设备“uart2”
打开串口设备(串口收发数据模式:中断、轮询、DMA)
控制串口设备
发送数据:rt_device_write()

用中断接收数据

RT-Thread IO设备模型_第10张图片
应用层

  1. 初始化信号量(信号量使数据接收同步,标志是否有数据
  2. 设置接收回调函数(被执行时,设置信号量,唤醒了数据处理线程)。
  3. 创建数据处理线程
  4. 数据处理线程阻塞等待信号量

用户输入一个字符

  1. 串口外设接收到字符串并触发串口接收中断。
  2. ISR将数据放入缓冲区,并在接受回调函数中发送信号量激活数据处理线程。
  3. 数据处理线程获取到信号量被激活,并从缓冲区读取一个字符串。

DMA接收和轮询发送

在这里插入图片描述

ADC设备

ADC(Analog-to-Digital Converter)指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。

相关参数说明:

  • 分辨率:以二进制(或十进制)数的位数来表示,一般有8位、10位、…16位等,它说明模数转换器对输入信号的分辨能力,位数越多,表示分辨率越高,恢复模拟信号时会更精确。
  • 精度:精度表示ADC器件在所有的数值点上对应的模拟值和真实值之间的最大误差值,也就是输出数值偏离线性最大的距离。
  • 转换速率:A/D转换器完成一次从模拟到数字的AD转换所需时间的倒数。例如,某A/D转换器的转换速率为1MHz,则表示完成一次AD转换时间为1us。

ADC设备使用

应用程序通过RTT提供的ADC管理接口来访问ADC硬件。
RT-Thread IO设备模型_第11张图片
RT-Thread IO设备模型_第12张图片
RT-Thread IO设备模型_第13张图片
在这里插入图片描述
RT-Thread IO设备模型_第14张图片

I2C总线

I2C(Inter Integrated Circuit)总线是PHILIPS公司开发的一种半双工、双向二线同步串行总线。

I2C总线传输数据时需要两根信号线:

  • 双向数据线SDA
  • 双向时钟线SCL

RT-Thread IO设备模型_第15张图片

SDA、SCL默认情况都是高电平(上拉电阻拉高)。

时序:
RT-Thread IO设备模型_第16张图片
在时钟线高电平期间读取数据,低电平期间准备数据。

协议:
RT-Thread IO设备模型_第17张图片
RT-Thread IO设备模型_第18张图片

访问I2C总线设备

在这里插入图片描述
在这里插入图片描述
RT-Thread IO设备模型_第19张图片
RT-Thread IO设备模型_第20张图片

你可能感兴趣的:(RT-Thread,RT-Thread)