3      Copyright (C) Dean Camera, 2011. 
   5   dean [at] fourwalledcubicle [dot] com 
  10   Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com) 
  12   Permission to use, copy, modify, distribute, and sell this 
  13   software and its documentation for any purpose is hereby granted 
  14   without fee, provided that the above copyright notice appear in 
  15   all copies and that both that the copyright notice and this 
  16   permission notice and warranty disclaimer appear in supporting 
  17   documentation, and that the name of the author not be used in 
  18   advertising or publicity pertaining to distribution of the 
  19   software without specific, written prior permission. 
  21   The author disclaim all warranties with regard to this 
  22   software, including all implied warranties of merchantability 
  23   and fitness.  In no event shall the author be liable for any 
  24   special, indirect or consequential damages or any damages 
  25   whatsoever resulting from loss of use, data or profits, whether 
  26   in an action of contract, negligence or other tortious action, 
  27   arising out of or in connection with the use or performance of 
  32  *  \brief USB Controller Interrupt definitions for the AVR32 UC3 microcontrollers. 
  34  *  This file contains definitions required for the correct handling of low level USB service routine interrupts 
  35  *  from the USB controller. 
  37  *  \note This file should not be included directly. It is automatically included as needed by the USB driver 
  38  *        dispatch header located in LUFA/Drivers/USB/USB.h. 
  41 #ifndef __USBINTERRUPT_UC3_H__ 
  42 #define __USBINTERRUPT_UC3_H__ 
  45                 #include "../../../../Common/Common.h" 
  47         /* Enable C linkage for C++ Compilers: */ 
  48                 #if defined(__cplusplus) 
  52         /* Preprocessor Checks: */ 
  53                 #if !defined(__INCLUDE_FROM_USB_DRIVER) 
  54                         #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead. 
  57         /* Private Interface - For use in library only: */ 
  58         #if !defined(__DOXYGEN__)                
  63                                 #if (defined(USB_CAN_BE_BOTH) || defined(__DOXYGEN__)) 
  66                                 #if (defined(USB_CAN_BE_DEVICE) || defined(__DOXYGEN__)) 
  72                                 #if (defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__))                   
  82                 /* Inline Functions: */ 
  83                         static inline void USB_INT_Enable(const uint8_t Interrupt
) ATTR_ALWAYS_INLINE
; 
  84                         static inline void USB_INT_Enable(const uint8_t Interrupt
) 
  89                                                 AVR32_USBB
.USBCON
.vbuste      
= true; 
  91                                         #if defined(USB_CAN_BE_BOTH) 
  93                                                 AVR32_USBB
.USBCON
.idte        
= true; 
  96                                         #if defined(USB_CAN_BE_DEVICE) 
  98                                                 AVR32_USBB
.UDINTESET
.wakeupes 
= true; 
 101                                                 AVR32_USBB
.UDINTESET
.suspes   
= true; 
 104                                                 AVR32_USBB
.UDINTESET
.eorstes  
= true; 
 107                                                 AVR32_USBB
.UDINTESET
.sofes    
= true; 
 110                                         #if defined(USB_CAN_BE_HOST) 
 112                                                 AVR32_USBB
.UHINTESET
.hsofies  
= true; 
 115                                                 AVR32_USBB
.UHINTESET
.dconnies 
= true; 
 118                                                 AVR32_USBB
.UHINTESET
.ddiscies 
= true; 
 121                                                 AVR32_USBB
.UHINTESET
.rsties   
= true; 
 124                                                 AVR32_USBB
.USBCON
.bcerre      
= true; 
 127                                                 AVR32_USBB
.USBCON
.vberre      
= true; 
 133                         static inline void USB_INT_Disable(const uint8_t Interrupt
) ATTR_ALWAYS_INLINE
; 
 134                         static inline void USB_INT_Disable(const uint8_t Interrupt
) 
 139                                                 AVR32_USBB
.USBCON
.vbuste      
= false; 
 141                                         #if defined(USB_CAN_BE_BOTH) 
 143                                                 AVR32_USBB
.USBCON
.idte        
= false; 
 146                                         #if defined(USB_CAN_BE_DEVICE) 
 147                                         case USB_INT_WAKEUPI
: 
 148                                                 AVR32_USBB
.UDINTECLR
.wakeupec 
= true; 
 151                                                 AVR32_USBB
.UDINTECLR
.suspec   
= true; 
 154                                                 AVR32_USBB
.UDINTECLR
.eorstec  
= true; 
 157                                                 AVR32_USBB
.UDINTECLR
.sofec    
= true; 
 160                                         #if defined(USB_CAN_BE_HOST) 
 162                                                 AVR32_USBB
.UHINTECLR
.hsofiec  
= true; 
 165                                                 AVR32_USBB
.UHINTECLR
.dconniec 
= true; 
 168                                                 AVR32_USBB
.UHINTECLR
.ddisciec 
= true; 
 171                                                 AVR32_USBB
.UHINTECLR
.rstiec   
= true; 
 174                                                 AVR32_USBB
.USBCON
.bcerre      
= false; 
 177                                                 AVR32_USBB
.USBCON
.vberre      
= false; 
 183                         static inline void USB_INT_Clear(const uint8_t Interrupt
) ATTR_ALWAYS_INLINE
; 
 184                         static inline void USB_INT_Clear(const uint8_t Interrupt
) 
 189                                                 AVR32_USBB
.USBSTACLR
.vbustic 
= true; 
 190                                                 (void)AVR32_USBB
.USBSTACLR
; 
 192                                         #if defined(USB_CAN_BE_BOTH) 
 194                                                 AVR32_USBB
.USBSTACLR
.idtic   
= true; 
 195                                                 (void)AVR32_USBB
.USBSTACLR
; 
 198                                         #if defined(USB_CAN_BE_DEVICE) 
 199                                         case USB_INT_WAKEUPI
: 
 200                                                 AVR32_USBB
.UDINTCLR
.wakeupc  
= true; 
 201                                                 (void)AVR32_USBB
.UDINTCLR
; 
 204                                                 AVR32_USBB
.UDINTCLR
.suspc    
= true; 
 205                                                 (void)AVR32_USBB
.UDINTCLR
; 
 208                                                 AVR32_USBB
.UDINTCLR
.eorstc   
= true; 
 209                                                 (void)AVR32_USBB
.UDINTCLR
; 
 212                                                 AVR32_USBB
.UDINTCLR
.sofc     
= true; 
 213                                                 (void)AVR32_USBB
.UDINTCLR
; 
 216                                         #if defined(USB_CAN_BE_HOST) 
 218                                                 AVR32_USBB
.UHINTCLR
.hsofic   
= true; 
 219                                                 (void)AVR32_USBB
.UHINTCLR
; 
 222                                                 AVR32_USBB
.UHINTCLR
.dconnic  
= true; 
 223                                                 (void)AVR32_USBB
.UHINTCLR
; 
 226                                                 AVR32_USBB
.UHINTCLR
.ddiscic  
= true; 
 227                                                 (void)AVR32_USBB
.UHINTCLR
; 
 230                                                 AVR32_USBB
.UHINTCLR
.rstic    
= true; 
 231                                                 (void)AVR32_USBB
.UHINTCLR
; 
 234                                                 AVR32_USBB
.USBSTACLR
.bcerric 
= true; 
 235                                                 (void)AVR32_USBB
.USBSTACLR
; 
 238                                                 AVR32_USBB
.USBSTACLR
.vberric 
= true; 
 239                                                 (void)AVR32_USBB
.USBSTACLR
; 
 245                         static inline bool USB_INT_IsEnabled(const uint8_t Interrupt
) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT
; 
 246                         static inline bool USB_INT_IsEnabled(const uint8_t Interrupt
) 
 251                                                 return AVR32_USBB
.USBCON
.vbuste
; 
 252                                         #if defined(USB_CAN_BE_BOTH) 
 254                                                 return AVR32_USBB
.USBCON
.idte
; 
 256                                         #if defined(USB_CAN_BE_DEVICE) 
 257                                         case USB_INT_WAKEUPI
: 
 258                                                 return AVR32_USBB
.UDINTE
.wakeupe
; 
 260                                                 return AVR32_USBB
.UDINTE
.suspe
; 
 262                                                 return AVR32_USBB
.UDINTE
.eorste
; 
 264                                                 return AVR32_USBB
.UDINTE
.sofe
; 
 266                                         #if defined(USB_CAN_BE_HOST)                                     
 268                                                 return AVR32_USBB
.UHINTE
.hsofie
; 
 270                                                 return AVR32_USBB
.UHINTE
.dconnie
; 
 272                                                 return AVR32_USBB
.UHINTE
.ddiscie
; 
 274                                                 return AVR32_USBB
.UHINTE
.rstie
; 
 276                                                 return AVR32_USBB
.USBCON
.bcerre
; 
 278                                                 return AVR32_USBB
.USBCON
.vberre
; 
 285                         static inline bool USB_INT_HasOccurred(const uint8_t Interrupt
) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT
; 
 286                         static inline bool USB_INT_HasOccurred(const uint8_t Interrupt
) 
 291                                                 return AVR32_USBB
.USBSTA
.vbusti
; 
 292                                         #if defined(USB_CAN_BE_BOTH) 
 294                                                 return AVR32_USBB
.USBSTA
.idti
; 
 296                                         #if defined(USB_CAN_BE_DEVICE) 
 297                                         case USB_INT_WAKEUPI
: 
 298                                                 return AVR32_USBB
.UDINT
.wakeup
; 
 300                                                 return AVR32_USBB
.UDINT
.susp
; 
 302                                                 return AVR32_USBB
.UDINT
.eorst
; 
 304                                                 return AVR32_USBB
.UDINT
.sof
; 
 306                                         #if defined(USB_CAN_BE_HOST) 
 308                                                 return AVR32_USBB
.UHINT
.hsofi
; 
 310                                                 return AVR32_USBB
.UHINT
.dconni
; 
 312                                                 return AVR32_USBB
.UHINT
.ddisci
; 
 314                                                 return AVR32_USBB
.UHINT
.rsti
; 
 316                                                 return AVR32_USBB
.USBSTA
.bcerri
; 
 318                                                 return AVR32_USBB
.USBSTA
.vberri
; 
 326                         #include "../USBMode.h" 
 327                         #include "../Events.h" 
 328                         #include "../USBController.h" 
 330                 /* Function Prototypes: */ 
 331                         void USB_INT_ClearAllInterrupts(void); 
 332                         void USB_INT_DisableAllInterrupts(void); 
 335         /* Public Interface - May be used in end-application: */ 
 336                 /* ISR Prototypes: */ 
 337                         #if defined(__DOXYGEN__) 
 338                                 /** Interrupt service routine handler for the USB controller ISR group. This interrupt routine <b>must</b> be 
 339                                  *  linked to the entire USB controller ISR vector group inside the AVR32's interrupt controller peripheral, 
 340                                  *  using the user application's preferred USB controller driver. 
 342                                 void USB_GEN_vect(void); 
 347         /* Disable C linkage for C++ Compilers: */ 
 348                 #if defined(__cplusplus)