Add in USB_INT_RegisterHandlers() internal function to register the interrupt handler...
authorDean Camera <dean@fourwalledcubicle.com>
Mon, 28 Feb 2011 22:30:40 +0000 (22:30 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Mon, 28 Feb 2011 22:30:40 +0000 (22:30 +0000)
Add in temporary global interrupts enable/disable macros.

LUFA/Common/Common.h
LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c
LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h
LUFA/Drivers/USB/Core/UC3B/USBController_UC3B.c
LUFA/Drivers/USB/Core/UC3B/USBInterrupt_UC3B.h
LUFA/ManPages/LUFAPoweredProjects.txt

index 355391b..76e1be1 100644 (file)
@@ -95,7 +95,7 @@
                        // TODO
                        #define EEMEM
                        #define PROGMEM                  const
-                       #define ISR(Name)                void Name (void)
+                       #define ISR(Name)                void Name (void) __attribute__((__interrupt__)); void Name (void)
                        #define ATOMIC_BLOCK(x)          if (1)
                        #define ATOMIC_RESTORESTATE
                        #define pgm_read_byte(x)         *x
                        #define _delay_ms(x)
                        #define memcmp_P(...)            memcmp(__VA_ARGS__)
                        #define memcpy_P(...)            memcpy(__VA_ARGS__)
+                       #define cpu_irq_enable()         do { asm volatile("" ::: "memory"); __builtin_csrf(AVR32_SR_GM_OFFSET); } while (0)
+                       #define cpu_irq_disable()        do { __builtin_ssrf(AVR32_SR_GM_OFFSET); asm volatile("" ::: "memory"); } while (0)
                        
                        #warning The UC3B architecture support is currently experimental and incomplete!
                #endif
index 18fa48a..ceb0ebd 100644 (file)
@@ -59,6 +59,8 @@ void USB_Init(
        #if !defined(USE_STATIC_OPTIONS)
        USB_Options = Options;
        #endif
+       
+       USB_INT_RegisterHandlers();
 
        if (!(USB_Options & USB_OPT_REG_DISABLED))
          USB_REG_On();
index 6115ec6..14e5c51 100644 (file)
                        };
 
                /* Inline Functions: */
+                       static inline void USB_INT_RegisterHandlers(void)
+                       {
+                               // Not required for AVR8
+                       }
+
                        static inline void USB_INT_Enable(const uint8_t Interrupt) ATTR_ALWAYS_INLINE;
                        static inline void USB_INT_Enable(const uint8_t Interrupt)
                        {
index ee25de7..191e084 100644 (file)
@@ -59,6 +59,8 @@ void USB_Init(
        #if !defined(USE_STATIC_OPTIONS)\r
        USB_Options = Options;\r
        #endif\r
+       \r
+       USB_INT_RegisterHandlers();\r
 \r
        #if defined(USB_CAN_BE_BOTH)\r
        if (Mode == USB_MODE_UID)\r
@@ -103,17 +105,17 @@ void USB_ResetInterface(void)
        bool UIDModeSelectEnabled = AVR32_USBB.USBCON.uide;\r
        #endif\r
 \r
-       USB_INT_DisableAllInterrupts();\r
-       USB_INT_ClearAllInterrupts();\r
-\r
-       USB_Controller_Reset();\r
-       \r
        AVR32_PM.GCCTRL[USB_GCLK_USBB_INDEX].pllsel = !(USB_Options & USB_OPT_GCLK_SRC_OSC);\r
        AVR32_PM.GCCTRL[USB_GCLK_USBB_INDEX].oscsel = !(USB_Options & USB_OPT_GCLK_CHANNEL_0);\r
        AVR32_PM.GCCTRL[USB_GCLK_USBB_INDEX].diven  = (F_CLOCK != 48000000UL);\r
        AVR32_PM.GCCTRL[USB_GCLK_USBB_INDEX].div    = ((F_CLOCK / 2) / 48000000UL);\r
        AVR32_PM.GCCTRL[USB_GCLK_USBB_INDEX].cen    = true;\r
 \r
+       USB_INT_DisableAllInterrupts();\r
+       USB_INT_ClearAllInterrupts();\r
+\r
+       USB_Controller_Reset();\r
+\r
        #if defined(USB_CAN_BE_BOTH)\r
        if (UIDModeSelectEnabled)\r
        {\r
index 4100a01..ca60e7f 100644 (file)
                                USB_INT_SUSPI   = 3,\r
                                USB_INT_EORSTI  = 4,\r
                                USB_INT_SOFI    = 5,\r
-                               USB_INT_RXSTPI  = 6,\r
                                #endif\r
                                #if (defined(USB_CAN_BE_HOST) || defined(__DOXYGEN__))                  \r
-                               USB_INT_HSOFI   = 7,\r
-                               USB_INT_DCONNI  = 8,\r
-                               USB_INT_DDISCI  = 9,\r
-                               USB_INT_RSTI    = 10,\r
-                               USB_INT_BCERRI  = 11,\r
-                               USB_INT_VBERRI  = 12,\r
+                               USB_INT_HSOFI   = 6,\r
+                               USB_INT_DCONNI  = 7,\r
+                               USB_INT_DDISCI  = 8,\r
+                               USB_INT_RSTI    = 9,\r
+                               USB_INT_BCERRI  = 10,\r
+                               USB_INT_VBERRI  = 11,\r
                                #endif\r
                        };\r
-                       \r
+               \r
+               /* ISR Prototypes: */\r
+                       ISR(USB_GEN_vect);\r
+               \r
                /* Inline Functions: */\r
+                       static inline void USB_INT_RegisterHandlers(void)\r
+                       {\r
+                               AVR32_INTC.IPR[AVR32_USBB_IRQ % 32].autovector = (uintptr_t)&USB_GEN_vect;                      \r
+                       }\r
+               \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
+                       {                       \r
                                switch (Interrupt)\r
                                {\r
                                        case USB_INT_VBUSTI:\r
                                        case USB_INT_SOFI:\r
                                                AVR32_USBB.UDINTESET.sofes    = true;\r
                                                break;\r
-                                       case USB_INT_RXSTPI:\r
-                                               // TODO\r
-                                               return;\r
                                        #endif\r
                                        #if defined(USB_CAN_BE_HOST)\r
                                        case USB_INT_HSOFI:\r
                                        case USB_INT_SOFI:\r
                                                AVR32_USBB.UDINTECLR.sofec    = true;\r
                                                break;\r
-                                       case USB_INT_RXSTPI:\r
-                                               // TODO\r
-                                               return;\r
                                        #endif\r
                                        #if defined(USB_CAN_BE_HOST)\r
                                        case USB_INT_HSOFI:\r
                                {\r
                                        case USB_INT_VBUSTI:\r
                                                AVR32_USBB.USBSTACLR.vbustic = true;\r
+                                               (void)AVR32_USBB.USBSTACLR;\r
                                                break;\r
                                        #if defined(USB_CAN_BE_BOTH)\r
                                        case USB_INT_IDTI:\r
                                                AVR32_USBB.USBSTACLR.idtic   = true;\r
+                                               (void)AVR32_USBB.USBSTACLR;\r
                                                break;\r
                                        #endif\r
                                        #if defined(USB_CAN_BE_DEVICE)\r
                                        case USB_INT_WAKEUPI:\r
                                                AVR32_USBB.UDINTCLR.wakeupc  = true;\r
+                                               (void)AVR32_USBB.UDINTCLR;\r
                                                break;\r
                                        case USB_INT_SUSPI:\r
                                                AVR32_USBB.UDINTCLR.suspc    = true;\r
+                                               (void)AVR32_USBB.UDINTCLR;\r
                                                break;\r
                                        case USB_INT_EORSTI:\r
                                                AVR32_USBB.UDINTCLR.eorstc   = true;\r
+                                               (void)AVR32_USBB.UDINTCLR;\r
                                                break;\r
                                        case USB_INT_SOFI:\r
                                                AVR32_USBB.UDINTCLR.sofc     = true;\r
+                                               (void)AVR32_USBB.UDINTCLR;\r
                                                break;\r
-                                       case USB_INT_RXSTPI:\r
-                                               // TODO\r
-                                               return;\r
                                        #endif\r
                                        #if defined(USB_CAN_BE_HOST)\r
                                        case USB_INT_HSOFI:\r
                                                AVR32_USBB.UHINTCLR.hsofic   = true;\r
+                                               (void)AVR32_USBB.UHINTCLR;\r
                                                break;\r
                                        case USB_INT_DCONNI:\r
                                                AVR32_USBB.UHINTCLR.dconnic  = true;\r
+                                               (void)AVR32_USBB.UHINTCLR;\r
                                                break;\r
                                        case USB_INT_DDISCI:\r
                                                AVR32_USBB.UHINTCLR.ddiscic  = true;\r
+                                               (void)AVR32_USBB.UHINTCLR;\r
                                                break;\r
                                        case USB_INT_RSTI:\r
                                                AVR32_USBB.UHINTCLR.rstic    = true;\r
+                                               (void)AVR32_USBB.UHINTCLR;\r
                                                break;\r
                                        case USB_INT_BCERRI:\r
                                                AVR32_USBB.USBSTACLR.bcerric = true;\r
+                                               (void)AVR32_USBB.USBSTACLR;\r
                                                break;\r
                                        case USB_INT_VBERRI:\r
                                                AVR32_USBB.USBSTACLR.vberric = true;\r
+                                               (void)AVR32_USBB.USBSTACLR;\r
                                                break;\r
                                        #endif\r
                                }\r
                                                return AVR32_USBB.UDINTE.eorste;\r
                                        case USB_INT_SOFI:\r
                                                return AVR32_USBB.UDINTE.sofe;\r
-                                       case USB_INT_RXSTPI:\r
-                                               // TODO\r
-                                               return false;\r
                                        #endif\r
                                        #if defined(USB_CAN_BE_HOST)                                    \r
                                        case USB_INT_HSOFI:\r
                                                return AVR32_USBB.UDINT.eorst;\r
                                        case USB_INT_SOFI:\r
                                                return AVR32_USBB.UDINT.sof;\r
-                                       case USB_INT_RXSTPI:\r
-                                               // TODO\r
-                                               return false;\r
                                        #endif\r
                                        #if defined(USB_CAN_BE_HOST)\r
                                        case USB_INT_HSOFI:\r
index b894df2..f74ba74 100644 (file)
@@ -53,6 +53,7 @@
  *  - Ghetto Drum, a MIDI drum controller: http://noisybox.net/art/gdrum/
  *  - IR Remote to Keyboard decoder: http://netzhansa.blogspot.com/2010/04/our-living-room-hi-fi-setup-needs-mp3.html
  *  - LED Panel controller: http://projects.peterpolidoro.net/caltech/panelscontroller/panelscontroller.htm
+ *  - Motherboard BIOS flasher: http://www.coreboot.org/InSystemFlasher
  *  - PSGroove, a Playstation 3 Homebrew dongle: http://github.com/psgroove
  *  - Single LED Matrix Display: http://guysoft.wordpress.com/2009/10/08/bumble-b/
  *  - Linux Secure Storage Dongle: http://github.com/TomMD/teensy