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__))                   
  85                 /* Inline Functions: */ 
  86                         static inline void USB_INT_Enable(const uint8_t Interrupt
) ATTR_ALWAYS_INLINE
; 
  87                         static inline void USB_INT_Enable(const uint8_t Interrupt
) 
  92                                                 AVR32_USBB
.USBCON
.vbuste      
= true; 
  94                                         #if defined(USB_CAN_BE_BOTH) 
  96                                                 AVR32_USBB
.USBCON
.idte        
= true; 
  99                                         #if defined(USB_CAN_BE_DEVICE) 
 100                                         case USB_INT_WAKEUPI
: 
 101                                                 AVR32_USBB
.UDINTESET
.wakeupes 
= true; 
 104                                                 AVR32_USBB
.UDINTESET
.suspes   
= true; 
 107                                                 AVR32_USBB
.UDINTESET
.eorstes  
= true; 
 110                                                 AVR32_USBB
.UDINTESET
.sofes    
= true; 
 113                                         #if defined(USB_CAN_BE_HOST) 
 115                                                 AVR32_USBB
.UHINTESET
.hsofies  
= true; 
 118                                                 AVR32_USBB
.UHINTESET
.dconnies 
= true; 
 121                                                 AVR32_USBB
.UHINTESET
.ddiscies 
= true; 
 124                                                 AVR32_USBB
.UHINTESET
.rsties   
= true; 
 127                                                 AVR32_USBB
.USBCON
.bcerre      
= true; 
 130                                                 AVR32_USBB
.USBCON
.vberre      
= true; 
 136                         static inline void USB_INT_Disable(const uint8_t Interrupt
) ATTR_ALWAYS_INLINE
; 
 137                         static inline void USB_INT_Disable(const uint8_t Interrupt
) 
 142                                                 AVR32_USBB
.USBCON
.vbuste      
= false; 
 144                                         #if defined(USB_CAN_BE_BOTH) 
 146                                                 AVR32_USBB
.USBCON
.idte        
= false; 
 149                                         #if defined(USB_CAN_BE_DEVICE) 
 150                                         case USB_INT_WAKEUPI
: 
 151                                                 AVR32_USBB
.UDINTECLR
.wakeupec 
= true; 
 154                                                 AVR32_USBB
.UDINTECLR
.suspec   
= true; 
 157                                                 AVR32_USBB
.UDINTECLR
.eorstec  
= true; 
 160                                                 AVR32_USBB
.UDINTECLR
.sofec    
= true; 
 163                                         #if defined(USB_CAN_BE_HOST) 
 165                                                 AVR32_USBB
.UHINTECLR
.hsofiec  
= true; 
 168                                                 AVR32_USBB
.UHINTECLR
.dconniec 
= true; 
 171                                                 AVR32_USBB
.UHINTECLR
.ddisciec 
= true; 
 174                                                 AVR32_USBB
.UHINTECLR
.rstiec   
= true; 
 177                                                 AVR32_USBB
.USBCON
.bcerre      
= false; 
 180                                                 AVR32_USBB
.USBCON
.vberre      
= false; 
 186                         static inline void USB_INT_Clear(const uint8_t Interrupt
) ATTR_ALWAYS_INLINE
; 
 187                         static inline void USB_INT_Clear(const uint8_t Interrupt
) 
 192                                                 AVR32_USBB
.USBSTACLR
.vbustic 
= true; 
 193                                                 (void)AVR32_USBB
.USBSTACLR
; 
 195                                         #if defined(USB_CAN_BE_BOTH) 
 197                                                 AVR32_USBB
.USBSTACLR
.idtic   
= true; 
 198                                                 (void)AVR32_USBB
.USBSTACLR
; 
 201                                         #if defined(USB_CAN_BE_DEVICE) 
 202                                         case USB_INT_WAKEUPI
: 
 203                                                 AVR32_USBB
.UDINTCLR
.wakeupc  
= true; 
 204                                                 (void)AVR32_USBB
.UDINTCLR
; 
 207                                                 AVR32_USBB
.UDINTCLR
.suspc    
= true; 
 208                                                 (void)AVR32_USBB
.UDINTCLR
; 
 211                                                 AVR32_USBB
.UDINTCLR
.eorstc   
= true; 
 212                                                 (void)AVR32_USBB
.UDINTCLR
; 
 215                                                 AVR32_USBB
.UDINTCLR
.sofc     
= true; 
 216                                                 (void)AVR32_USBB
.UDINTCLR
; 
 219                                         #if defined(USB_CAN_BE_HOST) 
 221                                                 AVR32_USBB
.UHINTCLR
.hsofic   
= true; 
 222                                                 (void)AVR32_USBB
.UHINTCLR
; 
 225                                                 AVR32_USBB
.UHINTCLR
.dconnic  
= true; 
 226                                                 (void)AVR32_USBB
.UHINTCLR
; 
 229                                                 AVR32_USBB
.UHINTCLR
.ddiscic  
= true; 
 230                                                 (void)AVR32_USBB
.UHINTCLR
; 
 233                                                 AVR32_USBB
.UHINTCLR
.rstic    
= true; 
 234                                                 (void)AVR32_USBB
.UHINTCLR
; 
 237                                                 AVR32_USBB
.USBSTACLR
.bcerric 
= true; 
 238                                                 (void)AVR32_USBB
.USBSTACLR
; 
 241                                                 AVR32_USBB
.USBSTACLR
.vberric 
= true; 
 242                                                 (void)AVR32_USBB
.USBSTACLR
; 
 248                         static inline bool USB_INT_IsEnabled(const uint8_t Interrupt
) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT
; 
 249                         static inline bool USB_INT_IsEnabled(const uint8_t Interrupt
) 
 254                                                 return AVR32_USBB
.USBCON
.vbuste
; 
 255                                         #if defined(USB_CAN_BE_BOTH) 
 257                                                 return AVR32_USBB
.USBCON
.idte
; 
 259                                         #if defined(USB_CAN_BE_DEVICE) 
 260                                         case USB_INT_WAKEUPI
: 
 261                                                 return AVR32_USBB
.UDINTE
.wakeupe
; 
 263                                                 return AVR32_USBB
.UDINTE
.suspe
; 
 265                                                 return AVR32_USBB
.UDINTE
.eorste
; 
 267                                                 return AVR32_USBB
.UDINTE
.sofe
; 
 269                                         #if defined(USB_CAN_BE_HOST)                                     
 271                                                 return AVR32_USBB
.UHINTE
.hsofie
; 
 273                                                 return AVR32_USBB
.UHINTE
.dconnie
; 
 275                                                 return AVR32_USBB
.UHINTE
.ddiscie
; 
 277                                                 return AVR32_USBB
.UHINTE
.rstie
; 
 279                                                 return AVR32_USBB
.USBCON
.bcerre
; 
 281                                                 return AVR32_USBB
.USBCON
.vberre
; 
 288                         static inline bool USB_INT_HasOccurred(const uint8_t Interrupt
) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT
; 
 289                         static inline bool USB_INT_HasOccurred(const uint8_t Interrupt
) 
 294                                                 return AVR32_USBB
.USBSTA
.vbusti
; 
 295                                         #if defined(USB_CAN_BE_BOTH) 
 297                                                 return AVR32_USBB
.USBSTA
.idti
; 
 299                                         #if defined(USB_CAN_BE_DEVICE) 
 300                                         case USB_INT_WAKEUPI
: 
 301                                                 return AVR32_USBB
.UDINT
.wakeup
; 
 303                                                 return AVR32_USBB
.UDINT
.susp
; 
 305                                                 return AVR32_USBB
.UDINT
.eorst
; 
 307                                                 return AVR32_USBB
.UDINT
.sof
; 
 309                                         #if defined(USB_CAN_BE_HOST) 
 311                                                 return AVR32_USBB
.UHINT
.hsofi
; 
 313                                                 return AVR32_USBB
.UHINT
.dconni
; 
 315                                                 return AVR32_USBB
.UHINT
.ddisci
; 
 317                                                 return AVR32_USBB
.UHINT
.rsti
; 
 319                                                 return AVR32_USBB
.USBSTA
.bcerri
; 
 321                                                 return AVR32_USBB
.USBSTA
.vberri
; 
 329                         #include "../USBMode.h" 
 330                         #include "../Events.h" 
 331                         #include "../USBController.h" 
 333                 /* Function Prototypes: */ 
 334                         void USB_INT_ClearAllInterrupts(void); 
 335                         void USB_INT_DisableAllInterrupts(void); 
 338         /* Disable C linkage for C++ Compilers: */ 
 339                 #if defined(__cplusplus)