/**
******************************************************************************
* @file stm32f4xx_it.c
* @author MCD Application Team
* @version V1.0.0
* @date Apr-2013
* @brief Main Interrupt Service Routines.
* This file provides template for all exceptions handler and
* peripherals interrupt service routine.
******************************************************************************
* @attention
*
*
© COPYRIGHT 2013 STMicroelectronics
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_it.h"
#include "ucos_ii.h"
//#include "stm32f4xx_STLlib.h"
//#include "stm32f4xx_STLclassBvar.h"
#if defined STL_EVAL_MODE
#if defined (USE_STM324xG_EVAL)
#include "stm324xg_eval.h"
#else /* USE_STM324x7I_EVAL */
#include "stm324x7i_eval.h"
#endif
#endif /* STL_EVAL_MODE */
#ifdef STL_VERBOSE
#include
#endif /* STL_VERBOSE */
/** @addtogroup STM32F4xx_IEC60335_Example
* @{
*/
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
uint32_t tmpCC4_last; /* keep last TIM5/Chn4 captured value */
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/******************************************************************************/
/* Cortex-M4 Processor Exceptions Handlers */
/******************************************************************************/
/**
* @brief This function handles NMI exception.
* @param : None
* @retval : None
*/
void NMI_Handler(void)
{
#ifdef STL_VERBOSE
if (RCC_GetITStatus(RCC_IT_CSS) == SET)
{
while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET)
{ /* Wait previous transmission completion */
}
/* Re-configure USART baud rate to have 115200 bds with HSI clock (8MHz) */
EVAL_COM1->BRR = 0x45u;
printf("\n\r Clock Source failure (Clock Security System)\n\r");
}
else
{
printf("\n\r NMI Exception\n\r");
}
#endif /* STL_VERBOSE */
/* Go to infinite loop when NMI Exception occurs */
while (1)
{
}
}
/******************************************************************************/
/**
* @brief This function handles Hard Fault exception.
* @param : None
* @retval : None
*/
void HardFault_Handler(void)
{
#ifdef STL_VERBOSE
printf("\n\r Hard fault Exception \n\r");
#endif /* STL_VERBOSE */
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}
/******************************************************************************/
/**
* @brief This function handles Memory Manage exception.
* @param : None
* @retval : None
*/
void MemManage_Handler(void)
{
#ifdef STL_VERBOSE
printf("\n\r Mem manage Exception \n\r");
#endif /* STL_VERBOSE */
/* Go to infinite loop when Memory Manage exception occurs */
while (1)
{
}
}
/******************************************************************************/
/**
* @brief This function handles Bus Fault exception.
* @param : None
* @retval : None
*/
void BusFault_Handler(void)
{
#ifdef STL_VERBOSE
printf("\n\r Bus fault Exception \n\r");
#endif /* STL_VERBOSE */
/* Go to infinite loop when Bus Fault exception occurs */
while (1)
{
}
}
/******************************************************************************/
/**
* @brief This function handles Usage Fault exception.
* @param : None
* @retval : None
*/
void UsageFault_Handler(void)
{
#ifdef STL_VERBOSE
printf("\n\r Usage fault Exception \n\r");
#endif /* STL_VERBOSE */
/* Go to infinite loop when Usage Fault exception occurs */
while (1)
{
}
}
/******************************************************************************/
/**
* @brief This function handles SVCall exception.
* @param : None
* @retval : None
*/
void SVC_Handler(void)
{
#ifdef STL_VERBOSE
printf("\n\r SVCall Exception \n\r");
#endif /* STL_VERBOSE */
}
/******************************************************************************/
/**
* @brief This function handles Debug Monitor exception.
* @param : None
* @retval : None
*/
void DebugMon_Handler(void)
{
#ifdef STL_VERBOSE
printf("\n\r Debug Monitor Exception \n\r");
#endif /* STL_VERBOSE */
}
/******************************************************************************/
/**
* @brief This function handles PendSVC exception.
* @param : None
* @retval : None
*/
void PendSV_Handler(void)
{
#ifdef STL_VERBOSE
printf("\n\r PendSVC Exception \n\r");
#endif /* STL_VERBOSE */
}
/******************************************************************************/
/**
* @brief This function handles SysTick Handler.
* @param : None
* @retval : None
*/
void SysTick_Handler(void)
{
// #if defined STL_EVAL_MODE
// /* Toggle LED2 for debug purposes */
// STM_EVAL_LEDToggle(LED2);
// #endif /* STL_EVAL_MODE */
OSIntEnter();
OSTimeTick();
OSIntExit();
// /* Verify TickCounter integrity */
// if ((TickCounter ^ TickCounterInv) == 0xFFFFFFFFuL)
// {
// TickCounter++;
// TickCounterInv = ~TickCounter;
//
// if (TickCounter >= SYSTICK_10ms_TB)
// {
// uint32_t RamTestResult;
//
// /* Reset timebase counter */
// TickCounter = 0u;
// TickCounterInv = 0xFFFFFFFF;
//
// /* Set Flag read in main loop */
// TimeBaseFlag = 0xAAAAAAAAu;
// TimeBaseFlagInv = 0x55555555u;
//
// #ifndef USE_MARCHX_RAM_TEST
// ISRCtrlFlowCnt += RAM_MARCHC_ISR_CALLER;
// RamTestResult = STL_TranspMarchC();
// ISRCtrlFlowCntInv -= RAM_MARCHC_ISR_CALLER;
// #else
// ISRCtrlFlowCnt += RAM_MARCHX_ISR_CALLER;
// RamTestResult = STL_TranspMarchX();
// ISRCtrlFlowCntInv -= RAM_MARCHX_ISR_CALLER;
// #endif /* USE_MARCHX_RAM_TEST */
//
// switch ( RamTestResult )
// {
// case TEST_RUNNING:
// break;
// case TEST_OK:
// #ifdef STL_VERBOSE
// /* avoid any long string output here in the interrupt, '#' marks ram test completed ok */
// putchar((int)'#');
// #endif /* STL_VERBOSE */
// #ifdef STL_EVAL_MODE
// /* Toggle LED2 for debug purposes */
// STM_EVAL_LEDToggle(LED2);
// #endif /* STL_EVAL_MODE */
// break;
// case TEST_FAILURE:
// case CLASS_B_DATA_FAIL:
// default:
// #ifdef STL_VERBOSE
// printf("\n\r >>>>>>>>>>>>>>>>>>> RAM Error (March C- Run-time check)\n\r");
// #endif /* STL_VERBOSE */
// FailSafePOR();
// break;
// } /* End of the switch */
//
// /* Do we reached the end of RAM test? */
// /* Verify 1st ISRCtrlFlowCnt integrity */
// if ((ISRCtrlFlowCnt ^ ISRCtrlFlowCntInv) == 0xFFFFFFFFuL)
// {
// if (RamTestResult == TEST_OK)
// {
// /* ==============================================================================*/
// /* MISRA violation of rule 17.4 - pointer arithmetic is used to check RAM test control flow */
// #ifdef __IAR_SYSTEMS_ICC__ /* IAR Compiler */
// #pragma diag_suppress=Pm088
// #endif /* __IAR_SYSTEMS_ICC__ */
// if (ISRCtrlFlowCnt != RAM_TEST_COMPLETED)
// #ifdef __IAR_SYSTEMS_ICC__ /* IAR Compiler */
// #pragma diag_default=Pm088
// #endif /* __IAR_SYSTEMS_ICC__ */
// /* ==============================================================================*/
// {
// #ifdef STL_VERBOSE
// printf("\n\r Control Flow error (RAM test) \n\r");
// #endif /* STL_VERBOSE */
// FailSafePOR();
// }
// else /* Full RAM was scanned */
// {
// ISRCtrlFlowCnt = 0u;
// ISRCtrlFlowCntInv = 0xFFFFFFFF;
// }
// } /* End of RAM completed if*/
// } /* End of control flow monitoring */
// else
// {
// #ifdef STL_VERBOSE
// printf("\n\r Control Flow error in ISR \n\r");
// #endif /* STL_VERBOSE */
// FailSafePOR();
// }
// } /* End of the 10 ms timebase interrupt */
// }
// else /* Class B variable TickCounter integrity error */
// {
// #ifdef STL_VERBOSE
// printf("\n\r Class B Error on TickCounter\n\r");
// #endif /* STL_VERBOSE */
// FailSafePOR();
// }
//
// #if defined STL_EVAL_MODE
// /* Toggle LED2 for debug purposes */
// STM_EVAL_LEDToggle(LED2);
// #endif /* STL_EVAL_MODE */
}
/******************************************************************************/
/**
* @brief This function handles TIM5 global interrupt request.
* @param : None
* @retval : None
*/
//void TIM5_IRQHandler(void)
//{
// uint32_t tmpCC4_last_cpy;
//
// if ((TIM5->SR & TIM_SR_CC4IF) != 0u )
// {
// /* store previous captured value */
// tmpCC4_last_cpy = tmpCC4_last;
// /* get currently captured value */
// tmpCC4_last = TIM5->CCR4;
// /* The CC4IF flag is already cleared here be reading CCR4 register */
//
// /* overight results only in case the data is required */
// if (LSIPeriodFlag == 0u)
// {
// /* take correct measurement only */
// if ((TIM5->SR & TIM_SR_CC4OF) == 0u)
// {
// /* Compute period length */
// PeriodValue = tmpCC4_last - tmpCC4_last_cpy;
// PeriodValueInv = ~PeriodValue;
//
// /* Set Flag tested at main loop */
// LSIPeriodFlag = 0xAAAAAAAAu;
// LSIPeriodFlagInv = 0x55555555u;
// }
// else
// {
// /* ignore computation in case of IC overflow */
// TIM5->SR &= (uint16_t)(~TIM_SR_CC4OF);
// }
// /* ignore computation in case data is not required */
// }
// }
//}
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/