#include "timer_u.h" void timer_set_pause_and_counter_zero(int group, int timer) { timer_pause(group, timer); timer_set_counter_value(group, timer, 0); } void port_timer_delay_ms(uint64_t delay) { uint64_t timer_count = 0; timer_set_counter_value(TIMER_GROUP_0, TIMER_0, 0); timer_start(TIMER_GROUP_0, TIMER_0); while (timer_count < (delay * 1000)) { timer_get_counter_value(TIMER_GROUP_0, TIMER_0, &timer_count); } timer_pause(TIMER_GROUP_0, TIMER_0); } void timer_group_init(int group, int timer, bool auto_reload, int timer_interval, uint32_t timer_unit_time) { /* Select and initialize basic parameters of the timer */ timer_config_t config = { .divider = 80, .counter_dir = TIMER_COUNT_UP, .counter_en = TIMER_PAUSE, .alarm_en = TIMER_ALARM_EN, .auto_reload = auto_reload, }; // default clock source is APB timer_init(group, timer, &config); /* Timer's counter will initially start from value below. Also, if auto_reload is set, this value will be automatically reload on alarm */ timer_set_counter_value(group, timer, 0); //指定定时器首个计数值为0 //检查定时器的当前值,调用函数 timer_get_counter_value() 或 timer_get_counter_time_sec()。 //可通过调用函数 timer_pause() 随时暂停定时器。要再次启动它,调用函数 timer_start()。 /* Configure the alarm value and the interrupt on alarm. */ timer_set_alarm_value(group, timer, timer_interval * ((80 * timer_unit_time) / 80)); timer_enable_intr(group, timer); // timer_isr_callback_add(group, timer, timer_group_isr_callback, NULL, 0); // timer_start(group, timer); timer_pause(group, timer); }