Функция сброса драйвера таймера API ASF4 Microchip - PullRequest
1 голос
/ 25 октября 2019

Я использую API ASF4 hal_timer для ARM Cortex M4. Я использую драйвер таймера для синхронизации последовательности данных. Почему не существует функции сброса? Я использую таймер в режиме TIMER_TASK_ONE_SHOT и хочу сбросить его, когда мне это понадобится.

Я думал, что простой

timer_start(&TIMER_0);
timer_stop(&TIMER_0);

справится, но, похоже, не работает.

Нужно ли повторно инициализировать таймер для каждого события синхронизации?

Возможно, я упускаю что-то очевидное. Я неправильно подхожу к этой проблеме, потому что метод timer_reset () не существует?

1 Ответ

0 голосов
/ 25 октября 2019

У меня нет опыта работы с этим API, но, глядя на документацию, видно, что один таймер может иметь несколько задач в разные периоды, поэтому сброс TIMER_0 не имеет большого смыслового смысла;скорее, вам нужно сбросить отдельную задачу таймера, прикрепленную к таймеру - из которых может быть больше одной.

Из документации (которая плохая и содержитошибки) и исходный код , который является более надежным:

timer_task_instance.time_label = TIMER_0.time ;

, где timer_task_instance - это экземпляр struct timer_task, который вы хотите сбросить. Это устанавливает время начала на текущее время.

Вероятно, лучше всего обернуть это в функцию:

// Restart current interval, return interval.
uint32_t timer_restart( struct timer_descriptor* desc, struct timer_task* tsk )
{
    tsk->time_label = desc->time
    return tsk->interval ;
}

Тогда:

timer_restart( &TIMER_0, &timer_task_instance ) ;
...