112 lines
5.1 KiB
C
112 lines
5.1 KiB
C
/**
|
||
******************************************************************************
|
||
* @file tmr.h
|
||
* @author Разваляев Алексей
|
||
* @brief Драйвер UART на основе PLIB035.
|
||
* Данный файл содержит определения типов, структур и прототипы функций
|
||
* для работы с TMR, включая:
|
||
* + Структуры и typedef для таймеров
|
||
* + Макросы для конфигурации периодов и частот
|
||
* + Прототипы функций для инициализации и API драйвера
|
||
*
|
||
******************************************************************************
|
||
*/
|
||
#ifndef __TMR_H
|
||
#define __TMR_H
|
||
//-- Includes ------------------------------------------------------------------
|
||
#include "plib035.h"
|
||
#include "retarget_conf.h"
|
||
|
||
//-- Defines -------------------------------------------------------------------
|
||
// Дефайны для режима таймера Период в мкс, Частота, ПсевдоПрескалер, Период в тиках
|
||
/** @brief Период в мкс */
|
||
#define PERIOD_US(_per_) (_per_), 0, 0, 0
|
||
/** @brief Период в Гц */
|
||
#define FREQ_HZ(_freq_) 0, (_freq_), 0, 0
|
||
/** @brief Период в прескалере и тиках */
|
||
#define LOAD(_load_, _presc_) 0, 0, (_presc_), (_load_)
|
||
|
||
//-- Types ---------------------------------------------------------------------
|
||
|
||
/**
|
||
* @brief Типы callback-функций TMR
|
||
*/
|
||
typedef enum
|
||
{
|
||
TMR_Callback_Update, /*!< Переполнение (опустошение) таймера */
|
||
} TMR_CallbackTypeDef;
|
||
|
||
/**
|
||
* @brief Расширенная конфигурация таймера
|
||
*/
|
||
typedef struct
|
||
{
|
||
float ClkFreq; /*!< Частота тактирования таймера в МГц */
|
||
|
||
uint32_t PeriodUs; /*!< Период таймера в мкс */
|
||
uint32_t FreqHz; /*!< Частота таймера в Гц */
|
||
uint32_t Prescaler; /*!< Псевдопрескалер */
|
||
uint32_t Load; /*!< Период таймера в тиках */
|
||
|
||
FunctionalState IT; /*!< Разрешение прерывания */
|
||
FunctionalState ADCSOC; /*!< Разрешение генерации запуска АЦП */
|
||
FunctionalState DMAReq; /*!< Разрешение генерации DMA-запросов */
|
||
TMR_ExtInput_TypeDef ExtInput; /*!< Настройка внешнего тактирования таймера */
|
||
|
||
void (*UpdCallback)(void); /*!< Callback-функция по прерыванию таймера */
|
||
} TMR_ExtInit_TypeDef;
|
||
|
||
/**
|
||
* @brief Хендл таймера
|
||
*/
|
||
typedef struct
|
||
{
|
||
TMR_TypeDef *Instance; /*!< Указатель на регистры таймера */
|
||
TMR_ExtInit_TypeDef *Config; /*!< Конфигурация таймера */
|
||
} TMR_HandleTypeDef;
|
||
|
||
//-- External handles ----------------------------------------------------------
|
||
extern TMR_HandleTypeDef htmr0;
|
||
extern TMR_HandleTypeDef htmr1;
|
||
extern TMR_HandleTypeDef htmr2;
|
||
extern TMR_HandleTypeDef htmr3;
|
||
|
||
//-- Exported functions prototypes ---------------------------------------------
|
||
|
||
/* Init functions */
|
||
|
||
/* Первичная инициализация таймеров */
|
||
void tmr_init_first(void);
|
||
/* Общий обработчик прерывания таймера */
|
||
void tmr_irq_handler(TMR_HandleTypeDef* htmr);
|
||
/* Инициализация TMRx */
|
||
OperationStatus tmr_init(TMR_HandleTypeDef *htmr, TMR_ExtInit_TypeDef *NewConfig);
|
||
/* Инициализация таймера (её нет в PLIB, поэтому она здесь) */
|
||
void TMR_Init(TMR_TypeDef* TMRx, TMR_ExtInit_TypeDef* InitStruct);
|
||
|
||
/* Установка callback-функции таймера */
|
||
OperationStatus TMR_Set_Callback(TMR_HandleTypeDef* htmr, TMR_CallbackTypeDef CallbackType, void (*Callback)(void));
|
||
|
||
|
||
|
||
/* API functions*/
|
||
|
||
/* Запуск таймера */
|
||
OperationStatus TMR_Start(TMR_HandleTypeDef *htmr, FunctionalState IT);
|
||
/* Остановка таймера */
|
||
OperationStatus TMR_Stop(TMR_HandleTypeDef *htmr, FunctionalState IT);
|
||
/*Получить счетчик таймера (с псевдопрескалером) */
|
||
uint32_t TMR_Get_Cnt(TMR_HandleTypeDef *htmr);
|
||
/* Получить период таймера (с псевдопрескалером) */
|
||
uint32_t TMR_Get_Period(TMR_HandleTypeDef *htmr);
|
||
|
||
/* Задержка в тиках таймера (блокирующая). */
|
||
OperationStatus TMR_Delay(TMR_HandleTypeDef *htmr, uint32_t delay);
|
||
/* Проверка завершения неблокирующей задержки. */
|
||
OperationStatus TMR_Delay_Start(TMR_HandleTypeDef *htmr, uint32_t *var);
|
||
/* Проверка завершения неблокирующей задержки. */
|
||
int TMR_Delay_Done(TMR_HandleTypeDef *htmr, uint32_t delay, uint32_t *var);
|
||
|
||
|
||
#endif /*__TMR_H*/
|