- #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