232 lines
6.5 KiB
C
232 lines
6.5 KiB
C
/*!
|
|
* \file system_it_xinc.c
|
|
*
|
|
* \brief Target system interruption implementation
|
|
*
|
|
* \copyright Revised BSD License, see section \ref LICENSE.
|
|
*
|
|
* \code
|
|
*
|
|
* _ __ _ ________ _
|
|
* | |/ /(_)___ / ____/ /_ (_)___
|
|
* | // / __ \/ / / __ \/ / __ \
|
|
* / |/ / / / / /___/ / / / / /_/ /
|
|
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
|
* /_/
|
|
* (C) 2022-2025 XinChip
|
|
*
|
|
* \endcode
|
|
*
|
|
* \author ( XinChip ) Alex-J
|
|
*
|
|
* \author ( XinChip )
|
|
*/
|
|
|
|
/*-----------------------------------------------------------------------------------
|
|
INCLUDE HEADE FILES
|
|
------------------------------------------------------------------------------------*/
|
|
#include "system_it_xinc.h"
|
|
|
|
|
|
/*------------------------------------------------------------------------------------
|
|
Func Prototype
|
|
-------------------------------------------------------------------------------------*/
|
|
|
|
/*------------------------------------------------------------------------------------
|
|
Functions
|
|
-------------------------------------------------------------------------------------*/
|
|
/**
|
|
****************************************************************************************
|
|
* @brief This function handles NMI exception.
|
|
*
|
|
* @param[in]
|
|
* @param[in]
|
|
****************************************************************************************
|
|
*/
|
|
void NMI_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN NonMaskableInt_IRQn */
|
|
DEBUG("%s\n", __func__);
|
|
/* USER CODE END NonMaskableInt_IRQn */
|
|
while (1)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief This function handles Hard Fault exception.
|
|
*
|
|
* @param[in]
|
|
* @param[in]
|
|
****************************************************************************************
|
|
*/
|
|
void HardFault_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN HardFault_IRQn */
|
|
DEBUG("%s\n", __func__);
|
|
/* USER CODE END HardFault_IRQn */
|
|
while (1)
|
|
{
|
|
}
|
|
}
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief This function handles Memory Manage exception.
|
|
*
|
|
* @param[in]
|
|
* @param[in]
|
|
****************************************************************************************
|
|
*/
|
|
void MemManage_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN */
|
|
DEBUG("%s\n", __func__);
|
|
/* USER CODE END */
|
|
while (1)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief This function handles Bus Fault exception.
|
|
*
|
|
* @param[in]
|
|
* @param[in]
|
|
****************************************************************************************
|
|
*/
|
|
void BusFault_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN */
|
|
DEBUG("%s\n", __func__);
|
|
/* USER CODE END */
|
|
while (1)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief This function handles Usage Fault exception.
|
|
*
|
|
* @param[in]
|
|
* @param[in]
|
|
****************************************************************************************
|
|
*/
|
|
void UsageFault_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN */
|
|
DEBUG("%s\n", __func__);
|
|
/* USER CODE END */
|
|
while (1)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief This function handles SVCall exception.
|
|
*
|
|
* @param[in]
|
|
* @param[in]
|
|
****************************************************************************************
|
|
*/
|
|
void SVC_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN SVCall_IRQn */
|
|
DEBUG("%s\n", __func__);
|
|
/* USER CODE END SVCall_IRQn */
|
|
while (1)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief This function handles Debug Monitor exception.
|
|
*
|
|
* @param[in]
|
|
* @param[in]
|
|
****************************************************************************************
|
|
*/
|
|
void DebugMon_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN */
|
|
DEBUG("%s\n", __func__);
|
|
/* USER CODE END */
|
|
while (1)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief This function handles PendSVC exception.
|
|
*
|
|
* @param[in]
|
|
* @param[in]
|
|
****************************************************************************************
|
|
*/
|
|
void PendSV_Handler(void)
|
|
{
|
|
/* USER CODE BEGIN PendSV_IRQn */
|
|
DEBUG("%s\n", __func__);
|
|
/* USER CODE END PendSV_IRQn */
|
|
while (1)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
/****************************** Hard Fault Handler Functions *******************************/
|
|
/*------------------------------------------------------------------------------------
|
|
Private Functions
|
|
-------------------------------------------------------------------------------------*/
|
|
|
|
void HardFault_Handler_c(unsigned int * HardFault_args)
|
|
{
|
|
/*栈帧里面内容:*/
|
|
unsigned int stack_r0; //压栈的 R0
|
|
unsigned int stack_r1; //压栈的 R1
|
|
unsigned int stack_r2; //压栈的 R2
|
|
unsigned int stack_r3; //压栈的 R3
|
|
unsigned int stack_r12; //压栈的 R12
|
|
unsigned int stack_lr; //压栈的 lr
|
|
unsigned int stack_pc; //压栈的 pc
|
|
unsigned int stack_psr; //压栈的 psr
|
|
|
|
stack_r0 = ((unsigned int)HardFault_args[0]);
|
|
stack_r1 = ((unsigned int)HardFault_args[1]);
|
|
stack_r2 = ((unsigned int)HardFault_args[2]);
|
|
stack_r3 = ((unsigned int)HardFault_args[3]);
|
|
stack_r12 = ((unsigned int)HardFault_args[4]);
|
|
stack_lr = ((unsigned int)HardFault_args[5]);
|
|
stack_pc = ((unsigned int)HardFault_args[6]);
|
|
stack_psr = ((unsigned int)HardFault_args[7]);
|
|
|
|
DEBUG("----%s----\n", __func__);
|
|
DEBUG("R0=%x\n",stack_r0);
|
|
DEBUG("R1=%x\n",stack_r1);
|
|
DEBUG("R2=%x\n",stack_r2);
|
|
DEBUG("R3=%x\n",stack_r3);
|
|
DEBUG("R12=%x\n",stack_r12);
|
|
DEBUG("LR[R14]=%x\n",stack_lr);
|
|
DEBUG("PC[R15]=%x\n",stack_pc);
|
|
DEBUG("PSR=%x\n",stack_psr);
|
|
DEBUG("SCB_SHCSR=%x\n",SCB->SHCSR);
|
|
DEBUG("---------------------------\n");
|
|
|
|
while(1);
|
|
}
|
|
|
|
/*******************************************************************************************/
|
|
|