bsp驱动开发(bsp驱动开发怎么学)

bsp驱动开发(bsp驱动开发怎么学)一 概述 一 RT Thread 设备驱动 RT Thread 设备驱动开发指南 书籍是 RT thread 官方出品撰写 系统讲解 RT thread IO 设备驱动开发方法 从三方面进行讲解 基础篇 对 RT thread 以及设备框架进行介绍 再分别介绍基于 IO 框架中常用的外设设备 分别是 UART PIN SPI QSPI HWTIMER PWM RTC ADC DAC WDT 进阶篇 介绍基于 IO 框架中稍比基础篇复杂的外设设备 分别是 SDIO Touch LCD sensor MTD



单片机,MCU,先楫半导体 单片机,MCU,先楫半导体 单片机,MCU,先楫半导体 单片机,MCU,先楫半导体

一、概述

(一)RT-Thread设备驱动

《RT-Thread设备驱动开发指南》书籍是RT-thread官方出品撰写,系统讲解RT-thread IO设备驱动开发方法,从三方面进行讲解。

基础篇:对RT-thread以及设备框架进行介绍,再分别介绍基于IO框架中常用的外设设备,分别是UART、PIN、SPI/QSPI、HWTIMER、PWM、RTC、ADC、DAC、WDT。

进阶篇:介绍基于IO框架中稍比基础篇复杂的外设设备,分别是SDIO、Touch、LCD、sensor、MTD nor、MTD nand、脉冲编码器、加解密设备、PM设备。

高级篇:介绍更为复杂的外设设备,分别是WLAN、ETH、audio mic、audio sound、USB、CAN。

(二)先楫hpmicro bsp

为了深入了解本书的内容,得有一个单片机平台进行案例剖析,除了本书籍以STM32的arm平台进行介绍,还可以以先楫hpmicro单片机系列的riscv平台进行讲解。

刚好先楫在rtthread的bsp贡献上,也是十分丰富。无论是在rtthread studio的bsp包上,还是rtthread仓库的bsp支持上,都有提供了对应的支持。

rtthread studio的SDK支持,包括了先楫目前所有的MCU系列。

而在RT-thread上,bsp包的驱动支持上,也包括了rtthread大部分设备驱动。

二、开发方法

(一)层级结构

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

而作为单片机的定时器外设hwtimer功能,要对接到该IO设备框架,需要实现hwtimer设备的操作方法、设备的注册、以及驱动的配置和驱动验证。本文也是基于该开发方法进行阐述。

上述对应的三层驱动层,在源码上,可以device->hwtimer->drv_hwtimer,其中drv_hwtimer是先楫官方实现的对接框架的驱动层。

而设备驱动框架层,提供了ops操作接口,分别以下的接口需要驱动开发者实现注册。

(二)创建hwtimer设备

对hwtimer设备来说,在驱动开发时,需要先从rt_hwtimer_t结构中派生出新的hwtimer设备模型,然后根据自己的设备类型定义私有数据域。

同样先楫的hwtimer drivers也定义了自己的由rt_hwtimer_t派生出来的hwtimer设备。

当然一个MCU也支持多个hwtimer,一个hwtimer驱动可以支持多个hwtimer设备,可以通过使能BSP_USING_GPTMRx进行开启

(三)实现hwtimer设备的操作方法

该操作方法就是上述所说的ops操作结构,属于驱动共用部分,也就是多个hwtimer设备可以共用一个ops操作。同样先楫也实现了该操作方法,并且注册到自身的hwtimer的父类hwtimer的ops中。

rt_uint32_t (*count_get)(struct rt_hwtimer_device *timer);

而先楫实现的count_get是以上的hpm_hwtimer_count_get,可以看到,内部是先从timer获取厂家自身定义的hwtimer设备,再从里面获取硬件定时器的基地址控制句柄,然后使用先楫自身的驱动API获取定时器的计数值进行返回。

(四)注册hwtimer设备

注册hwtimer设备,rtthread的IO设备框架提供了一个API:rt_device_hwtimer_register

从传参句柄可知道,注册时需要提供设备句柄timer,设备名称name,用户自定义data作为传参。

在先楫的drv_hwtimer的驱动中,创建了个全局的hwtimer设备数组,里面包含了hwtimer的所有信息,包括设备名称。然后在注册初始化当中,轮询该数组使能的定时器设备依次注册到rtthread的hwtimer设备当中。

在开发指南当中,特别提到了一个注意点,hwtimer设备句柄需要实现rt_hwtimer_info,定义硬件定时器的特征信息,如计数的最大最小频率,最大计数值以及计数方向,而先楫也同样进行了实现。

(五)hwtimer设备中断处理

在开发指南中,该部分也需要实现,目的是将定时时间导致的中断事件通知到hwtimer设备驱动框架,让驱动框架完成后续的处理并通知应用层。而该通知事件API则是rt_device_hwtimer_isr,该函数由rtthread的hwtimer设备驱动框架提供。

MCU下的hwtimer驱动,需要在中断处理函数调用rt_device_hwtimer_isr函数,以便通知hwtimer设备驱动框架对应中断的发生。

在先楫的hwtimer驱动中也是基于这个实现通知事件。

知设备框架对应的定时器定时时间到达。

(六)驱动配置

驱动配置主要通过Kconfig实现,这里使用hpm6750evk2的bsp V1.4.1作为说明。

在board文件夹中,有个Kconfig配置了hpm6750evk2的板载驱动信息。对于定时器驱动的相关选项如下:

RT_USING_HWTIMER:RT-thread的hwtimer设备驱动框架下的代码对应的宏定义,控制hwtimer的驱动框架的相关代码是否会添加到工程中

BSP_USING_GPTMR:先楫的hwtimer驱动下的代码对应的宏定义,控制先楫的hwtimer驱动是否会添加到工程中

2、SConscript配置

libraries/drivers/SConscript文件为hwtimer驱动添加判断选项,如果定义了BSP_USING_GPTMR,则对应的驱动文件drv_hwtimer就会被添加到工程的源文件中。

三、驱动验证

使用hpm6750evk2的bsp V1.4.1作为说明,新建timer_demo的示例工程。

编译烧录代码,使用list_device查看设备,可以看到注册的设备已经包含了hwtimer这个设备。

运行自带的shell命令hwtimer_sample,该命令会运行5s的定时,查看readme文档

四、总结

2、除了本文阐述的外设,其他基础外设同样适配完整。

今天的文章 bsp驱动开发(bsp驱动开发怎么学)分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2026-03-03 20:33
下一篇 2026-03-03 20:51

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/49634.html