TIMER
介绍
对于不同底层驱动的timer操作实现,统一封装成本文所述hal timer接口。 hal相关头文件位于目录:include/aos/hal hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal/
API列表
函数名称 | 功能描述 |
---|---|
hal_timer_init | 初始化指定TIMER |
hal_timer_start | 启动指定的TIMER |
hal_timer_stop | 停止指定的TIMER |
hal_timer_para_chg | 改变指定TIMER的参数 |
hal_timer_finalize | 关闭指定TIMER |
API详情
相关宏定义
#define TIMER_RELOAD_AUTO 1 /* timer reload automatic */
#define TIMER_RELOAD_MANU 2 /* timer reload manual */
相关数据结构
timer_dev_t
typedef struct {
int8_t port; /* timer port */
timer_config_t config; /* timer config */
void *priv; /* priv data */
} timer_dev_t;
timer_config_t
typedef struct {
uint32_t period; /* timer period, us */
uint8_t reload_mode; /* auto reload or not */
hal_timer_cb_t cb; /* timer handle when expired */
void *arg; /*timer handle args */
} timer_config_t;
hal_timer_cb_t
typedef void (*hal_timer_cb_t)(void *arg);
hal_timer_init
初始化指定TIMER
函数原型
int32_t hal_timer_init(timer_dev_t *tim);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
timer_dev_t *tim | 入参 | TIMER设备描述,定义需要初始化的TIMER参数 | 用户自定义一个timer_dev_t结构体 |
返回值
返回成功或失败, 返回0表示TIMER初始化成功,非0表示失败
调用示例
#define TIMER1_PORT_NUM 1
/* define dev */
timer_dev_t timer1;
/* timer port set */
timer1.port = TIMER1_PORT_NUM;
/* timer attr config */
timer1.config.period = 1000000; /* 1s */
timer1.config.reload_mode = TIMER_RELOAD_AUTO;
timer1.config.cb = timer_handler;
/* init timer1 with the given settings */
ret = hal_timer_init(&timer1);
hal_timer_start
启动指定的TIMER
函数原型
int32_t hal_timer_start(timer_dev_t *tim);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
timer_dev_t *tim | 入参 | TIMER设备描述 | 使用hal_timer_init时传入timer_dev_t结构体 |
返回值
返回成功或失败, 返回0表示TIMER启动成功,非0表示失败
调用示例
ret = hal_timer_start(&timer1);
hal_timer_stop
停止指定的TIMER
函数原型
int32_t hal_timer_stop(timer_dev_t *tim);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
timer_dev_t *tim | 入参 | TIMER设备描述 | 使用hal_timer_init时传入timer_dev_t结构体 |
返回值
返回成功或失败, 返回0表示TIMER停止成功,非0表示失败
调用示例
ret = hal_timer_stop(&timer1);
hal_timer_para_chg
改变指定TIMER的参数
函数原型
int32_t hal_timer_para_chg(timer_dev_t *tim, timer_config_t para);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
timer_dev_t *tim | 入参 | TIMER设备描述 | 使用hal_timer_init时传入timer_dev_t结构体 |
timer_config_t para | 入参 | 新TIMER配置信息 | {2000000} |
返回值
返回成功或失败, 返回0表示TIMER参数改变成功,非0表示失败
调用示例
timer_config_t timer_cfg;
memset(&timer_cfg, 0, sizeof(timer_config_t));
timer_cfg.period = 2000000;
ret = hal_timer_para_chg(&timer1, timer_cfg);
hal_timer_finalize
关闭指定TIMER
函数原型
int32_t hal_timer_finalize(timer_dev_t *tim);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
timer_dev_t *tim | 入参 | TIMER设备描述 | 使用hal_timer_init时传入timer_dev_t结构体 |
返回值
返回成功或失败, 返回0表示TIMER关闭成功,非0表示失败
调用示例
ret = hal_timer_finalize(&timer1);
使用
添加该组件
在相应的platform/mcu的mk内,添加对应hal文件的编译包含。
包含头文件
#include "aos/hal/timer.h"
使用示例
#include <aos/hal/timer.h>
#define TIMER1_PORT_NUM 1
/* define dev */
timer_dev_t timer1;
void timer_handler(void *arg)
{
static int timer_cnt = 0;
printf("timer_handler: %d times !\n", timer_cnt++);
}
int application_start(int argc, char *argv[])
{
int32_t ret = -1;
timer_config_t timer_cfg;
static int count = 0;
/* timer port set */
timer1.port = TIMER1_PORT_NUM;
/* timer attr config */
timer1.config.period = 1000000; /* 1s */
timer1.config.reload_mode = TIMER_RELOAD_AUTO;
timer1.config.cb = timer_handler;
/* init timer1 with the given settings */
ret = hal_timer_init(&timer1);
if (ret != 0) {
printf("timer1 init error !\n");
}
/* start timer1 */
ret = hal_timer_start(&timer1);
if (ret != 0) {
printf("timer1 start error !\n");
}
while(1) {
/* change the period to 2s */
if (count == 5) {
memset(&timer_cfg, 0, sizeof(timer_config_t));
timer_cfg.period = 2000000;
ret = hal_timer_para_chg(&timer1, timer_cfg);
if (ret != 0) {
printf("timer1 para change error !\n");
}
}
/* stop and finalize timer1 */
if (count == 20) {
hal_timer_stop(&timer1);
hal_timer_finalize(&timer1);
}
/* sleep 1000ms */
aos_msleep(1000);
count++;
};
}
注:port为逻辑端口号,其与物理端口号的对应关系见具体的对接实现
移植说明
新建hal_timer_xxmcu.c和hal_timer_xxmcu.h的文件,并将这两个文件放到platform/mcu/xxmcu/hal目录下。在hal_timer_xxmcu.c中实现所需要的hal函数,hal_timer_xxmcu.h中放置相关宏定义。<br /> 参考platform/mcu/stm32l4xx/src/STM32L496G-Discovery/hal/hal_timer_stm32l4.c