IO设备模型
RTT提供了一套简单的I/O设备模型框架,它位于硬件和应用程序之间,共分成三层,从上到下分别是I/O设备管理层、设备驱动框架层、设备驱动层。
- 应用程序通过I/O设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层I/O硬件设备进行交互。
- I/O设备管理层实现了对设备驱动程序的封装。
- 设备驱动框架是对同类硬件设备驱动的抽象,将不同厂家的同类硬件设备驱动中相同的部分抽取出来,将不同部分留出接口,由驱动程序实现。
- 设备驱动层是一组驱使硬件设备工作的程序,实现访问硬件设备的功能。
简单设备的注册不经过设备驱动框架层,直接将设备注册到I/O设备管理器中。
- 设备驱动根据设备模型定义,创建出具备硬件访问能力的设备实例,将该设备通过rt_device_register()接口注册到I/O设备管理器中。
- 应用程序通过rt_device_find()接口查找到设备,然后使用I/O设备管理接口来访问硬件。
对于一些复杂设备,需要使用到对应的设备驱动层框架,进行注册,如:看门狗定时器。
- 看门狗设备驱动程序根据看门狗设备模型定义,创建出具备硬件访问能力的看门狗设备实例,并将该看门狗通过rt_hw_watchdog_register()接口注册到看门狗设备驱动框架中。
- 看门狗设备驱动框架通过rt_device_register()接口将看门狗设备注册到I/O设备管理器中。
- 应用程序通过I/O设备管理接口来访问看门狗硬件设备。
I/O设备类型
…
创建和注册IO设备
驱动层负责创建设备实例,并注册到I/O设备管理器中。
rt_device_t rt_device_create(int type, int attach_size);
设备被创建后,需要实现它访问硬件的操作方法
设备被创建后,需要注册到I/O设备管理器中,应用程序才能够访问。
设备注销后,将从I/O设备管理器中移除,也就不能再通过设备查找搜索到该设备。注销设备不会释放设备控制器占用的内存。
unregister
访问IO设备
应用程序通过I/O设备管理接口来访问硬件设备,当设备驱动实现后,应用程序就可以访问该硬件。
数据收发回调,当硬件设备收到数据时,可以通过函数回调另一个函数来设置数据接收指示,通知上层应用线程有数据到达。
UART串口设备
常用接口函数:
查找串口设备“uart2”
打开串口设备(串口收发数据模式:中断、轮询、DMA)
控制串口设备
发送数据:rt_device_write()
用中断接收数据
应用层
- 初始化信号量(信号量使数据接收同步,标志是否有数据)
- 设置接收回调函数(被执行时,设置信号量,唤醒了数据处理线程)。
- 创建数据处理线程
- 数据处理线程阻塞等待信号量
用户输入一个字符
- 串口外设接收到字符串并触发串口接收中断。
- ISR将数据放入缓冲区,并在接受回调函数中发送信号量激活数据处理线程。
- 数据处理线程获取到信号量被激活,并从缓冲区读取一个字符串。
DMA接收和轮询发送
ADC设备
ADC(Analog-to-Digital Converter)指模数转换器。是指将连续变化的模拟信号转换为离散的数字信号的器件。
相关参数说明:
- 分辨率:以二进制(或十进制)数的位数来表示,一般有8位、10位、…16位等,它说明模数转换器对输入信号的分辨能力,位数越多,表示分辨率越高,恢复模拟信号时会更精确。
- 精度:精度表示ADC器件在所有的数值点上对应的模拟值和真实值之间的最大误差值,也就是输出数值偏离线性最大的距离。
- 转换速率:A/D转换器完成一次从模拟到数字的AD转换所需时间的倒数。例如,某A/D转换器的转换速率为1MHz,则表示完成一次AD转换时间为1us。
ADC设备使用
应用程序通过RTT提供的ADC管理接口来访问ADC硬件。
I2C总线
I2C(Inter Integrated Circuit)总线是PHILIPS公司开发的一种半双工、双向二线同步串行总线。
I2C总线传输数据时需要两根信号线:
- 双向数据线SDA
- 双向时钟线SCL
SDA、SCL默认情况都是高电平(上拉电阻拉高)。
时序:
在时钟线高电平期间读取数据,低电平期间准备数据。
协议:
访问I2C总线设备