Проект перенесен в папку MDK-ARM

This commit is contained in:
2025-12-28 15:38:30 +03:00
parent 8b930ebe12
commit c63d98f431
75 changed files with 110 additions and 64 deletions

View File

@@ -0,0 +1,393 @@
/*==============================================================================
* @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 1 /*!< Использовать UART1 */
/* Timers */
#define USE_TMR0 1 /*!< Использовать Таймер 0 */
#define USE_TMR1 1 /*!< Использовать Таймер 1 */
#define USE_TMR2 1 /*!< Использовать Таймер 2 */
#define USE_TMR3 0 /*!< Использовать Таймер 3 */
/* ADC */
#define USE_ADC_SEQ0 0 /*!< Использовать Секвенсор 0 */
#define USE_ADC_SEQ1 1 /*!< Использовать Секвенсор 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[] = {
// Pin, Mode, OutMode, InMode, PullMode, DriveMode
{ 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[] = {
// Pin, Mode, OutMode, InMode, PullMode, DriveMode
{ 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 = {
//StopBit, ParityBit, DataWidth, BaudRate, FIFO, Direction
UART_StopBit_1, UART_ParityBit_Disable, UART_DataWidth_8, 115200, DISABLE, UART_Direction_RxTx,
//RxCallback TxCallback IdleCallback ErrCallback
NULL, NULL, NULL, NULL
};
#endif
#if USE_UART1==1
static UART_ExtInit_TypeDef uart1_config = {
//StopBit, ParityBit, DataWidth, BaudRate, FIFO, Direction
UART_StopBit_1, UART_ParityBit_Disable, UART_DataWidth_8, 115200, DISABLE, UART_Direction_RxTx,
//RxCallback TxCallback IdleCallback ErrCallback
NULL, NULL, NULL, NULL
};
#endif
//-- TMR Конфигурации ---------------------------------------------------------
/** @note Макросы для задания периода:
* - LOAD(Period, Prescaler) - период в тиках и прескалер*
* - FREQ_HZ(Hz) - период таймера в Герцах
* - PERIOD_US(us) - период в микросекундах
* * Т.к. аппаратного прескалера нет, используется программный.
* Получить тики будто бы они с прескалером можно функциями TMR_Get_Cnt, TMR_Get_Period
*/
#if USE_TMR0==1
static TMR_ExtInit_TypeDef tmr0_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, LOAD(0xFFFFFFFF, SYSCLK_CORE_CLOCK_MHZ-1),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR1==1
static TMR_ExtInit_TypeDef tmr1_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, FREQ_HZ(10),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR2==1
static TMR_ExtInit_TypeDef tmr2_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, PERIOD_US(1000000),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR3==1
static TMR_Init_TypeDef tmr3_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, PERIOD_US(1000),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
//-- ADC Конфигурации -----------------------------------------------------
/** @brief Источник тактирования АЦП */
static RCU_PeriphClk_TypeDef ADC_ClockSource = RCU_PeriphClk_PLLClk;
/** @brief Желаемая частота тактирования АЦП в МГц*/
static float ADC_ClockMHz = 12.5;
/** @brief Пины каких каналов инициализировать для АЦП */
static ADC_ChannelEnableTypeDef adc_ch_config = {
//Channel 0, Channel 1, Channel 2, Channel 3
ENABLE, ENABLE, ENABLE, ENABLE,
};
//-- ADC SEQ Конфигурации -----------------------------------------------------
#if USE_ADC_SEQ0==1
static ADC_SEQ_ExtInit_TypeDef adc_seq0_config = {
//StartEvent, SWStartEn
ADC_SEQ_StartEvent_SwReq, ENABLE,
//Req[0], Req[1], Req[2], Req[3]
ADC_CH_Num_0, ADC_CH_Num_1, ADC_CH_Num_2, ADC_CH_Num_3,
//ReqMax, ReqAverage, ReqAverageEn
ADC_SEQ_ReqNum_1, ADC_SEQ_Average_2, DISABLE,
//RestartCount, RestartAverageEn, RestartTimer (в тиках ADC_ClockMHz)
0, DISABLE, 0,
//DCEn[0], DCEn[1], DCEn[2], DCEn[3]
DISABLE, DISABLE, DISABLE, DISABLE,
//DMAFIFOLevel, DMAEn
ADC_SEQ_DMAFIFOLevel_1, DISABLE,
//IT, ITCount BufferCircular
ENABLE, 0, ENABLE,
//SEQCpltCallback, BuffHalfCallback, BuffFullCallback, ErrorCallback
NULL, NULL, NULL, NULL,
};
#endif
#if USE_ADC_SEQ1==1
static ADC_SEQ_ExtInit_TypeDef adc_seq1_config = {
//StartEvent, SWStartEn
ADC_SEQ_StartEvent_SwReq, ENABLE,
//Req[0], Req[1], Req[2], Req[3]
ADC_CH_Num_0, ADC_CH_Num_1, ADC_CH_Num_2, ADC_CH_Num_3,
//ReqMax, ReqAverage, ReqAverageEn
ADC_SEQ_ReqNum_1, ADC_SEQ_Average_2, DISABLE,
//RestartCount, RestartAverageEn, RestartTimer (в тиках ADC_ClockMHz)
0, DISABLE, 0,
//DCEn[0], DCEn[1], DCEn[2], DCEn[3]
DISABLE, DISABLE, DISABLE, DISABLE,
//DMAFIFOLevel, DMAEn
ADC_SEQ_DMAFIFOLevel_1, DISABLE,
//IT, ITCount BufferCircular
ENABLE, 0, ENABLE,
//SEQCpltCallback, BuffHalfCallback, BuffFullCallback, ErrorCallback
NULL, NULL, NULL, NULL,
};
#endif
//-- ADC DC Конфигурации ------------------------------------------------------
#if USE_ADC_DC0==1
static ADC_DC_ExtInit_TypeDef adc_dc0_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
NULL, NULL
};
#endif
#if USE_ADC_DC1==1
static ADC_DC_ExtInit_TypeDef adc_dc1_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
NULL, NULL
};
#endif
#if USE_ADC_DC2==1
static ADC_DC_ExtInit_TypeDef adc_dc2_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
NULL, NULL
};
#endif
#if USE_ADC_DC3==1
static ADC_DC_ExtInit_TypeDef adc_dc3_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
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 --------------------------------------------------------------------