Timer

说明

硬件定时器为自动加载计数器,通过API设定超时时间,定时产生中断并进入用户回调函数,以实现定时响应、定时控制。

特点

  • 独立可编程定时器
  • 可编程超时范围周期
  • 达到预定值触发中断事件

接口列表

TIMER的CSI接口如下所示:

函数 说明
csi_timer_init 初始化
csi_timer_uninit 反初始化
csi_timer_start 开始定时
csi_timer_stop 停止定时
csi_timer_get_remaining_value 获取定时中断剩余计数值(这个值是定时器的计数器中剩余的计数值)
csi_timer_get_load_value 获取定时器加载值(这个值是定时器的计数器中的装载值)
csi_timer_is_running 检测定时器工作状态
csi_timer_attach_callback 注册回调函数
csi_timer_detach_callback 注销回调函数

TIMER的CSI接口在用户对接时是否必须适配的说明如下所示:

函数 是否必须适配
csi_timer_init 必须
csi_timer_uninit 必须
csi_timer_start 必须
csi_timer_stop 必须
csi_timer_get_remaining_value 必须
csi_timer_get_load_value 必须
csi_timer_is_running 非必须
csi_timer_attach_callback 必须
csi_timer_detach_callback 必须

接口详细说明

csi_timer_init

csi_error_t csi_timer_init(csi_timer_t *timer, uint32_t idx)
  • 功能描述:

    • 通过设备ID初始化对应的TIMER实例。
  • 参数:

    • timer: 设备句柄(需要用户申请句柄空间)。

    • idx: 设备ID。

  • 返回值:

    • 错误码csi_error_t。

csi_timer_t

成员 类型 说明
dev csi_dev_t csi设备统一句柄
callback void (callback)(csi_timer_t timer, void *arg) 用户回调函数
arg void * 回调函数对应传参
priv void * 设备私有变量

csi_timer_uninit

void csi_timer_uninit(csi_timer_t *timer)
  • 功能描述:

    • TIMER实例反初始化,该接口会停止TIMER实例正在进行的工作,并且释放相关的软硬件资源。
  • 参数:

    • timer: 设备句柄。
  • 返回值:

    • 无。

csi_timer_start

csi_error_t csi_timer_start(csi_timer_t *timer, uint32_t timeout_us)
  • 功能描述:

    • TIMER计时启动。
  • 参数:

    • timer: 设备句柄。

    • timeout_us:设置超时(单位us)。

  • 返回值:

    • 错误码csi_error_t。

csi_timer_stop

void csi_timer_stop(csi_timer_t *timer)
  • 功能描述:

    • TIMER计时停止。
  • 参数:

    • timer: 设备句柄。
  • 返回值:

    • 无。

csi_timer_get_remaining_value

uint32_t csi_timer_get_remaining_value(csi_timer_t *timer)
  • 功能描述:

    • 获取TIMER距离超时中断的剩余计时值。
  • 参数:

    • timer: 设备句柄。
  • 返回值:

    • TIMER剩余计时值。

csi_timer_get_load_value

uint32_t csi_timer_get_load_value(csi_timer_t *timer)
  • 功能描述:

    • 获取TIMER加载值。
  • 参数:

    • timer: 设备句柄。
  • 返回值:

    • TIMER加载值。

csi_timer_is_running

bool csi_timer_is_running(csi_timer_t *timer)
  • 功能描述:

    • 检测TIMER是否正在工作。
  • 参数:

    • timer: 设备句柄。
  • 返回值:

    • ture代表TIMER正在工作。

    • false代表TIMER工作停止。


csi_timer_attach_callback

csi_error_t csi_timer_attach_callback(csi_timer_t *timer, void *callback, void *arg)
  • 功能描述:

    • 注册回调函数。
  • 参数:

    • timer: 设备句柄。

    • callback: 中断回调函数。

    • arg: 回调函数对应的传参,由用户自定义。

  • 返回值:

    • 错误码csi_error_t。

callback

void (*callback)(csi_timer_t *timer, void *arg);

其中TIMER为设备句柄,arg为用户自定义的回调函数对应的参数。


csi_timer_detach_callback

void csi_timer_detach_callback(csi_timer_t *timer)
  • 功能描述:

    • 注销回调函数。
  • 参数:

    • timer: 设备句柄。
  • 返回值:

    • 无。

初始化示例

#include <stdio.h>
#include <soc.h>
#include <drv/timer.h>

static csi_timer_t g_timer;

int main(void)
{
    csi_error_t ret = 0;

    /* init timer 0 */
    ret = csi_timer_init(&g_timer, 0);

    return ret;
}

定时中断模式

#include <stdio.h>
#include <soc.h>
#include <drv/timer.h>

#define CHECK_RETURN(ret)                           \
        do {                                        \
            if (ret != 0) {                         \
                return -1;                          \
            }                                       \
        } while(0);

static csi_timer_t g_timer;
static uint8_t cb_timer_flag = 0;

static void timer_event_cb_reload_fun(csi_timer_t *timer_handle, void *arg)
{
    (void)arg;
    cb_timer_flag = 1;
}

int main(void)
{
    csi_error_t ret = 0;

    /* STEP 1:init timer 0 */
    ret = csi_timer_init(&g_timer, 0);
    CHECK_RETURN(ret);

    /* STEP 2: register callback func */
    ret = csi_timer_attach_callback(&g_timer, timer_event_cb_reload_fun, NULL);
    CHECK_RETURN(ret);

    /* STEP 3:start timer 0 */
    ret = csi_timer_start(&g_timer, 10000000);
    CHECK_RETURN(ret);

    /* STEP 4:clear flag and delay */
    cb_timer_flag = 0;
    mdelay(11000);

    /* STEP 5:judge whether the system enters the interrupt function */
    if (0 == cb_timer_flag) {
        ret = -1;
    }

    /* STEP 6:stop timer 0 */
    csi_timer_stop(&g_timer);

    /* STEP 7:cancel timer */
    csi_timer_detach_callback(&g_timer);

    /* STEP 8:uninit timer */
    csi_timer_uninit(&g_timer);

    return ret;
}

results matching ""

    No results matching ""