-                       #define USB_INT_VBUS     USBCON, (1 << VBUSTE) , USBINT, (1 << VBUSTI)\r
-                       #define USB_INT_IDTI     USBCON, (1 << IDTE)   , USBINT, (1 << IDTI)\r
-                       #define USB_INT_WAKEUPI  UDIEN , (1 << WAKEUPE), UDINT , (1 << WAKEUPI)\r
-                       #define USB_INT_SUSPI    UDIEN , (1 << SUSPE)  , UDINT , (1 << SUSPI)\r
-                       #define USB_INT_EORSTI   UDIEN , (1 << EORSTE) , UDINT , (1 << EORSTI)\r
-                       #define USB_INT_DCONNI   UHIEN , (1 << DCONNE) , UHINT , (1 << DCONNI)\r
-                       #define USB_INT_DDISCI   UHIEN , (1 << DDISCE) , UHINT , (1 << DDISCI)\r
-                       #define USB_INT_BCERRI   OTGIEN, (1 << BCERRE) , OTGINT, (1 << BCERRI)\r
-                       #define USB_INT_VBERRI   OTGIEN, (1 << VBERRE) , OTGINT, (1 << VBERRI)\r
-                       #define USB_INT_SOFI     UDIEN,  (1 << SOFE)   , UDINT , (1 << SOFI)\r
-                       #define USB_INT_HSOFI    UHIEN,  (1 << HSOFE)  , UHINT , (1 << HSOFI)\r
-                       #define USB_INT_RSTI     UHIEN , (1 << RSTE)   , UHINT , (1 << RSTI)\r
-                       #define USB_INT_SRPI     OTGIEN, (1 << SRPE)   , OTGINT, (1 << SRPI)\r
-                       #define USB_INT_RXSTPI   UEIENX, (1 << RXSTPE) , UEINTX, (1 << RXSTPI)\r
+                       static inline void USB_INT_Enable(const uint8_t Interrupt) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_INT_Enable(const uint8_t Interrupt)\r
+                       {\r
+                               switch (Interrupt)\r
+                               {\r
+                                       case USB_INT_VBUS:\r
+                                               AVR32_USBB.USBCON.vbuste      = true;\r
+                                               break;\r
+                                       case USB_INT_IDTI:\r
+                                               AVR32_USBB.USBCON.idte        = true;\r
+                                               break;\r
+                                       case USB_INT_WAKEUPI:\r
+                                               AVR32_USBB.UDINTESET.wakeupes = true;\r
+                                               break;\r
+                                       case USB_INT_SUSPI:\r
+                                               AVR32_USBB.UDINTESET.suspes   = true;\r
+                                               break;\r
+                                       case USB_INT_EORSTI:\r
+                                               AVR32_USBB.UDINTESET.eorstes  = true;\r
+                                               break;\r
+                                       case USB_INT_DCONNI:\r
+                                               AVR32_USBB.UHINTESET.dconnies = true;\r
+                                               break;\r
+                                       case USB_INT_DDISCI:\r
+                                               AVR32_USBB.UHINTESET.ddiscies = true;\r
+                                               break;\r
+                                       case USB_INT_BCERRI:\r
+                                               AVR32_USBB.USBCON.bcerre      = true;\r
+                                               break;\r
+                                       case USB_INT_VBERRI:\r
+                                               AVR32_USBB.USBCON.vberre      = true;\r
+                                               break;\r
+                                       case USB_INT_SOFI:\r
+                                               AVR32_USBB.UDINTESET.sofes    = true;\r
+                                               break;\r
+                                       case USB_INT_HSOFI:\r
+                                               AVR32_USBB.UHINTESET.hsofies  = true;\r
+                                               break;\r
+                                       case USB_INT_RSTI:\r
+                                               AVR32_USBB.UHINTESET.rsties   = true;\r
+                                               break;\r
+                                       case USB_INT_SRPI:\r
+                                       case USB_INT_RXSTPI:\r
+                                               // TODO\r
+                                               return;\r
+                               }\r
+                       }\r
+\r
+                       static inline void USB_INT_Disable(const uint8_t Interrupt) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_INT_Disable(const uint8_t Interrupt)\r
+                       {\r
+                               switch (Interrupt)\r
+                               {\r
+                                       case USB_INT_VBUS:\r
+                                               AVR32_USBB.USBCON.vbuste      = false;\r
+                                               break;\r
+                                       case USB_INT_IDTI:\r
+                                               AVR32_USBB.USBCON.idte        = false;\r
+                                               break;\r
+                                       case USB_INT_WAKEUPI:\r
+                                               AVR32_USBB.UDINTECLR.wakeupec = true;\r
+                                               break;\r
+                                       case USB_INT_SUSPI:\r
+                                               AVR32_USBB.UDINTECLR.suspec   = true;\r
+                                               break;\r
+                                       case USB_INT_EORSTI:\r
+                                               AVR32_USBB.UDINTECLR.eorstec  = true;\r
+                                               break;\r
+                                       case USB_INT_DCONNI:\r
+                                               AVR32_USBB.UHINTECLR.dconniec = true;\r
+                                               break;\r
+                                       case USB_INT_DDISCI:\r
+                                               AVR32_USBB.UHINTECLR.ddisciec = true;\r
+                                               break;\r
+                                       case USB_INT_BCERRI:\r
+                                               AVR32_USBB.USBCON.bcerre      = false;\r
+                                               break;\r
+                                       case USB_INT_VBERRI:\r
+                                               AVR32_USBB.USBCON.vberre      = false;\r
+                                               break;\r
+                                       case USB_INT_SOFI:\r
+                                               AVR32_USBB.UDINTECLR.sofec    = true;\r
+                                               break;\r
+                                       case USB_INT_HSOFI:\r
+                                               AVR32_USBB.UHINTECLR.hsofiec  = true;\r
+                                               break;\r
+                                       case USB_INT_RSTI:\r
+                                               AVR32_USBB.UHINTECLR.rstiec   = true;\r
+                                               break;\r
+                                       case USB_INT_SRPI:\r
+                                       case USB_INT_RXSTPI:\r
+                                               // TODO\r
+                                               return;\r
+                               }\r
+                       }\r
+                       \r
+                       static inline void USB_INT_Clear(const uint8_t Interrupt) ATTR_ALWAYS_INLINE;\r
+                       static inline void USB_INT_Clear(const uint8_t Interrupt)\r
+                       {\r
+                               switch (Interrupt)\r
+                               {\r
+                                       case USB_INT_VBUS:\r
+                                               AVR32_USBB.USBSTACLR.vbustic = true;\r
+                                               break;\r
+                                       case USB_INT_IDTI:\r
+                                               AVR32_USBB.USBSTACLR.idtic   = true;\r
+                                               break;\r
+                                       case USB_INT_WAKEUPI:\r
+                                               AVR32_USBB.UDINTCLR.wakeupc  = true;\r
+                                               break;\r
+                                       case USB_INT_SUSPI:\r
+                                               AVR32_USBB.UDINTCLR.suspc    = true;\r
+                                               break;\r
+                                       case USB_INT_EORSTI:\r
+                                               AVR32_USBB.UDINTCLR.eorstc   = true;\r
+                                               break;\r
+                                       case USB_INT_DCONNI:\r
+                                               AVR32_USBB.UHINTCLR.dconnic  = true;\r
+                                               break;\r
+                                       case USB_INT_DDISCI:\r
+                                               AVR32_USBB.UHINTCLR.ddiscic  = true;\r
+                                               break;\r
+                                       case USB_INT_BCERRI:\r
+                                               AVR32_USBB.USBSTACLR.bcerric = true;\r
+                                               break;\r
+                                       case USB_INT_VBERRI:\r
+                                               AVR32_USBB.USBSTACLR.vberric = true;\r
+                                               break;\r
+                                       case USB_INT_SOFI:\r
+                                               AVR32_USBB.UDINTCLR.sofc     = true;\r
+                                               break;\r
+                                       case USB_INT_HSOFI:\r
+                                               AVR32_USBB.UHINTCLR.hsofic   = true;\r
+                                               break;\r
+                                       case USB_INT_RSTI:\r
+                                               AVR32_USBB.UHINTCLR.rstic    = true;\r
+                                               break;\r
+                                       case USB_INT_SRPI:\r
+                                       case USB_INT_RXSTPI:\r
+                                               // TODO\r
+                                               return;\r
+                               }\r
+                       }\r
+                       \r
+                       static inline bool USB_INT_IsEnabled(const uint8_t Interrupt) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;\r
+                       static inline bool USB_INT_IsEnabled(const uint8_t Interrupt)\r
+                       {\r
+                               switch (Interrupt)\r
+                               {\r
+                                       case USB_INT_VBUS:\r
+                                               return AVR32_USBB.USBCON.vbuste;\r
+                                       case USB_INT_IDTI:\r
+                                               return AVR32_USBB.USBCON.idte;\r
+                                       case USB_INT_WAKEUPI:\r
+                                               return AVR32_USBB.UDINTE.wakeupe;\r
+                                       case USB_INT_SUSPI:\r
+                                               return AVR32_USBB.UDINTE.suspe;\r
+                                       case USB_INT_EORSTI:\r
+                                               return AVR32_USBB.UDINTE.eorste;\r
+                                       case USB_INT_DCONNI:\r
+                                               return AVR32_USBB.UHINTE.dconnie;\r
+                                       case USB_INT_DDISCI:\r
+                                               return AVR32_USBB.UHINTE.ddiscie;\r
+                                       case USB_INT_BCERRI:\r
+                                               return AVR32_USBB.USBCON.bcerre;\r
+                                       case USB_INT_VBERRI:\r
+                                               return AVR32_USBB.USBCON.vberre;\r
+                                       case USB_INT_SOFI:\r
+                                               return AVR32_USBB.UDINTE.sofe;\r
+                                       case USB_INT_HSOFI:\r
+                                               return AVR32_USBB.UHINTE.hsofie;\r
+                                       case USB_INT_RSTI:\r
+                                               return AVR32_USBB.UHINTE.rstie;\r
+                                       case USB_INT_SRPI:\r
+                                       case USB_INT_RXSTPI:\r
+                                               // TODO\r
+                                               return false;\r
+                               }\r
+                               \r
+                               return false;\r
+                       }\r
+               \r
+                       static inline bool USB_INT_HasOccurred(const uint8_t Interrupt) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;\r
+                       static inline bool USB_INT_HasOccurred(const uint8_t Interrupt)\r
+                       {\r
+                               switch (Interrupt)\r
+                               {\r
+                                       case USB_INT_VBUS:\r
+                                               return AVR32_USBB.USBSTA.vbusti;\r
+                                       case USB_INT_IDTI:\r
+                                               return AVR32_USBB.USBSTA.idti;\r
+                                       case USB_INT_WAKEUPI:\r
+                                               return AVR32_USBB.UDINT.wakeup;\r
+                                       case USB_INT_SUSPI:\r
+                                               return AVR32_USBB.UDINT.susp;\r
+                                       case USB_INT_EORSTI:\r
+                                               return AVR32_USBB.UDINT.eorst;\r
+                                       case USB_INT_DCONNI:\r
+                                               return AVR32_USBB.UHINT.dconni;\r
+                                       case USB_INT_DDISCI:\r
+                                               return AVR32_USBB.UHINT.ddisci;\r
+                                       case USB_INT_BCERRI:\r
+                                               return AVR32_USBB.USBSTA.bcerri;\r
+                                       case USB_INT_VBERRI:\r
+                                               return AVR32_USBB.USBSTA.vberri;\r
+                                       case USB_INT_SOFI:\r
+                                               return AVR32_USBB.UDINT.sof;\r
+                                       case USB_INT_HSOFI:\r
+                                               return AVR32_USBB.UHINT.hsofi;\r
+                                       case USB_INT_RSTI:\r
+                                               return AVR32_USBB.UHINT.rsti;\r
+                                       case USB_INT_SRPI:\r
+                                       case USB_INT_RXSTPI:\r
+                                               // TODO\r
+                                               return false;\r
+                               }\r
+\r
+                               return false;\r
+                       }\r