79 lines
3.7 KiB
C
79 lines
3.7 KiB
C
/**
|
||
******************************************************************************
|
||
* @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*/
|