/********************************** (C) COPYRIGHT ******************************* * File Name : ch32v30x_it.c * Author : WCH * Version : V1.0.0 * Date : 2022/01/18 * Description : Main Interrupt Service Routines. ********************************************************************************* * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. * Attention: This software (modified or not) and binary are used for * microcontroller manufactured by Nanjing Qinheng Microelectronics. *******************************************************************************/ #include "eth_driver.h" #include "ch32v30x_it.h" #include "FreeRTOS.h" #include "task.h" void NMI_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); void HardFault_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); void ETH_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); void TIM2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); void EXTI9_5_IRQHandler(void) __attribute__((interrupt())); /********************************************************************* * 毫秒计数器:由 TIM2_IRQHandler 每 WCHNETTIMERPERIOD ms 累加一次。 * main.c 通过 extern 声明后直接使用,无需 SysTick_Init()。 *********************************************************************/ volatile uint32_t sys_tick_ms = 0; /********************************************************************* * @fn NMI_Handler * * @brief This function handles NMI exception. * * @return none */ void NMI_Handler(void) { while (1) { } } /********************************************************************* * @fn HardFault_Handler * * @brief This function handles Hard Fault exception. * * @return none */ void HardFault_Handler(void) { printf("HardFault_Handler\r\n"); printf("mepc :%08x\r\n", __get_MEPC()); printf("mcause:%08x\r\n", __get_MCAUSE()); printf("mtval :%08x\r\n", __get_MTVAL()); NVIC_SystemReset(); while(1); } /********************************************************************* * @fn EXTI9_5_IRQHandler * * @brief This function handles GPIO exception. * * @return none */ void EXTI9_5_IRQHandler(void) { ETH_PHYLink( ); EXTI_ClearITPendingBit(EXTI_Line7); /* Clear Flag */ } /********************************************************************* * @fn ETH_IRQHandler * * @brief This function handles ETH exception. * * @return none */ void ETH_IRQHandler(void) { WCHNET_ETHIsr(); } /********************************************************************* * @fn TIM2_IRQHandler * * @brief This function handles TIM2 exception. * * @return none */ void TIM2_IRQHandler(void) { static uint8_t wchnet_divider = 0; /* 2ms tick for FreeRTOS (configTICK_RATE_HZ = 500) */ sys_tick_ms += 2; xPortSysTickHandler(); /* Software divider: call WCHNET_TimeIsr every 5 ticks = 10ms */ if (++wchnet_divider >= 5) { wchnet_divider = 0; WCHNET_TimeIsr(WCHNETTIMERPERIOD); } TIM_ClearITPendingBit(TIM2, TIM_IT_Update); }