Files
VK035_Template/MDK-ARM/Core/App/sysclk.h

79 lines
3.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
******************************************************************************
* @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*/