Skip to content
Snippets Groups Projects
Select Git revision
  • c13b2f2d0040cdf38ea3178717480d07f02c5245
  • wip-bootstrap default
  • dualcore
  • ch3/leds
  • ch3/time
  • master
6 results

asm_thumb2_misc.rst

Blame
  • stm32fxxx_it.c 6.91 KiB
    /**
      ******************************************************************************
      * @file    stm32fxxx_it.c
      * @author  MCD Application Team
      * @version V1.1.0
      * @date    19-March-2012
      * @brief   Main Interrupt Service Routines.
      *          This file provides all exceptions handler and peripherals interrupt
      *          service routine.
      ******************************************************************************
      * @attention
      *
      * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
      *
      * 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 "stm32fxxx_it.h"
    #include "stm32f4xx_exti.h"
    #include "usb_core.h"
    //#include "usbd_core.h"
    
    //#include "usbd_cdc_core.h"
    
    
    /* Private typedef -----------------------------------------------------------*/
    /* Private define ------------------------------------------------------------*/
    /* Private macro -------------------------------------------------------------*/
    /* Private variables ---------------------------------------------------------*/
    extern USB_OTG_CORE_HANDLE USB_OTG_dev;
    
    /* Private function prototypes -----------------------------------------------*/
    extern uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
    
    #ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED 
    extern uint32_t USBD_OTG_EP1IN_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
    extern uint32_t USBD_OTG_EP1OUT_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
    #endif
    
    /* Private functions ---------------------------------------------------------*/
    
    /******************************************************************************/
    /*             Cortex-M Processor Exceptions Handlers                         */
    /******************************************************************************/
    
    extern void fatality();
    
    /**
      * @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 */
      fatality();
      while (1)
      {
      }
    }
    
    /**
      * @brief  This function handles Memory Manage exception.
      * @param  None
      * @retval None
      */
    void MemManage_Handler(void)
    {
      /* Go to infinite loop when Memory Manage exception occurs */
      fatality();
      while (1)
      {
      }
    }
    
    /**
      * @brief  This function handles Bus Fault exception.
      * @param  None
      * @retval None
      */
    void BusFault_Handler(void)
    {
      /* Go to infinite loop when Bus Fault exception occurs */
      fatality();
      while (1)
      {
      }
    }
    
    /**
      * @brief  This function handles Usage Fault exception.
      * @param  None
      * @retval None
      */
    void UsageFault_Handler(void)
    {
      /* Go to infinite loop when Usage Fault exception occurs */
      fatality();
      while (1)
      {
      }
    }
    
    /**
      * @brief  This function handles SVCall exception.
      * @param  None
      * @retval None
      */
    void SVC_Handler(void)
    {
    }
    
    /**
      * @brief  This function handles Debug Monitor exception.
      * @param  None
      * @retval None
      */
    void DebugMon_Handler(void)
    {
    }
    
    /**
      * @brief  This function handles PendSVC exception.
      * @param  None
      * @retval None
      */
    void PendSV_Handler(void)
    {
    }
    
    /**
      * @brief  This function handles EXTI15_10_IRQ Handler.
      * @param  None
      * @retval None
      */
    #ifdef USE_USB_OTG_FS  
    void OTG_FS_WKUP_IRQHandler(void)
    {
      if(USB_OTG_dev.cfg.low_power)
      {
        *(uint32_t *)(0xE000ED10) &= 0xFFFFFFF9 ; 
        SystemInit();
        USB_OTG_UngateClock(&USB_OTG_dev);
      }
      EXTI_ClearITPendingBit(EXTI_Line18);
    }
    #endif
    
    /**
      * @brief  This function handles EXTI15_10_IRQ Handler.
      * @param  None
      * @retval None
      */
    #ifdef USE_USB_OTG_HS  
    void OTG_HS_WKUP_IRQHandler(void)
    {
      if(USB_OTG_dev.cfg.low_power)
      {
        *(uint32_t *)(0xE000ED10) &= 0xFFFFFFF9 ; 
        SystemInit();
        USB_OTG_UngateClock(&USB_OTG_dev);
      }
      EXTI_ClearITPendingBit(EXTI_Line20);
    }
    #endif
    
    /**
      * @brief  This function handles OTG_HS Handler.
      * @param  None
      * @retval None
      */
    #ifdef USE_USB_OTG_HS  
    void OTG_HS_IRQHandler(void)
    #else
    void OTG_FS_IRQHandler(void)
    #endif
    {
      USBD_OTG_ISR_Handler (&USB_OTG_dev);
    }
    
    #ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED 
    /**
      * @brief  This function handles EP1_IN Handler.
      * @param  None
      * @retval None
      */
    void OTG_HS_EP1_IN_IRQHandler(void)
    {
      USBD_OTG_EP1IN_ISR_Handler (&USB_OTG_dev);
    }
    
    /**
      * @brief  This function handles EP1_OUT Handler.
      * @param  None
      * @retval None
      */
    void OTG_HS_EP1_OUT_IRQHandler(void)
    {
      USBD_OTG_EP1OUT_ISR_Handler (&USB_OTG_dev);
    }
    #endif
    
    /**
      * @brief  This function handles SDIO global interrupt request.
      * @param  None
      * @retval None
      */
    void SDIO_IRQHandler(void)
    {
      /* Process All SDIO Interrupt Sources */
      // dpgeorge: i don't think this is used at the moment...
      extern void SD_ProcessIRQSrc(void);
      SD_ProcessIRQSrc();
    }
    
    /******************************************************************************/
    /*                 STM32Fxxx 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_stm32fxxx.s).                                               */
    /******************************************************************************/
    
    /**
      * @brief  This function handles PPP interrupt request.
      * @param  None
      * @retval None
      */
    /*void PPP_IRQHandler(void)
    {
    }*/
    
    // TIM6 Update event
    #include "stm32f4xx_tim.h"
    void TIM6_DAC_IRQHandler(void) {
        // work out if it's TIM6 that had the interrupt
        if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET) {
            extern void timer_interrupt(void);
            timer_interrupt();
            TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
        } else {
            // it seems we get 2 calls to this interrupt handler, and only 1 is the TIM_IT_Update...
            // TODO work out what the other one is, and if we can disable it
            //printf("unhandled TIM6_DAC\n");
        }
    }
    
    /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/