介绍关于RTC初始化、获取时间、设置时间、关闭等功能所调用的一些抽象函数。

API列表

函数名称 功能描述
hal_rtc_init 初始化指定RTC
hal_rtc_get_time 获取指定RTC时间
hal_rtc_set_time 设置指定RTC时间
hal_rtc_finalize 关闭指定RTC

hal_rtc_init

定义描述
定义 描述
函数原型 int32_t hal_rtc_init(rtc_dev_t *rtc)
描述 初始化指定RTC
参数 rtc:RTC设备描述
返回值 返回成功或失败,返回0表示RTC初始化成功,非0表示失败

调用示例

具体请参见使用示例

hal_rtc_get_time

定义描述
定义 描述
函数原型 int32_t hal_rtc_get_time(rtc_dev_t *rtc, rtc_time_t *time)
描述 获取指定RTC时间
参数
  • rtc:RTC设备描述
  • time:要读取的时间
返回值 返回成功或失败,返回0表示RTC时间获取成功,非0表示失败

调用示例

具体请参见使用示例

hal_rtc_set_time

定义描述
定义 描述
函数原型 int32_t hal_rtc_set_time(rtc_dev_t *rtc, constrtc_time_t *time)
描述 设置指定RTC时间
参数
  • rtc:RTC设备描述
  • time:要设定的时间
返回值 返回成功或失败,返回0表示RTC时间设定成功,非0表示失败

调用示例

具体请参见使用示例

hal_rtc_finalize

定义描述
定义 描述
函数原型 int32_t hal_rtc_finalize(rtc_dev_t *rtc)
描述 关闭指定RTC
参数 rtc:RTC设备描述
返回值 返回成功或失败,返回0表示RTC关闭成功,非0表示失败

调用示例

具体请参见使用示例

相关宏定义

#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;

使用示例

#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");
        return -1;
    }

    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.chal_wdg_xxmcu.h的文件,并将这两个文件放到platform/mcu/xxmcu/hal目录下。在hal_rtc_xxmcu.c中实现所需要的hal函数,hal_rtc_xxmcu.h中放置相关宏定义。具体请参见platform/mcu/stm32l4xx_cube/hal/hal_rtc_stm32l4.c