Добавлено:
- рефакторинг названий: - маленькие буквы - инит периферии - ТакойСтильФункций - API для использования - сделаны шапки с инструкциями к функциями - доработан ацп секвенсора - доработан систем тики. можно настроить его на разные частоты и подключить коллбеки на разный период - в gpio добавлены функции для кнопок и диодов - генерация бинарника
This commit is contained in:
120
Core/App/tmr.h
120
Core/App/tmr.h
@@ -1,11 +1,16 @@
|
||||
/*==============================================================================
|
||||
* Инициализация таймеров с использованием бибилотеки PLIB035
|
||||
*------------------------------------------------------------------------------
|
||||
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
|
||||
*==============================================================================
|
||||
* ЦНИИ СЭТ
|
||||
*==============================================================================
|
||||
*/
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file tmr.h
|
||||
* @author Разваляев Алексей
|
||||
* @brief Драйвер UART на основе PLIB035.
|
||||
* Данный файл содержит определения типов, структур и прототипы функций
|
||||
* для работы с TMR, включая:
|
||||
* + Структуры и typedef для таймеров
|
||||
* + Макросы для конфигурации периодов и частот
|
||||
* + Прототипы функций для инициализации и API драйвера
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
#ifndef __TMR_H
|
||||
#define __TMR_H
|
||||
//-- Includes ------------------------------------------------------------------
|
||||
@@ -13,51 +18,94 @@
|
||||
#include "retarget_conf.h"
|
||||
|
||||
//-- Defines -------------------------------------------------------------------
|
||||
// Дефайны для режима таймера Период в мкс, Частота, ПсевдоПрескалер, Период в тиках
|
||||
#define PERIOD_MKS(_per_) _per_, 0, 0, 0
|
||||
#define FREQ_HZ(_freq_) 0, _freq_, 0, 0
|
||||
#define LOAD(_load_, _presc_) 0, 0, _presc_, _load_
|
||||
// Дефайны для режима таймера Период в мкс, Частота, ПсевдоПрескалер, Период в тиках
|
||||
/** @brief Период в мкс */
|
||||
#define PERIOD_MKS(_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; /*!< Частота тактирования таймера в МГц */
|
||||
float ClkFreq; /*!< Частота тактирования таймера в МГц */
|
||||
|
||||
uint32_t PeriodUs; /*!< Период таймера в мкс */
|
||||
uint32_t FreqHz; /*!< Частота таймера в Гц */
|
||||
uint32_t Prescaler; /*!< Псевдопрескалер частоты */
|
||||
uint32_t Load; /*!< Период таймера в тиках */
|
||||
uint32_t PeriodUs; /*!< Период таймера в мкс */
|
||||
uint32_t FreqHz; /*!< Частота таймера в Гц */
|
||||
uint32_t Prescaler; /*!< Псевдопрескалер */
|
||||
uint32_t Load; /*!< Период таймера в тиках */
|
||||
|
||||
FunctionalState IT; /*!< Разрешение работы прерывания */
|
||||
FunctionalState ADCSOC; /*!< Разрешение генерации сигналов запуска АЦП */
|
||||
FunctionalState DMAReq; /*!< Разрешение генерации запросов к DMA */
|
||||
FunctionalState IT; /*!< Разрешение прерывания */
|
||||
FunctionalState ADCSOC; /*!< Разрешение генерации запуска АЦП */
|
||||
FunctionalState DMAReq; /*!< Разрешение генерации DMA-запросов */
|
||||
TMR_ExtInput_TypeDef ExtInput; /*!< Настройка внешнего тактирования таймера */
|
||||
void (*Callback)(void); /* Коллбек который вызовется по прерыванию таймера */
|
||||
}TMR_ExtInit_TypeDef;
|
||||
|
||||
void (*UpdCallback)(void); /*!< Callback-функция по прерыванию таймера */
|
||||
} TMR_ExtInit_TypeDef;
|
||||
|
||||
/**
|
||||
* @brief Хендл таймера
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
TMR_TypeDef *Instance;
|
||||
TMR_ExtInit_TypeDef *Config;
|
||||
}TMR_HandleTypeDef;
|
||||
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);
|
||||
OperationStatus tmr_set_callback(TMR_HandleTypeDef* htmr, int cb_type, void (*Callback)(void));
|
||||
|
||||
OperationStatus tmr_start(TMR_HandleTypeDef *htmr);
|
||||
OperationStatus tmr_stop(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);
|
||||
|
||||
|
||||
void tmr_handler(TMR_HandleTypeDef* htmr);
|
||||
/* Инициализация таймера (её нет в 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*/
|
||||
|
||||
Reference in New Issue
Block a user