RTC

更新时间:2019-01-25 14:43:34

接口列表

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

接口详情

int32_t hal_rtc_init(rtc_dev_t *rtc)

描述 初始化指定RTC
参数 rtc:RTC设备描述
time:存储时间的缓冲区
返回值 返回成功或失败, 返回0表示RTC初始化成功,非0表示失败

int32_t hal_rtc_get_time(rtc_dev_t *rtc, rtc_time_t *time)

描述 获取指定RTC时间
参数 rtc:RTC设备描述
time:要设定的时间
返回值 返回成功或失败, 返回0表示RTC时间获取成功,非0表示失败

int32_t hal_rtc_set_time(rtc_dev_t *rtc, const rtc_time_t *time)

描述 设置指定RTC时间
参数 rtc:RTC设备描述
返回值 返回成功或失败, 返回0表示RTC时间设定成功,非0表示失败

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

    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中放置相关宏定义。
   参考platform/mcu/stm32l4xx/src/STM32L496G-Discovery/hal/hal\_rtc\_stm32l4.c

results matching ""

    No results matching ""