RTThread学习之IO设备模型及PIN设备教程Word文档格式.docx

上传人:b****4 文档编号:16991270 上传时间:2022-11-27 格式:DOCX 页数:12 大小:2.29MB
下载 相关 举报
RTThread学习之IO设备模型及PIN设备教程Word文档格式.docx_第1页
第1页 / 共12页
RTThread学习之IO设备模型及PIN设备教程Word文档格式.docx_第2页
第2页 / 共12页
RTThread学习之IO设备模型及PIN设备教程Word文档格式.docx_第3页
第3页 / 共12页
RTThread学习之IO设备模型及PIN设备教程Word文档格式.docx_第4页
第4页 / 共12页
RTThread学习之IO设备模型及PIN设备教程Word文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

RTThread学习之IO设备模型及PIN设备教程Word文档格式.docx

《RTThread学习之IO设备模型及PIN设备教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《RTThread学习之IO设备模型及PIN设备教程Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

RTThread学习之IO设备模型及PIN设备教程Word文档格式.docx

应用程序通过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-thread\components\drivers

这个文件夹下有很多驱动框架:

我们用的GPIO(PIN)设备驱动pin.c存在于文件夹misc下。

GPIO输入输出实验(按键点灯):

创建一个pin线程,实现功能:

按键按下LED被点亮,按键松开LED熄灭。

staticvoidpin_thread_entry(void*parameter)

{

unsignedintcount=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);

count++;

rt_kprintf("

KEY0pressed!

LEDON!

count=%d\n"

count);

rt_pin_write(PIN_LED_R,PIN_LOW);

}

else

rt_pin_write(PIN_LED_R,PIN_HIGH);

rt_thread_mdelay(10);

}

intmain(void)

/*线程句柄定义*/

rt_thread_ttid;

/*创建动态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);

return0;

下载程序,在终端输入list_device命令:

可以看到device是pin,类型是MiscellaneousDevice,说明我们正在使用通用的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设备驱动程序定义,和具体的芯片相关。

设置引脚电平:

读取引脚电平:

绑定引脚中断回调函数:

使能引脚中断:

脱离引脚中断回调函数:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1