Обновлены шапки и по мелочи
This commit is contained in:
@@ -23,43 +23,49 @@
|
||||
##### Как использовать этот драйвер #####
|
||||
==============================================================================
|
||||
|
||||
1. Настройка периферии (periph_config.h):
|
||||
(+) Определить структуры TMR_ExtInit_TypeDef для нужных таймеров:
|
||||
tmr0_config, tmr1_config, tmr2_config, tmr3_config
|
||||
(+) Настроить частоту/период в мкс или тиках, прескалер
|
||||
(+) Разрешить прерывания (IT) и при необходимости ADC SOC / DMA запросы
|
||||
(+) Указать внешнее тактирование при необходимости
|
||||
(+) Установить callback-функцию (можно NULL)
|
||||
1. Настройка в periph_config.h:
|
||||
(+) Определите структуры tmr0_config, tmr1_config и т.д.
|
||||
(+) Используйте макросы для задания периода:
|
||||
• PERIOD_US(us) - период в микросекундах
|
||||
• FREQ_HZ(hz) - частота в герцах
|
||||
• LOAD(ticks, presc) - период в тиках с псевдопрескалером
|
||||
|
||||
2. Инициализация таймеров:
|
||||
(+) tmr_init_first() — первичная настройка тактирования, сброс периферии и NVIC
|
||||
(+) tmr_init(&htmr, &config) — инициализация конкретного таймера с конфигурацией
|
||||
2. Инициализация:
|
||||
(+) tmr_init_first() - включает тактирование и сброс таймеров
|
||||
(+) Для каждого таймера автоматически создается хендл (htmr0, htmr1...)
|
||||
|
||||
3. Callback-функции (опционально):
|
||||
(+) TMR_Set_Callback(&htmr, TMR_Callback_Update, Callback)
|
||||
3. Работа с таймером:
|
||||
(+) TMR_Start(&htmr, IT) / TMR_Stop(&htmr, IT) - запуск и остановка
|
||||
(+) TMR_Set_Callback(&htmr, TMR_Callback_Update, func) - установка обработчика
|
||||
(+) TMR_Get_Cnt(&htmr) - текущее значение (уже поделенное на прескалер)
|
||||
(+) TMR_Get_Period(&htmr) - период (уже поделенный на прескалер)
|
||||
|
||||
4. Запуск и остановка таймера:
|
||||
(+) TMR_Start(&htmr) — запуск таймера
|
||||
(+) TMR_Stop(&htmr) — остановка таймера
|
||||
4. Задержки:
|
||||
(+) TMR_Delay(&htmr, ticks) - блокирующая задержка в тиках таймера с псевдопрескалером
|
||||
(+) TMR_Delay_Start(&htmr, &var) + TMR_Delay_Done(&htmr, ticks, &var) - неблокирующая
|
||||
задержка в тиках таймера с псевдопрескалером
|
||||
|
||||
5. Задержки:
|
||||
- Blocking (блокирующая):
|
||||
(+) TMR_Delay(&htmr, ticks) — задержка в тиках таймера
|
||||
- Non-blocking (неблокирующая):
|
||||
(+) TMR_Delay_Start(&htmr, &var) — запоминает текущее значение таймера
|
||||
(+) TMR_Delay_Done(&htmr, ticks, &var) — проверяет завершение задержки
|
||||
5. Обработка прерываний:
|
||||
(+) Callback-функция будет вызвана автоматически
|
||||
|
||||
==============================================================================
|
||||
##### Особенности работы #####
|
||||
==============================================================================
|
||||
|
||||
6. Получение текущих значений:
|
||||
(+) TMR_Get_Cnt(&htmr) — получение текущего счетчика с учетом псевдопрескалера
|
||||
(+) TMR_Get_Period(&htmr) — получение периода таймера с учетом псевдопрескалера
|
||||
- Псевдопрескалер:
|
||||
- Это программная абстракция, реальный счетчик всегда считает полные тики
|
||||
- TMR_Get_Cnt() возвращает значение уже поделенное на (Prescaler+1)
|
||||
- Позволяет увеличить максимальный период в (Prescaler+1) раз
|
||||
- Пример: LOAD(1000, 99) даст реальный период в 100 раз больше
|
||||
|
||||
7. Обработка прерываний:
|
||||
(+) tmr_irq_handler(&htmr) — общий обработчик ISR
|
||||
- В обработчиках автоматически вызываются соответствующие callback-функции
|
||||
и сбрасываются флаги
|
||||
- Особенности счетчиков:
|
||||
- Максимальный период: 42.9 сек при 100 МГц
|
||||
- Таймеры используют убывающий счет (от LOAD до 0). Функция TMR_Get_Cnt
|
||||
возвращает инвертированный счетчик (LOAD-VALUE)
|
||||
|
||||
8. Псевдо-PLIB функции:
|
||||
(+) TMR_Init(TMRx, InitStruct) — инициализация таймера с расширенными параметрами
|
||||
- Задержки:
|
||||
- TMR_Delay проверяет, что задержка < LOAD, иначе вернет ERROR
|
||||
- Неблокирующие задержки используют "сырые" тики (без учета прескалера)
|
||||
|
||||
@endverbatim
|
||||
******************************************************************************
|
||||
@@ -226,6 +232,7 @@ OperationStatus TMR_Stop(TMR_HandleTypeDef *htmr, FunctionalState IT)
|
||||
* @retval Текущие значение счетчика с псевдопрескалером
|
||||
* @details Если частота таймера 100 МГц, и псведопрескалер 100-1,
|
||||
* то при реальном счетчике 100,000, вернется значение 1,000
|
||||
* Также переводит счетчик в возрастающий (LOAD-VALUE)
|
||||
*/
|
||||
uint32_t TMR_Get_Cnt(TMR_HandleTypeDef *htmr)
|
||||
{
|
||||
@@ -235,7 +242,7 @@ uint32_t TMR_Get_Cnt(TMR_HandleTypeDef *htmr)
|
||||
}
|
||||
|
||||
uint32_t presc = htmr->Config->Prescaler+1;
|
||||
uint32_t currtick = htmr->Instance->VALUE;
|
||||
uint32_t currtick = (htmr->Instance->LOAD - htmr->Instance->VALUE);
|
||||
|
||||
return currtick/presc;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user