OneOS驱动-RTC

OneOS驱动RTC

1、简介

RTC(Real-Time Clock)实时时钟可以提供精确的实时时间,它可以用于产生年、月、日、时、分、秒等信息。目前实时时钟芯片大多采用精度较高的晶体振荡器作为时钟源。有些时钟芯片为了在主电源掉电时还可以工作,会外加电池供电,使时间信息一直保持有效。

2、RTC设备注册

以stm32l475-atk-pandora为例。

2.1.os_driver_info_t和os_device_info_t结构体创建

  1. os_driver_info_t

位置:drivers\hal\st\drivers\drv_rtc.c

OS_DRIVER_INFO:注册结构体os_driver_info_t到"driver_table"段;

OS_DRIVER_DEFINE:注册系统启动进行初始化时调用的初始化函数。

  1. os_device_info_t

位置:templates\stm32l475-atk-pandora\board\peripherals.c

OS_HAL_DEVICE_DEFINE注册结构体os_device_info_t到"device_table"段

2.2.RTC_HandleTypeDef结构体(hrtc)

  1. 结构体定义

drivers\hal\st\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Inc\stm32l4xx_hal_rtc.h

 

  1. 结构体初始化
  1. MX_RTC_Init函数

位置:templates\stm32l475-atk-pandora\board\CubeMX_Config\Src\main.c

对Instance和Init成员进行初始化。

由上图可知,Instance成员赋值为RTC宏。RTC宏定义和RTC_TypeDef结构体定义如下。宏RTC定义为RTC寄存器的基地址,该地址指向RTC_TypeDef结构体。该结构体的成员都是32位的寄存器,是与时间、日期等相关的寄存器。只要知道该结构体的基地址,即下图中的RTC_BASE,那么就能够访问其中的寄存器成员,从而可以进行时间和日期的获取、设置等操作。

 

位置:st\STM32L4xx_HAL\CMSIS\Device\ST\STM32L4xx\Include\stm32l475xx.h

 

(2)其他初始化函数

位置:drivers\hal\st\STM32L4xx_HAL\STM32L4xx_HAL_Driver\Src\stm32l4xx_hal_rtc.c

HAL_RTC_InitHAL_RTC_DeInit函数:主要对结构体中的函数指针成员的赋值;

HAL_RTC_RegisterCallbackHAL_RTC_UnRegisterCallback函数:同样是对结构体中的函数指针成员的赋值。

 

3、注册函数

设备驱动层probe函数:

注意:操作接口只有一个os_rtc_control接口。

结构体stm32_rtc

注意,上面probe函数直接调用os_device_register,即无设备框架层,直接注册到设备管理层

虽然没有注册到设备框架层,但是仍然有drivers\rtc\rtc.c本来一般rtc.c为设备框架层,但是此处不同,注册时并未到这一层,而且用户调用也从rtc.c开始,并不是从设备管理层开始。访问RTC设备直接从rtc.c中的接口开始,而设备管理层的接口又放在rtc.c中的接口中调用。具体看下面设备访问一节。

4、RTC设备访问

位置:drivers\rtc\rtc.c

另外还有set_date和set_time两个接口,用户可由这两个接口通过调用rtc_get、rtc_set接口完成日期和时间的设置。

 

rtc_get结构的执行流程。

 

rtc.c

rtc_get

device.c

os_device_open_s

os_device_control

drv_rtc.c

os_rtc_control

stm32_rtc_get_timestamp

device.c

os_device_close

 

其中的RTC_HandleTypeDef结构体hrtc中包含有RTC寄存器基地址成员,这在前面的内容中讲过。再借助HAL_RTC_GetTime和HAL_RTC_GetDate接口来访问寄存器获取时间和日期。

人大毕业生盗取全校学生信息建颜值打分网站,已被刑拘 基于 NT 架构的全新 QQ Windows 版正式发布 美国将限制中国使用亚马逊、微软等提供训练 AI 模型的云服务 资金严重短缺,又一流行开源项目宣布停止功能开发 2023 年收入最高的技术岗位 LeaferJS 发布:开源、性能强悍的 2D 图形库 Visual Studio Code 1.80 发布,支持终端图片功能 Threads 注册量已破三千万,后端基于 CPython 深度“魔改” deepin 采用 Asahi Linux 适配 Apple M1 7 月数据库排行:Oracle 大涨,再度拉开比分
{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/5443273/blog/10086160
RTC