/**
******************************************************************************
* @file Projects\Demonstration\stm32f0xx_it.c
* @author MCD Application Team
* @version V1.0.0
* @date 17-January-2014
* @brief Main Interrupt Service Routines.
* This file provides template for all exceptions handler and
* peripherals interrupt service routine.
******************************************************************************
* @attention
*
*
© COPYRIGHT 2014 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 "stm32f0xx_it.h"
#include "stm32f0xx_conf.h"
#include "ltimers.h"
#include "ltimers_config.h"
#include "nixie_driver_config.h"
#include "nixie_driver_process.h"
#include "led_driver_process.h"
#include "led_driver_config.h"
#include "tsl_types.h"
#include "tsl_user.h"
#include "tsl_time_stm32f0xx.h"
/** @addtogroup STM32F072B_DISCOVERY
* @{
*/
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/******************************************************************************/
/* Cortex-M0 Processor Exceptions Handlers */
/******************************************************************************/
/**
* @brief This function handles NMI exception.
* @param None
* @retval None
*/
void NMI_Handler(void)
{
}
/**
* @brief This function handles Hard Fault exception.
* @param None
* @retval None
*/
void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}
/**
* @brief This function handles SVCall exception.
* @param None
* @retval None
* @ Используется в файле portasm.s
*/
//void SVC_Handler(void)
//{
//}
/**
* @brief This function handles PendSVC exception.
* @param None
* @retval None
* @ Используется в файле portasm.s
*/
//void PendSV_Handler(void)
//{
//}
/**
* @brief This function handles SysTick Handler.
* @param None
* @retval None
*/
//void SysTick_Handler(void)
//{
// TimingDelay_Decrement();
// TSL_tim_ProcessIT();
//}
/******************************************************************************/
/* STM32F0xx Peripherals Interrupt Handlers */
/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
/* available peripheral interrupt handler's name please refer to the startup */
/* file (startup_stm32f0xx.s). */
/******************************************************************************/
// ----------------------------------------------------------------------------
// Обработчик прерывания таймера общего назначения для тиков в 1 мс
// ----------------------------------------------------------------------------
void LTIMER_IRQHandler ( void )
{
if ( TIM_GetITStatus ( LTIMER_TIMx, TIM_IT_Update ) != RESET )
{
TIM_ClearITPendingBit ( LTIMER_TIMx, TIM_IT_Update );
ProcessLTimers ();
}
}
void TIM17_handler(void) { LTIMER_IRQHandler(); }
// ----------------------------------------------------------------------------
// Обработчик прерывания таймера для работы NixieDriver
// Это прерывание имеет самый высокий приоритет, чтобы обеспечить стабильную
// частоту динамической индикации ламп Nixie
// ----------------------------------------------------------------------------
void NIX_DRIVER_TIM_IRQHandler ( void )
{
if ( TIM_GetITStatus ( NIX_DRIVER_TIMx, TIM_IT_Update ) != RESET )
{
TIM_ClearITPendingBit ( NIX_DRIVER_TIMx, TIM_IT_Update );
ProcessNixieDriverFromISR ();
}
}
void TIM16_handler(void) { NIX_DRIVER_TIM_IRQHandler(); }
// ----------------------------------------------------------------------------
// Обработчик прерывания таймера для работы LED_Driver
// ----------------------------------------------------------------------------
void LED_TIM_IRQHandler ( void )
{
if ( TIM_GetITStatus ( LED_TIMx, TIM_IT_Update ) != RESET )
{
TIM_ClearITPendingBit ( LED_TIMx, TIM_IT_Update );
LEDDriverProcessFromISR ();
}
}
void TIM3_handler(void) { LED_TIM_IRQHandler(); }
// ----------------------------------------------------------------------------
// - поставить этому прерыванию наивысший приоритет, чтобы передавать 2 байта
// подряд гарантированно без промежутка времени (или не так важно? может ли
// между двумя байтами задержка повлиять на вывод данных на лампы?)
// ----------------------------------------------------------------------------
void NIX_SPIx_IRQHandler ( void )
{
/* SPI in Master Receiver mode--------------------------------------- */
if ( SPI_I2S_GetITStatus ( NIX_SPIx, SPI_I2S_IT_TXE ) == SET )
{
// Обязательно надо считать, чтобы сбросить флаг
SPI_I2S_ReceiveData16 ( NIX_SPIx );
SPI_I2S_ITConfig ( NIX_SPIx, SPI_I2S_IT_TXE, DISABLE );
//NixieDriverCheckDPPins();
NIX_DRIVER_SET_ST_PIN;
}
}
void SPI1_handler(void) { NIX_SPIx_IRQHandler(); }
// ----------------------------------------------------------------------------
//
// ----------------------------------------------------------------------------
#ifdef LED_DRIVER
void LED_SPIx_IRQHandler ( void )
{
/* SPI in Master Receiver mode--------------------------------------- */
if ( SPI_I2S_GetITStatus ( LED_SPIx, SPI_I2S_IT_RXNE ) == SET )
{
//empty_data = SPI_I2S_ReceiveData16 ( LED_SPIx );
// Обязательно надо считать, чтобы сбросить флаг
SPI_I2S_ReceiveData16 ( LED_SPIx );
LED_ST_PIN_SET;
}
}
void SPI2_handler(void) { LED_SPIx_IRQHandler(); }
#endif
// ----------------------------------------------------------------------------
/**
* @brief This function handles Touch Sensing Controller Handler.
* @param None
* @retval None
*/
// ----------------------------------------------------------------------------
extern __IO uint32_t Gv_EOA;
void TSC_IRQHandler ( void )
{
#if TSLPRM_TSC_IODEF > 0 // Default = Input Floating
/* Set IO default in Output PP Low to discharge all capacitors */
TSC->CR &= (uint32_t)(~(1 << 4));
#endif
TSC->ICR |= 0x03; /* Clear EOAF and MCEF flags */
Gv_EOA = 1; /* To inform the main loop routine of the End Of Acquisition */
}
void TSC_handler(void) { TSC_IRQHandler(); }
// ----------------------------------------------------------------------------
//
// ----------------------------------------------------------------------------
void TS_TIM_IRQHandler ( void )
{
TIM_ClearITPendingBit ( TS_TIMx, TIM_IT_Update );
TSL_tim_ProcessIT();
}
void TIM15_handler(void) { TS_TIM_IRQHandler(); }
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/