20.3. 应用示例

int test_timer_callback(void *priv)
{
	static int cnt = 0;
	printf("timer %d interrupt count %d\n", *((int *)priv), ++cnt);

	return 0;
}


int timer_example(void)
{
    // 获取一个计数器
    unsigned int timer1_id = gx_timer_register(NULL, 0xFFFFFFFF, NULL, GX_HAL_TIMER_MODE_CNT);

    // 获取计数器计数
    gx_timer_get_count(timer1_id);

    // 清空计数器计数
    gx_timer_reset_count(timer1_id);

    // 暂停计数器计数
    gx_timer_stop(timer1_id)

    // 开启计数器计数
    gx_timer_start(timer1_id)

    // 释放 timer 资源
    gx_timer_unregister(timer1_id);

    // 申请一个定时 1000ms,只触发一次的定时器
    unsigned int timer2_id = gx_timer_register(test_timer_callback, 1000, NULL, GX_HAL_TIMER_MODE_ONESHOT);

    // 申请一个每过 2000ms 就触发一次中断的定时器
    unsigned int timer3_id = gx_timer_register(test_timer_callback, 2000, NULL, GX_HAL_TIMER_MODE_PERIOD);

    // P15 管脚上生成一个 100ms 为周期,占空比为 50% 的 PWM
    gx_timer_enable_pwm(15, 100000, 50000);

    // 关闭 P15 上的 PWM
    gx_timer_disable_pwm(15);
}

备注

fornax 管脚只能生成固定 timer 的 PWM,详情需要查看管脚的复用功能是否支持 PWM 功能