/** ****************************************************************************** * @file stm32_it.c * @author MCD Application Team * @version V4.0.0 * @date 21-January-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 "stm32_it.h" #include "usb_istr.h" #include "usb_lib.h" #include "usb_pwr.h" #include "hw_config.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ __IO uint8_t Send_Buffer[2]; extern __IO uint8_t PrevXferComplete; extern uint32_t ADC_ConvertedValueX; extern uint32_t ADC_ConvertedValueX_1; extern __IO uint32_t TimingDelay; /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /******************************************************************************/ /* Cortex-M Processor Exceptions Handlers */ /******************************************************************************/ /******************************************************************************* * Function Name : NMI_Handler * Description : This function handles NMI exception. * Input : None * Output : None * Return : None *******************************************************************************/ void NMI_Handler(void) { } /******************************************************************************* * Function Name : HardFault_Handler * Description : This function handles Hard Fault exception. * Input : None * Output : None * Return : None *******************************************************************************/ void HardFault_Handler(void) { /* Go to infinite loop when Hard Fault exception occurs */ while (1) { } } /******************************************************************************* * Function Name : MemManage_Handler * Description : This function handles Memory Manage exception. * Input : None * Output : None * Return : None *******************************************************************************/ void MemManage_Handler(void) { /* Go to infinite loop when Memory Manage exception occurs */ while (1) { } } /******************************************************************************* * Function Name : BusFault_Handler * Description : This function handles Bus Fault exception. * Input : None * Output : None * Return : None *******************************************************************************/ void BusFault_Handler(void) { /* Go to infinite loop when Bus Fault exception occurs */ while (1) { } } /******************************************************************************* * Function Name : UsageFault_Handler * Description : This function handles Usage Fault exception. * Input : None * Output : None * Return : None *******************************************************************************/ void UsageFault_Handler(void) { /* Go to infinite loop when Usage Fault exception occurs */ while (1) { } } /******************************************************************************* * Function Name : SVC_Handler * Description : This function handles SVCall exception. * Input : None * Output : None * Return : None *******************************************************************************/ void SVC_Handler(void) { } /******************************************************************************* * Function Name : DebugMon_Handler * Description : This function handles Debug Monitor exception. * Input : None * Output : None * Return : None *******************************************************************************/ void DebugMon_Handler(void) { } /******************************************************************************* * Function Name : PendSV_Handler * Description : This function handles PendSVC exception. * Input : None * Output : None * Return : None *******************************************************************************/ void PendSV_Handler(void) { } /******************************************************************************* * Function Name : SysTick_Handler * Description : This function handles SysTick Handler. * Input : None * Output : None * Return : None *******************************************************************************/ void SysTick_Handler(void) { TimingDelay--; } /******************************************************************************/ /* STM32 Peripherals Interrupt Handlers */ /******************************************************************************/ /******************************************************************************* * Function Name : USB_IRQHandler * Description : This function handles USB Low Priority interrupts * requests. * Input : None * Output : None * Return : None *******************************************************************************/ #if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS) || defined (STM32F37X) void USB_LP_IRQHandler(void) #else void USB_LP_CAN1_RX0_IRQHandler(void) #endif { USB_Istr(); } #if defined(STM32L1XX_MD) /******************************************************************************* * Function Name : EXTI15_10_IRQHandler * Description : This function handles External lines 15 to 10 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI15_10_IRQHandler(void) { /* Check on the RIGHT button */ if(EXTI_GetITStatus(RIGHT_BUTTON_EXTI_LINE) != RESET) { if ((PrevXferComplete) && (bDeviceState == CONFIGURED)) { Send_Buffer[0] = 0x05; if (STM_EVAL_PBGetState(Button_RIGHT) == Bit_RESET) { Send_Buffer[1] = 0x01; } else { Send_Buffer[1] = 0x00; } /* Write the descriptor through the endpoint */ USB_SIL_Write(EP1_IN, (uint8_t*) Send_Buffer, 2); SetEPTxValid(ENDP1); PrevXferComplete = 0; } /* Clear the EXTI line pending bit */ EXTI_ClearITPendingBit(RIGHT_BUTTON_EXTI_LINE); } /* Check on the LEFT button */ if(EXTI_GetITStatus(LEFT_BUTTON_EXTI_LINE) != RESET) { if ((PrevXferComplete) && (bDeviceState == CONFIGURED)) { Send_Buffer[0] = 0x06; if (STM_EVAL_PBGetState(Button_LEFT) == Bit_RESET) { Send_Buffer[1] = 0x01; } else { Send_Buffer[1] = 0x00; } /* Write the descriptor through the endpoint */ USB_SIL_Write(EP1_IN, (uint8_t*) Send_Buffer, 2); SetEPTxValid(ENDP1); PrevXferComplete = 0; } /* Clear the EXTI line pending bit */ EXTI_ClearITPendingBit(LEFT_BUTTON_EXTI_LINE); } } #endif /******************************************************************************* * Function Name : DMA1_Channel1_IRQHandler * Description : This function handles DMA1 Channel 1 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void DMA1_Channel1_IRQHandler(void) { Send_Buffer[0] = 0x07; if((ADC_ConvertedValueX >>4) - (ADC_ConvertedValueX_1 >>4) > 4) { if ((PrevXferComplete) && (bDeviceState == CONFIGURED)) { Send_Buffer[1] = (uint8_t)(ADC_ConvertedValueX >>4); /* Write the descriptor through the endpoint */ USB_SIL_Write(EP1_IN, (uint8_t*) Send_Buffer, 2); SetEPTxValid(ENDP1); ADC_ConvertedValueX_1 = ADC_ConvertedValueX; PrevXferComplete = 0; } } DMA_ClearFlag(DMA1_FLAG_TC1); } /******************************************************************************* * Function Name : EXTI_IRQHandler * Description : This function handles External lines interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ #if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS) void EXTI0_IRQHandler(void) #elif defined (STM32F37X) void EXTI2_TS_IRQHandler(void) #else void EXTI9_5_IRQHandler(void) #endif { if(EXTI_GetITStatus(KEY_BUTTON_EXTI_LINE) != RESET) { if ((PrevXferComplete) && (bDeviceState == CONFIGURED)) { Send_Buffer[0] = 0x05; #if defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS) if (!STM_EVAL_PBGetState(Button_KEY) == Bit_RESET) #else if (STM_EVAL_PBGetState(Button_KEY) == Bit_RESET) #endif { Send_Buffer[1] = 0x01; } else { Send_Buffer[1] = 0x00; } /* Write the descriptor through the endpoint */ USB_SIL_Write(EP1_IN, (uint8_t*) Send_Buffer, 2); SetEPTxValid(ENDP1); PrevXferComplete = 0; } /* Clear the EXTI line pending bit */ EXTI_ClearITPendingBit(KEY_BUTTON_EXTI_LINE); } } #if !defined(STM32L1XX_MD) && !defined(STM32L1XX_HD) && !defined(STM32L1XX_MD_PLUS)&& ! defined (STM32F37X) && ! defined (STM32F30X) /******************************************************************************* * Function Name : EXTI15_10_IRQHandler * Description : This function handles External lines 15 to 10 interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void EXTI15_10_IRQHandler(void) { if(EXTI_GetITStatus(TAMPER_BUTTON_EXTI_LINE) != RESET) { if ((PrevXferComplete) && (bDeviceState == CONFIGURED)) { Send_Buffer[0] = 0x06; if (STM_EVAL_PBGetState(Button_TAMPER) == Bit_RESET) { Send_Buffer[1] = 0x01; } else { Send_Buffer[1] = 0x00; } /* Write the descriptor through the endpoint */ USB_SIL_Write(EP1_IN, (uint8_t*) Send_Buffer, 2); SetEPTxValid(ENDP1); PrevXferComplete = 0; } /* Clear the EXTI line 13 pending bit */ EXTI_ClearITPendingBit(TAMPER_BUTTON_EXTI_LINE); } } #endif /*STM32L1XX_HD*/ #if defined(STM32F10X_HD) || defined(STM32F10X_XL) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS) /******************************************************************************* * Function Name : SDIO_IRQHandler * Description : This function handles SDIO global interrupt request. * requests. * Input : None * Output : None * Return : None *******************************************************************************/ void SDIO_IRQHandler(void) { /* Process All SDIO Interrupt Sources */ SD_ProcessIRQSrc(); } void SD_SDIO_DMA_IRQHANDLER(void) { /* Process DMA2 Stream3 or DMA2 Stream6 Interrupt Sources */ SD_ProcessDMAIRQ(); } #endif /* STM32F10X_HD | STM32F10X_XL*/ /******************************************************************************* * Function Name : USB_FS_WKUP_IRQHandler * Description : This function handles USB WakeUp interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ #if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS) void USB_FS_WKUP_IRQHandler(void) #else void USBWakeUp_IRQHandler(void) #endif { EXTI_ClearITPendingBit(EXTI_Line18); } /******************************************************************************/ /* STM32 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_stm32xxx.s). */ /******************************************************************************/ /******************************************************************************* * Function Name : PPP_IRQHandler * Description : This function handles PPP interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ /*void PPP_IRQHandler(void) { }*/ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/