/*============================================================================== * @file periph_config.h * @author Разваляев Алексей *------------------------------------------------------------------------------ * Общий файл конфигурации периферии проекта. * * Содержит: * + Глобальные флаги включения периферии (USE_...) * + Конфигурации тактирования и источников RCU * + Таблицы конфигурации GPIO * + Конфигурационные структуры для периферии: * - GPIO * - UART * - TMR (таймеры) * - ADC (SEQ и DC) * - DMA * - NVIC (приоритеты прерываний) * * Используется драйверами: * - gpio.c * - uart.c * - tmr.c * - adc.c * - dma.c * * Реализация инициализации периферии находится в соответствующих *.c файлах. *============================================================================== */ #pragma once //-- Includes ------------------------------------------------------------------ #include "sysclk.h" #include "gpio.h" #include "uart.h" #include "tmr.h" #include "adc.h" /* Обработчик ошибок */ void Error_Handler(void); //-- Общие Конфигурации ------------------------------------------------------- // 0 - использовать периферию // 1 - не использовать /* UART */ #define USE_UART0 0 /*!< Использовать UART0 */ #define USE_UART1 0 /*!< Использовать UART1 */ /* Timers */ #define USE_TMR0 0 /*!< Использовать Таймер 0 */ #define USE_TMR1 0 /*!< Использовать Таймер 1 */ #define USE_TMR2 0 /*!< Использовать Таймер 2 */ #define USE_TMR3 0 /*!< Использовать Таймер 3 */ /* ADC */ #define USE_ADC_SEQ0 0 /*!< Использовать Секвенсор 0 */ #define USE_ADC_SEQ1 0 /*!< Использовать Секвенсор 1 */ #define USE_ADC_DC0 0 /*!< Использовать Компаратор 0 */ #define USE_ADC_DC1 0 /*!< Использовать Компаратор 1 */ #define USE_ADC_DC2 0 /*!< Использовать Компаратор 2 */ #define USE_ADC_DC3 0 /*!< Использовать Компаратор 3 */ /** @note Для RETARGET надо объявить этот дефайн в проекте Options for Target -> C/C++ -> Defines */ //#define RETARGET // закоментирован - отключен, // // разкоментирован - включен //#define RETARGET_USE_ITM // закоментирован - использовать UART, // // разкоментирован - использовать ITM // Для дальнейшей настройки RETARGET -> retarget_conf.h //-- RCU Конфигурации --------------------------------------------------------- /** @brief Источник тактирования МК * @note Система всегда стартует с внутреннего МК и после потом переходит на PLL и заданный здесь источник Поменять тактировние при старте можно в system_K1921VK035.h */ static RCU_PLL_Ref_TypeDef SYSCLK_Oscil_Type = RCU_PLL_Ref_OSEClk; /** @brief Желаемая частота тактирования МК */ #define SYSCLK_CORE_CLOCK_MHZ 100 /** @brief Частота тиков uwTick тактирования МК */ static SYSCLK_TickHz_TypeDef SYSCLK_TickType = SYSCLK_Tick_1ms; //-- GPIO Конфигурации -------------------------------------------------------- /** @note Note: Периферия сама настроит нужные пины в gpiox_config на альтернативные функции */ /** @brief Конфигурации пинов порта GPIOA */ static GPIO_Init_TypeDef gpioa_config[] = { // Пин, Режим, Выходной режим, Входной режим, Подтяжка, Нагрузка/Скорость { GPIO_Pin_0, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_1, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_2, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_3, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_4, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_5, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_6, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_7, GPIO_PinMode_Output, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_8, GPIO_PinMode_Output, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_9, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_10, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_11, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_12, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_13, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_14, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_15, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, }; /** @brief Конфигурации пинов порта GPIOB */ static GPIO_Init_TypeDef gpiob_config[] = { // Пин, Режим, Выходной режим, Входной режим, Подтяжка, Нагрузка/Скорость { GPIO_Pin_0, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_1, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_2, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_3, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_4, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_5, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_6, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_7, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_8, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_9, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_10, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_11, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_12, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_13, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_14, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, { GPIO_Pin_15, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast }, }; //-- UART Конфигурации -------------------------------------------------------- #if USE_UART0==1 static UART_ExtInit_TypeDef uart0_config = { //Стоп биты, Четность, Длина посылки, Скорость, FIFO, Направление работы UART_StopBit_1, UART_ParityBit_Disable, UART_DataWidth_8, 115200, DISABLE, UART_Direction_RxTx, //Rx Коллбек Tx Коллбек Idle Коллбек Error Коллбек NULL, NULL, NULL, NULL }; #endif #if USE_UART1==1 static UART_ExtInit_TypeDef uart1_config = { //Стоп биты, Четность, Длина посылки, Скорость, FIFO, Направление работы UART_StopBit_1, UART_ParityBit_Disable, UART_DataWidth_8, 115200, DISABLE, UART_Direction_RxTx, //Rx Коллбек Tx Коллбек Idle Коллбек Error Коллбек NULL, NULL, NULL, NULL }; #endif //-- TMR Конфигурации --------------------------------------------------------- #if USE_TMR0==1 static TMR_ExtInit_TypeDef tmr0_config = { //Частота Clk МГц, Период обновления SYSCLK_CORE_CLOCK_MHZ, LOAD(0xFFFFFFFF, SYSCLK_CORE_CLOCK_MHZ-1), //Прерывания Запуск конверсии АЦП Реквест DMA Внешнее тактирование DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable }; #endif #if USE_TMR1==1 static TMR_ExtInit_TypeDef tmr1_config = { //Частота Clk МГц, Период обновления SYSCLK_CORE_CLOCK_MHZ, FREQ_HZ(10), //Прерывания Запуск конверсии АЦП Реквест DMA Внешнее тактирование DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable }; #endif #if USE_TMR2==1 static TMR_ExtInit_TypeDef tmr2_config = { //Частота Clk МГц, Период обновления SYSCLK_CORE_CLOCK_MHZ, PERIOD_MKS(1000000), //Прерывания Запуск конверсии АЦП Реквест DMA Внешнее тактирование ENABLE, DISABLE, DISABLE, TMR_ExtInput_Disable }; #endif #if USE_TMR3==1 static TMR_Init_TypeDef tmr3_config = { //Частота Clk МГц, Период обновления SYSCLK_CORE_CLOCK_MHZ, PERIOD_MKS(1000), //Прерывания Запуск конверсии АЦП Реквест DMA Внешнее тактирование DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable }; #endif //-- ADC SEQ Конфигурации ----------------------------------------------------- static RCU_PeriphClk_TypeDef ADC_ClockSource = RCU_PeriphClk_PLLClk; static float ADC_ClockMHz = 12.5; #if USE_ADC_SEQ0==1 static ADC_SEQ_ExtInit_TypeDef adc_seq0_config = { //Событие запуска секвенсора, Разрешение программного запуска ADC_SEQ_StartEvent_SwReq, ENABLE, //Выбор каналов для запросов секвенсора ADC_CH_Num_0, ADC_CH_Num_1, ADC_CH_Num_2, ADC_CH_Num_3, //Последний запрос, Усреднение запросов, Усреднение запросов ADC_SEQ_ReqNum_1, ADC_SEQ_Average_2, DISABLE, //Кол-во рестартов секвенсора, Усреднение рестартов, Задержка между рестартами (в тиках ADC_ClockSource/2) 0, DISABLE, 0, //Разрешение каналов цифровых компараторов DISABLE, DISABLE, DISABLE, DISABLE, //Настройка DMA FIFO, Разрешение DMA ADC_SEQ_DMAFIFOLevel_1, DISABLE, //Прерывания, Кол-во рестартов для прерывания Циклический буфер ENABLE, 0, ENABLE, //SEQ Complete Коллбек, BuffHalf Коллбек, BuffFull Коллбек, Error коллбек NULL, NULL, NULL, NULL, }; #endif #if USE_ADC_SEQ1==1 static ADC_SEQ_ExtInit_TypeDef adc_seq1_config = { //Событие запуска секвенсора, Разрешение программного запуска ADC_SEQ_StartEvent_SwReq, ENABLE, //Выбор каналов для запросов секвенсора ADC_CH_Num_2, ADC_CH_Num_3, ADC_CH_Num_2, ADC_CH_Num_3, //Последний запрос, Усреднение запросов, Усреднение запросов ADC_SEQ_ReqNum_1, ADC_SEQ_Average_2, DISABLE, //Кол-во рестартов секвенсора, Усреднение рестартов, Задержка между рестартами (в тиках ADC_ClockSource/2) 0, DISABLE, 0, //Разрешение каналов цифровых компараторов DISABLE, DISABLE, DISABLE, DISABLE, //Настройка DMA FIFO, Разрешение DMA ADC_SEQ_DMAFIFOLevel_1, DISABLE, //Прерывания, Кол-во рестартов для прерывания Циклический буфер ENABLE, 0, ENABLE, //SEQ Complete Коллбек, BuffHalf Коллбек, BuffFull Коллбек, Error коллбек NULL, NULL, NULL, NULL, }; #endif //-- ADC DC Конфигурации ------------------------------------------------------ #if USE_ADC_DC0==1 static ADC_DC_ExtInit_TypeDef adc_dc0_config = { //Включение выхода компаратора DISABLE, //Нижний порог, Верхний порог 0, 0, //Запуск измерения, Канал, Режим срабатывания, Условие срабатывания ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low, //DC Triggered Коллбек, Error коллбек NULL, NULL }; #endif #if USE_ADC_DC1==1 static ADC_DC_ExtInit_TypeDef adc_dc1_config = { //Включение выхода компаратора DISABLE, //Нижний порог, Верхний порог 0, 0, //Запуск измерения, Канал, Режим срабатывания, Условие срабатывания ADC_DC_Source_EOC, ADC_CH_Num_2, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low, //DC Triggered Коллбек, Error коллбек NULL, NULL }; #endif #if USE_ADC_DC2==1 static ADC_DC_ExtInit_TypeDef adc_dc2_config = { //Включение выхода компаратора DISABLE, //Нижний порог, Верхний порог 0, 0, //Запуск измерения, Канал, Режим срабатывания, Условие срабатывания ADC_DC_Source_EOC, ADC_CH_Num_3, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low, //DC Triggered Коллбек, Error коллбек NULL, NULL }; #endif #if USE_ADC_DC3==1 static ADC_DC_ExtInit_TypeDef adc_dc3_config = { //Включение выхода компаратора DISABLE, //Нижний порог, Верхний порог 0, 0, //Запуск измерения, Канал, Режим срабатывания, Условие срабатывания ADC_DC_Source_EOC, ADC_CH_Num_4, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low, //DC Triggered Коллбек, Error коллбек NULL, NULL }; #endif //-- NVIC Конфигурации -------------------------------------------------------- /** @brief Приоритеты прерываний, 0 - самый высокий приоритет*/ static uint8_t NCIV_Priorities[] = { [GPIOA_IRQn] = 0, [GPIOB_IRQn] = 0, [TMR0_IRQn] = 0, [TMR1_IRQn] = 0, [TMR2_IRQn] = 0, [TMR3_IRQn] = 0, [UART0_TD_IRQn] = 0, [UART0_RX_IRQn] = 0, [UART0_TX_IRQn] = 0, [UART0_E_RT_IRQn] = 0, [UART1_TD_IRQn] = 0, [UART1_RX_IRQn] = 0, [UART1_TX_IRQn] = 0, [UART1_E_RT_IRQn] = 0, [SPI_RO_RT_IRQn] = 0, [SPI_RX_IRQn] = 0, [SPI_TX_IRQn] = 0, [I2C_IRQn] = 0, [ECAP0_IRQn] = 0, [ECAP1_IRQn] = 0, [ECAP2_IRQn] = 0, [PWM0_IRQn] = 0, [PWM0_HD_IRQn] = 0, [PWM0_TZ_IRQn] = 0, [PWM1_IRQn] = 0, [PWM1_HD_IRQn] = 0, [PWM1_TZ_IRQn] = 0, [PWM2_IRQn] = 0, [PWM2_HD_IRQn] = 0, [PWM2_TZ_IRQn] = 0, [QEP_IRQn] = 0, [ADC_SEQ0_IRQn] = 0, [ADC_SEQ1_IRQn] = 0, [ADC_DC_IRQn] = 0, [CAN0_IRQn] = 0, [CAN1_IRQn] = 0, [CAN2_IRQn] = 0, [CAN3_IRQn] = 0, [CAN4_IRQn] = 0, [CAN5_IRQn] = 0, [CAN6_IRQn] = 0, [CAN7_IRQn] = 0, [CAN8_IRQn] = 0, [CAN9_IRQn] = 0, [CAN10_IRQn] = 0, [CAN11_IRQn] = 0, [CAN12_IRQn] = 0, [CAN13_IRQn] = 0, [CAN14_IRQn] = 0, [CAN15_IRQn] = 0, [DMA_CH0_IRQn] = 0, [DMA_CH1_IRQn] = 0, [DMA_CH2_IRQn] = 0, [DMA_CH3_IRQn] = 0, [DMA_CH4_IRQn] = 0, [DMA_CH5_IRQn] = 0, [DMA_CH6_IRQn] = 0, [DMA_CH7_IRQn] = 0, [DMA_CH8_IRQn] = 0, [DMA_CH9_IRQn] = 0, [DMA_CH10_IRQn] = 0, [DMA_CH11_IRQn] = 0, [DMA_CH12_IRQn] = 0, [DMA_CH13_IRQn] = 0, [DMA_CH14_IRQn] = 0, [DMA_CH15_IRQn] = 0, [WDT_IRQn] = 0, [RCU_IRQn] = 0, [MFLASH_IRQn] = 0, [FPU_IRQn] = 0, }; static inline void NVIC_SetAllPriorities(void) { for(int i = 0; i < sizeof(NCIV_Priorities); i++) { NVIC_SetPriority((IRQn_Type)i, NCIV_Priorities[i]); } } //-- Utils --------------------------------------------------------------------