RTThread笔记IO设备模型及PIN设备
RTT内核对象——设备
RT-Thread有多种内核对象,其中设备device就是其中一种。
内核继承关系图如下:
设备继承关系图如下:
device对象对应的结构体如下:
其中,设备类型type有如下几类:
设备的操作方法结构体:
I/O设备模型框架
RT-Thread 提供了一套简单的 I/O 设备模型框架 :
应用程序通过 I/O 设备管理接口获得正确的设备驱动,然后通过这个设备驱动与底层 I/O 硬件设备进行数据(或控制)交互。
I/O 设备管理层:实现了对设备驱动程序的封装。 设备驱动程序的升级、更替不会对上层应用产生影响, 从而降低了代码的耦合性、复杂性,提高了系统的可靠性。
设备驱动框架层: 对同类硬件设备驱动的抽象, 将不同厂家的同类硬件设备驱动中相同的部分抽取出来。
设备驱动层: 是一组驱使硬件设备工作的程序,实现访问硬件设备的功能。 这一层是与硬件有关的,不同的芯片的同种外设驱动是不同的,STM32的GPIO驱动与NXP的GPIO驱动是不同的。这一层负责创建与注册I/O设备,对于操作逻辑简单的设备,可以不经过设备驱动框架层。设备的两种注册方式
1、 对于操作逻辑简单的设备,可以不经过设备驱动框架层,直接将设备注册到 I/O 设备管理器中:
2、 对于另一些设备,如看门狗等,则会将创建的设备实例先注册到对应的设备驱动框架中,再由设备驱动框架向 I/O 设备管理器进行注册 :
I/O设备接口
1、创建及注册I/O设备
设备创建:
设备注册:
2、访问I/O设备
应用程序通过 I/O 设备管理接口来访问硬件设备,当设备驱动实现后,应用程序就可以访问该硬件。 I/O 设备管理接口与 I/O 设备的操作方法的映射关系下图所示:
查找设备:
初始化设备:
打开和关闭设备:
控制设备:
读写设备:
数据收发回调:
GPIO(PIN)设备模型
上面说的设备驱动层有两种注册设备的方式,对应的应用程序也有两种访问设备的方式。一种是通过设备操作接口访问,另一种是通过通用的设备驱动来访问。这里我们使用通用的GPIO设备驱动(对应源码:pin.c)来访问GPIO设备。其中通用的设备驱动在RT-Thread代码中作为一个组件,对应的路径为:rt-threadcomponentsdrivers
这个文件夹下有很多驱动框架:
我们用的GPIO(PIN)设备驱动pin.c存在于文件夹misc下。
GPIO输入输出实验(按键点灯):
创建一个pin线程:
按键按下LED被点亮,按键松开LED熄灭。static void pin_thread_entry(void *parameter) { unsigned int count = 1; /* 设置LED引脚为输出模式 */ rt_pin_mode(PIN_LED_R, PIN_MODE_OUTPUT); /* 设置KEY0引脚为输入模式 */ rt_pin_mode(PIN_KEY0, PIN_MODE_INPUT); while (count > 0) { /* 读取KEY0引脚状态 */ if (rt_pin_read(PIN_KEY0) == PIN_LOW) { rt_thread_mdelay(50); if (rt_pin_read(PIN_KEY0) == PIN_LOW) { count++; rt_kprintf("KEY0 pressed! LED ON! count = %d ", count); rt_pin_write(PIN_LED_R, PIN_LOW); } } else { rt_pin_write(PIN_LED_R, PIN_HIGH); } rt_thread_mdelay(10); } } int main(void) { /* 线程句柄定义 */ rt_thread_t tid; /* 创建动态pin线程 :优先级 25 ,时间片 5个系统滴答,线程栈512字节 */ tid = rt_thread_create("pin_thread", pin_thread_entry, RT_NULL, STACK_SIZE, THREAD_PRIORITY, TIMESLICE); /* 创建成功则启动动态线程 */ if (tid != RT_NULL) { rt_thread_startup(tid); } return 0; }
下载程序,在终端输入list_device命令:
可以看到device是pin,类型是Miscellaneous Device,说明我们正在使用通用的GPIO设备驱动。这个实验中有三个文件值得关注,分别是device.c:设备管理层 pin.c:设备驱动框架层 drv_gpio.c:设备驱动层
其中device.c与pin.c属于RT-Thread的范畴,drv_gpio.c与具体的硬件有关,这个文件里操控的就是与硬件有关的东西,如:
程序中用到的rt_pin_mode及rt_pin_write等都是PIN设备管理接口。PIN设备管理有如下几个接口:
设置引脚模式:
RT-Thread 提供的引脚编号需要和芯片的引脚号区分开来,它们并不是同一个概念,引脚编号由 PIN设备驱动程序定义,和具体的芯片相关。
设置引脚电平:
读取引脚电平:
绑定引脚中断回调函数:
使能引脚中断:
脱离引脚中断回调函数:
以上就是本次的笔记,如有错误,欢迎指出。
评测顶级商务本再进化ThinkPadX1Carbon2021ThinkPadX1Carbon2021升级到了1610比例的屏幕,提升了屏占比,同时内部的设计也有进一步的优化,延续一直优秀的键盘手感和非常安静的风扇,出色的续航以及军标对照测试
体验5月27日发布的OPPOReno6有哪些亮点和槽点夏日晴海的Reno6配合非常自然地视频美妆视频虚化,还有最新一代最高骁龙870的升级,会是这个夏天非常适合轻薄手机的组合Reno6系列如期而至,还是这个一眼就能认出来的精致设计,以
体验iQOONeo5快速上手屏幕由144Hz高刷换成了120Hz,但素质提升,配备振感线性马达,双扬HiRes认证。iQOONeo5在同价位之中有很好的屏幕,优秀的散热和性能,以及更好支持游戏的独立显示芯片。
美的智能大会华为鸿蒙智能家居操作系统成亮点美的智能大会华为鸿蒙智能家居操作系统成亮点根据权威调研机构IDC最新数据显示2021年,虚拟现实可穿戴设备与智能家居这三类产品的总价值预计将达3721亿美元,到2025年规模将达5
懂行中国行2021华为榆林碳中和能源峰会成功举办绽放矿山的智慧之花懂行中国行2021华为榆林碳中和能源峰会成功举办榆林市人民政府副市长杨向喜10月13日,以智慧能源,榆见新机为主题,懂行中国行2021华为榆林碳中和能源峰会在素有
华为郭振兴只有煤矿工业互联网才能彻底实现矿山智能化华为郭振兴只有煤矿工业互联网才能彻底实现矿山智能化华为煤矿军团副总裁郭振兴2021年是国家十四五开局之年,国家大力推进产业数字化战略的转型。煤炭作为我国国民经济的重要组成部分,一直
华为大消息!任正非亲自督战,成立四大军团华为大消息!任正非亲自督战,成立四大军团!研发投入太牛了,远超BAT总和华为又有大消息!证券时报e公司记者最新获悉,华为于近日正式发文成立海关和港口智慧公路数据中心能源和智能光伏四
报告华为P50Pro屏幕素质报告这是P50Pro,华为目前最新的影像旗舰,它利用全新的原色引擎和计算光学,让4摄组合超常发挥,因此屏幕的硬件和HarmonyOS2上的色彩管理也变得非常重要,这就是我们对P50Pr
内存小且浏览速度极快!手机新型搜索工具,你值得拥有羊搜搜是一款便捷小巧,功能超多而且超级实用的小工具,支持的资源很丰富,喜欢看小说的,喜欢磁力搜索的,喜欢看视频的,喜欢听免费音乐的,以及喜欢看漫画的,小羊搜搜都可以满足你的需求,同
你喜欢不如我喜欢TFZNo。3林氏评测我还就不信了,所有人都那么喜欢真无线?真无线的优点我们都清楚没有线嘛,你耳朵就显得特没束缚,而且作为当红炸子鸡它在飞速进化着,再过几个月带降噪的真无线应该会大面积铺货,暂时没人抢得
与众不同的风TANCHJIM浅野天琪林氏评测这世上的事,自己趟出一条路比跟着别人的脚印难一些。在趟这条路的开始,你最好想清楚自己为什么要这么做,这中间,势必会遇到相对更多的困难和风险,你得有坚持下去的勇气,有不动摇的恒心,这