/** ****************************************************************************** * @file sysclk.h * @author Разваляев Алексей * @brief Драйвер тактирования системы на основе PLIB035. * Данный файл содержит определения типов, структур и прототипы функций * для работы с системным тактированием, включая: * + Типы системных тиков * + Структуру для управления коллбеками * + Прототипы функций для инициализации тактирования * + Функции настройки тактирования периферии * + Функции работы со временем * ****************************************************************************** */ #ifndef __RCU_H #define __RCU_H //-- Includes ------------------------------------------------------------------ #include "plib035.h" #include "retarget_conf.h" //-- Defines ------------------------------------------------------------------- /** @brief Конвертация МГц в Гц */ #define __MHZ 1000000 /** @brief Максимальное количество коллбеков */ #define SYSCLK_NUMB_OF_CUSTOM_CALLBACKS 16 //-- Exported variables -------------------------------------------------------- extern __IO uint32_t msTick; extern __IO uint32_t usTick; //-- Types --------------------------------------------------------------------- /** * @brief Типы частот системных тиков */ typedef enum { SYSCLK_Tick_1us = 1000000, /**< Тик 1 микросекунда */ SYSCLK_Tick_10us = 100000, /**< Тик 10 микросекунд */ SYSCLK_Tick_100us = 10000, /**< Тик 100 микросекунд */ SYSCLK_Tick_1ms = 1000, /**< Тик 1 миллисекунда */ SYSCLK_Tick_10ms = 100, /**< Тик 10 миллисекунд */ SYSCLK_Tick_100ms = 10, /**< Тик 100 миллисекунд */ }SYSCLK_TickHz_TypeDef; /** * @brief Структура для управления системными коллбеками */ typedef struct { int CallbackInUse; /**< Количество активных коллбеков */ void (*Callback[SYSCLK_NUMB_OF_CUSTOM_CALLBACKS])(void); /**< Массив указателей на функции-коллбеки */ uint32_t CallbackPeriod[SYSCLK_NUMB_OF_CUSTOM_CALLBACKS]; /**< Периоды вызова коллбеков в мс */ uint32_t CallbackPrevMs[SYSCLK_NUMB_OF_CUSTOM_CALLBACKS]; /**< Время последнего вызова коллбеков */ } SYSCLK_CallbackHandleTypeDef; //-- Exported functions prototypes --------------------------------------------- /* Инициализация системного тактирования */ void sysclk_init(void); /* Общий обработчик прерываний SysClock */ void sysclk_irq_handler(void); /* Добавление периодического коллбека */ OperationStatus SYSCLK_Set_Callback(void (*Callback)(void), uint32_t PeriodInMs); /* Получение текущего времени в миллисекундах */ uint32_t millis(void); /* Получение текущего времени в микросекундах */ uint32_t micros(void); /* Настройка тактирования АЦП */ OperationStatus rcu_set_clock_adc(RCU_PeriphClk_TypeDef ClkSrc, float ClkMHz, FunctionalState state); #endif /*__RCU_H*/