/** ****************************************************************************** * @file vk035_it.c * @author Разваляев Алексей * @brief Обработчики прерываний для микроконтроллера 1921ВК035. * Этот файл содержит: * + Обработчики прерываний периферии (UART, TMR, ADC, DMA и др.) * + Обработчики исключений Cortex-M4 (HardFault, SysTick и др.) * + Интеграцию с драйверами периферии через вызовы обработчиков * + Управление системным временем через SysTick * ****************************************************************************** * @attention * * Использование этого файла предполагает наличие корректных настроек: * - Определены USE_xxx макросы в periph_config.h для включения периферии * - Инициализированы соответствующие драйверы периферии * - Включены прерывания в NVIC через функции драйверов * ****************************************************************************** * @verbatim ============================================================================== ##### Как использовать этот файл ##### ============================================================================== 1. Настройка периферии (periph_config.h): (+) Определить USE_TMRx для используемых таймеров (0-3) (+) Определить USE_UARTx для используемых UART (0-1) (+) Определить USE_ADC_SEQx для используемых секвенсоров ADC (0-1) 2. Инициализация драйверов: (+) Вызвать функции инициализации драйверов (uart_init_first, tmr_init_first и т.д.) - Драйверы автоматически включат соответствующие прерывания в NVIC 3. Обработка прерываний: (+) Прерывания периферии автоматически перенаправляются в драйверы (+) Системные прерывания (SysTick) управляют временем millis/micros (+) Обработчики исключений обрабатывают критические ошибки 4. Интеграция с драйверами: (+) UART прерывания -> uart_irq_handler(&huartx) (+) TMR прерывания -> tmr_irq_handler(&htmrx) (+) ADC SEQ прерывания -> adc_seq_irq_handler(&hadc, SEQ_Num) 5. Системное время: (+) SysTick_Handler() автоматически обновляет millis() и micros() (+) Период SysTick настраивается в sysclk_init() 6. Особенности работы: (+) Неиспользуемые обработчики оставлены пустыми для будущего расширения (+) Критические ошибки (HardFault и др.) уходят в бесконечный цикл (+) Прерывания обрабатываются неблокирующе с минимальными задержками @endverbatim ****************************************************************************** */ //-- Includes ------------------------------------------------------------------ #include "main.h" /******************************************************************************/ /* 1921VK035 Peripheral Interrupt Handlers */ /* Add here the Interrupt Handlers for the used peripherals. */ /******************************************************************************/ #if USE_WDT==1 void WDT_IRQHandler(void) { } #endif void GPIOA_IRQHandler(void) { } void GPIOB_IRQHandler(void) { } #if USE_TMR0==1 void TMR0_IRQHandler(void) { tmr_irq_handler(&htmr0); } #endif #if USE_TMR1==1 void TMR1_IRQHandler(void) { tmr_irq_handler(&htmr1); } #endif #if USE_TMR2==1 void TMR2_IRQHandler(void) { tmr_irq_handler(&htmr2); } #endif #if USE_TMR3==1 void TMR3_IRQHandler(void) { tmr_irq_handler(&htmr3); } #endif #if USE_UART0==1 void UART0_TD_IRQHandler(void) { uart_irq_handler(&huart0); } void UART0_RX_IRQHandler(void) { uart_irq_handler(&huart0); } void UART0_TX_IRQHandler(void) { uart_irq_handler(&huart0); } void UART0_E_RT_IRQHandler(void) { uart_irq_handler(&huart0); } #endif #if USE_UART1==1 void UART1_TD_IRQHandler(void) { uart_irq_handler(&huart1); } void UART1_RX_IRQHandler(void) { uart_irq_handler(&huart1); } void UART1_TX_IRQHandler(void) { uart_irq_handler(&huart1); } void UART1_E_RT_IRQHandler(void) { uart_irq_handler(&huart1); } #endif #if USE_SPI==1 void SPI_RO_RT_IRQHandler(void) { } void SPI_RX_IRQHandler(void) { } void SPI_TX_IRQHandler(void) { } #endif #if USE_I2C==1 void I2C_IRQHandler(void) { } #endif #if USE_ECAP0==1 void ECAP0_IRQHandler(void) { } #endif #if USE_ECAP1==1 void ECAP1_IRQHandler(void) { } #endif #if USE_ECAP2==1 void ECAP2_IRQHandler(void) { } #endif #if USE_PWM0==1 void PWM0_IRQHandler(void) { } void PWM0_HD_IRQHandler(void) { } void PWM0_TZ_IRQHandler(void) { } #endif #if USE_PWM1==1 void PWM1_IRQHandler(void) { } void PWM1_HD_IRQHandler(void) { } void PWM1_TZ_IRQHandler(void) { } #endif #if USE_PWM2==1 void PWM2_IRQHandler(void) { } void PWM2_HD_IRQHandler(void) { } void PWM2_TZ_IRQHandler(void) { } #endif #if USE_QEP==1 void QEP_IRQHandler(void) { } #endif #if USE_ADC_SEQ0==1 void ADC_SEQ0_IRQHandler(void) { adc_seq_irq_handler(&hadc, ADC_SEQ_Num_0); } #endif #if USE_ADC_SEQ1==1 void ADC_SEQ1_IRQHandler(void) { adc_seq_irq_handler(&hadc, ADC_SEQ_Num_1); } #endif #if (USE_ADC_DC0==1) || (USE_ADC_DC1==1) || (USE_ADC_DC2==1) || (USE_ADC_DC3==1) void ADC_DC_IRQHandler(void) { } #endif #if USE_ADC_CAN==1 void CAN0_IRQHandler(void) { } void CAN1_IRQHandler(void) { } void CAN2_IRQHandler(void) { } void CAN3_IRQHandler(void) { } void CAN4_IRQHandler(void) { } void CAN5_IRQHandler(void) { } void CAN6_IRQHandler(void) { } void CAN7_IRQHandler(void) { } void CAN8_IRQHandler(void) { } void CAN9_IRQHandler(void) { } void CAN10_IRQHandler(void) { } void CAN11_IRQHandler(void) { } void CAN12_IRQHandler(void) { } void CAN13_IRQHandler(void) { } void CAN14_IRQHandler(void) { } void CAN15_IRQHandler(void) { } #endif void DMA_CH0_IRQHandler(void) { } void DMA_CH1_IRQHandler(void) { } void DMA_CH2_IRQHandler(void) { } void DMA_CH3_IRQHandler(void) { } void DMA_CH4_IRQHandler(void) { } void DMA_CH5_IRQHandler(void) { } void DMA_CH6_IRQHandler(void) { } void DMA_CH7_IRQHandler(void) { } void DMA_CH8_IRQHandler(void) { } void DMA_CH9_IRQHandler(void) { } void DMA_CH10_IRQHandler(void) { } void DMA_CH11_IRQHandler(void) { } void DMA_CH12_IRQHandler(void) { } void DMA_CH13_IRQHandler(void) { } void DMA_CH14_IRQHandler(void) { } void DMA_CH15_IRQHandler(void) { } void FPU_IRQHandler(void) { } void RCU_IRQHandler(void) { } void MFLASH_IRQHandler(void) { } /******************************************************************************/ /* Cortex-M4 Processor Interruption and Exception Handlers */ /******************************************************************************/ /** * @brief This function handles Non maskable interrupt. */ void NMI_Handler(void) { while (1) { } } /** * @brief This function handles Hard fault interrupt. */ void HardFault_Handler(void) { while (1) { } } /** * @brief This function handles Memory management fault. */ void MemManage_Handler(void) { while (1) { } } /** * @brief This function handles Prefetch fault, memory access fault. */ void BusFault_Handler(void) { while (1) { } } /** * @brief This function handles Undefined instruction or illegal state. */ void UsageFault_Handler(void) { while (1) { } } /** * @brief This function handles System service call via SWI instruction. */ void SVC_Handler(void) { } /** * @brief This function handles Debug monitor. */ void DebugMon_Handler(void) { } /** * @brief This function handles Pendable request for system service. */ void PendSV_Handler(void) { } /** * @brief This function handles System tick timer. */ void SysTick_Handler(void) { sysclk_irq_handler(); }