RTC
介绍
对于不同底层驱动的rtc操作实现,统一封装成本文所述hal rtc接口。 hal相关头文件位于目录:include/aos/hal hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal
API列表
函数名称 | 功能描述 |
---|---|
hal_rtc_init | 初始化指定RTC |
hal_rtc_get_time | 获取指定RTC时间 |
hal_rtc_set_time | 设置指定RTC时间 |
hal_rtc_finalize | 关闭指定RTC |
API详情
相关宏
#define HAL_RTC_FORMAT_DEC 1
#define HAL_RTC_FORMAT_BCD 2
相关数据结构
rtc_dev_t
typedef struct {
uint8_t port; /* rtc port */
rtc_config_t config; /* rtc config */
void *priv; /* priv data */
} rtc_dev_t;
rtc_config_t
typedef struct {
uint8_t format; /* time formart DEC or BCD */
} rtc_config_t;
rtc_time_t
typedef struct {
uint8_t sec; /* DEC format:value range from 0 to 59, BCD format:value range from 0x00 to 0x59 */
uint8_t min; /* DEC format:value range from 0 to 59, BCD format:value range from 0x00 to 0x59 */
uint8_t hr; /* DEC format:value range from 0 to 23, BCD format:value range from 0x00 to 0x23 */
uint8_t weekday; /* DEC format:value range from 1 to 7, BCD format:value range from 0x01 to 0x07 */
uint8_t date; /* DEC format:value range from 1 to 31, BCD format:value range from 0x01 to 0x31 */
uint8_t month; /* DEC format:value range from 1 to 12, BCD format:value range from 0x01 to 0x12 */
uint8_t year; /* DEC format:value range from 0 to 99, BCD format:value range from 0x00 to 0x99 */
} rtc_time_t;
hal_rtc_init
初始化指定RTC
函数原型
int32_t hal_rtc_init(rtc_dev_t *rtc);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
rtc_dev_t *rtc | 入参 | 初始化指定RTC | 用户自定义一个rtc_dev_t结构体 |
返回值
返回成功或失败, 返回0表示RTC初始化成功,非0表示失败
调用示例
#define RTC1_PORT_NUM 1
rtc_dev_t rtc1;
/* rtc port set */
rtc1.port = RTC1_PORT_NUM;
/* set to DEC format */
rtc1.config.format = HAL_RTC_FORMAT_DEC;
ret = hal_rtc_init(&rtc1);
hal_rtc_get_time
获取指定RTC时间
函数原型
int32_t hal_rtc_get_time(rtc_dev_t *rtc, rtc_time_t *time);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
rtc_dev_t *rtc | 入参 | RTC设备描述 | 使用hal_rtc_init时传入rtc_dev_t结构体 |
rtc_time_t *time | 出参 | 要获取的时间 | 用户创建rtc_time_t结构体传入指针 |
返回值
返回成功或失败, 返回0表示RTC时间获取成功,非0表示失败
调用示例
rtc_time_t time_buf;
memset(&time_buf, 0, sizeof(rtc_time_t));
ret = hal_rtc_get_time(&rtc1, &time_buf);
hal_rtc_set_time
设置指定RTC时间
函数原型
int32_t hal_rtc_set_time(rtc_dev_t *rtc, const rtc_time_t *time);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
rtc_dev_t *rtc | 入参 | RTC设备描述 | 使用hal_rtc_init时传入rtc_dev_t结构体 |
rtc_time_t *time | 入参 | 要设置的时间 | 用户创建rtc_time_t结构体传入指针 |
返回值
返回成功或失败, 返回0表示RTC时间设定成功,非0表示失败
调用示例
rtc_time_t time_buf;
time_buf.sec = 0;
time_buf.min = 0;
time_buf.hr = 0;
time_buf.weekday = 2;
time_buf.date = 1;
time_buf.month = 1;
time_buf.year = 2019;
/* set rtc1 time to 2019/1/1,00:00:00 */
ret = hal_rtc_set_time(&rtc1, &time_buf);
hal_rtc_finalize
关闭指定RTC
函数原型
int32_t hal_rtc_finalize(rtc_dev_t *rtc);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
rtc_dev_t *rtc | 入参 | RTC设备描述 | 使用hal_rtc_init时传入rtc_dev_t结构体 |
返回值
返回成功或失败, 返回0表示RTC关闭成功,非0表示失败
调用示例
hal_rtc_finalize(&rtc1);
使用
添加该组件
在相应的platform/mcu的mk内,添加对应hal文件的编译包含。
包含头文件
#include "aos/hal/rtc.h"
使用示例
#include <aos/hal/rtc.h>
#define RTC1_PORT_NUM 1
/* define dev */
rtc_dev_t rtc1;
int application_start(int argc, char *argv[])
{
int ret = -1;
rtc_config_t rtc_cfg;
rtc_time_t time_buf;
/* rtc port set */
rtc1.port = RTC1_PORT_NUM;
/* set to DEC format */
rtc1.config.format = HAL_RTC_FORMAT_DEC;
/* init rtc1 with the given settings */
ret = hal_rtc_init(&rtc1);
if (ret != 0) {
printf("rtc1 init error !\n");
}
time_buf.sec = 0;
time_buf.min = 0;
time_buf.hr = 0;
time_buf.weekday = 2;
time_buf.date = 1;
time_buf.month = 1;
time_buf.year = 2019;
/* set rtc1 time to 2019/1/1,00:00:00 */
ret = hal_rtc_set_time(&rtc1, &time_buf);
if (ret != 0) {
printf("rtc1 set time error !\n");
}
memset(&time_buf, 0, sizeof(rtc_time_t));
/* get rtc current time */
ret = hal_rtc_get_time(&rtc1, &time_buf);
if (ret != 0) {
printf("rtc1 get time error !\n");
}
/* finalize rtc1 */
hal_rtc_finalize(&rtc1);
while(1) {
/* sleep 500ms */
aos_msleep(500);
};
}
注:port为逻辑端口号,其与物理端口号的对应关系见具体的对接实现
移植说明
新建hal_rtc_xxmcu.c和hal_wdg_xxmcu.h的文件,并将这两个文件放到platform/mcu/xxmcu/hal目录下。在hal_rtc_xxmcu.c中实现所需要的hal函数,hal_rtc_xxmcu.h中放置相关宏定义。<br /> 参考platform/mcu/stm32l4xx/src/STM32L496G-Discovery/hal/hal_rtc_stm32l4.c