From f670bdeff83ee519b67c661cbe794d787c2a5403 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Mon, 25 Apr 2011 07:28:36 +0000 Subject: Add __VA_ARGS__ support to the LUFA supplied ISR macro. Add proper result typecasting to the SWAPENDIAN_* macros. Switch to using -1 on the UC3 target to obtain a register mask with all bits set (for clearing interrupts and status flags). Fix incorrect USB controller mode on the UC3 when a fixed mode is specified as a compile time option due to AVR32_USBB.USBCON.uide being set by default. Make USB_Descriptor_String_t use a uint16_t for Unicode strings on all targets except the AVR8 (retained for backwards compatibility). --- LUFA/CodeTemplates/makefile_template.uc3 | 4 +--- LUFA/Common/Common.h | 2 +- LUFA/Common/Endianness.h | 6 +++--- LUFA/Drivers/USB/Core/StdDescriptors.h | 26 +++++++++++++++----------- LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c | 2 +- LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c | 2 +- LUFA/Drivers/USB/Core/UC3/USBController_UC3.c | 2 ++ LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.c | 8 ++++---- 8 files changed, 28 insertions(+), 24 deletions(-) diff --git a/LUFA/CodeTemplates/makefile_template.uc3 b/LUFA/CodeTemplates/makefile_template.uc3 index 843d775af..e56cb324a 100644 --- a/LUFA/CodeTemplates/makefile_template.uc3 +++ b/LUFA/CodeTemplates/makefile_template.uc3 @@ -236,9 +236,7 @@ ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-l # -Map: create map file # --cref: add cross reference to map file LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += -Wl,--relax -LDFLAGS += -Wl,--gc-sections -LDFLAGS += -Wl,--rodata-writable +LDFLAGS += -Wl,--gc-sections --rodata-writable LDFLAGS += -Wl,--direct-data #LDFLAGS += -T linker_script.x diff --git a/LUFA/Common/Common.h b/LUFA/Common/Common.h index e349063da..1fc47e0eb 100644 --- a/LUFA/Common/Common.h +++ b/LUFA/Common/Common.h @@ -257,7 +257,7 @@ * * \param Name Unique name of the interrupt service routine. */ - #define ISR(Name, ...) void Name (void) __attribute__((__interrupt__)); void Name (void) + #define ISR(Name, ...) void Name (void) __attribute__((__interrupt__)) __VA_ARGS__; void Name (void) #endif /* Inline Functions: */ diff --git a/LUFA/Common/Endianness.h b/LUFA/Common/Endianness.h index ef8c1a788..115d054f2 100644 --- a/LUFA/Common/Endianness.h +++ b/LUFA/Common/Endianness.h @@ -78,7 +78,7 @@ * * \return Input value with the byte ordering reversed. */ - #define SWAPENDIAN_16(x) ((((x) & 0xFF00) >> 8) | (((x) & 0x00FF) << 8)) + #define SWAPENDIAN_16(x) (uint16_t)((((x) & 0xFF00) >> 8) | (((x) & 0x00FF) << 8)) /** Swaps the byte ordering of a 32-bit value at compile-time. Do not use this macro for swapping byte orderings * of dynamic values computed at runtime- use \ref SwapEndian_32() instead. The result of this macro can be used @@ -91,8 +91,8 @@ * * \return Input value with the byte ordering reversed. */ - #define SWAPENDIAN_32(x) ((((x) & 0xFF000000UL) >> 24UL) | (((x) & 0x00FF0000UL) >> 8UL) | \ - (((x) & 0x0000FF00UL) << 8UL) | (((x) & 0x000000FFUL) << 24UL)) + #define SWAPENDIAN_32(x) (uint32_t)((((x) & 0xFF000000UL) >> 24UL) | (((x) & 0x00FF0000UL) >> 8UL) | \ + (((x) & 0x0000FF00UL) << 8UL) | (((x) & 0x000000FFUL) << 24UL)) #if defined(ARCH_BIG_ENDIAN) && !defined(le16_to_cpu) #define le16_to_cpu(x) SwapEndian_16(x) diff --git a/LUFA/Drivers/USB/Core/StdDescriptors.h b/LUFA/Drivers/USB/Core/StdDescriptors.h index 32777cc0f..7840bcb8e 100644 --- a/LUFA/Drivers/USB/Core/StdDescriptors.h +++ b/LUFA/Drivers/USB/Core/StdDescriptors.h @@ -612,17 +612,21 @@ { USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */ - wchar_t UnicodeString[]; /**< String data, as unicode characters (alternatively, - * string language IDs). If normal ASCII characters are - * to be used, they must be added as an array of characters - * rather than a normal C string so that they are widened to - * Unicode size. - * - * Under GCC, strings prefixed with the "L" character (before - * the opening string quotation mark) are considered to be - * Unicode strings, and may be used instead of an explicit - * array of ASCII characters. - */ + #if (ARCH == ARCH_AVR8) + wchar_t UnicodeString[]; + #else + uint16_t UnicodeString[]; /**< String data, as unicode characters (alternatively, + * string language IDs). If normal ASCII characters are + * to be used, they must be added as an array of characters + * rather than a normal C string so that they are widened to + * Unicode size. + * + * Under GCC, strings prefixed with the "L" character (before + * the opening string quotation mark) are considered to be + * Unicode strings, and may be used instead of an explicit + * array of ASCII characters. + */ + #endif } ATTR_PACKED USB_Descriptor_String_t; /** \brief Standard USB String Descriptor (USB-IF naming conventions). diff --git a/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c b/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c index b978ec7f1..9c7d6b62d 100644 --- a/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c +++ b/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c @@ -61,7 +61,7 @@ void Endpoint_ClearEndpoints(void) { Endpoint_SelectEndpoint(EPNum); (&AVR32_USBB.uecfg0)[EPNum] = 0; - (&AVR32_USBB.uecon0clr)[EPNum] = 0xFFFFFFFF; + (&AVR32_USBB.uecon0clr)[EPNum] = -1; USB_EndpointFIFOPos[EPNum] = &AVR32_USBB_SLAVE[EPNum * 0x10000]; Endpoint_DisableEndpoint(); } diff --git a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c index 86bed0388..92589a870 100644 --- a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c +++ b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c @@ -69,7 +69,7 @@ void Pipe_ClearPipes(void) { Pipe_SelectPipe(PNum); (&AVR32_USBB.upcfg0)[PNum] = 0; - (&AVR32_USBB.upcon0clr)[PNum] = 0xFFFFFFFF; + (&AVR32_USBB.upcon0clr)[PNum] = -1; USB_PipeFIFOPos[PNum] = &AVR32_USBB_SLAVE[PNum * 0x10000]; Pipe_DisablePipe(); } diff --git a/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c b/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c index e3d97d684..0b0d04d63 100644 --- a/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c +++ b/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c @@ -72,6 +72,8 @@ void USB_Init( AVR32_USBB.USBCON.uide = false; USB_CurrentMode = Mode; } + #else + AVR32_USBB.USBCON.uide = false; #endif USB_IsInitialized = true; diff --git a/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.c b/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.c index 76f4ef022..5191ee67f 100644 --- a/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.c +++ b/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.c @@ -36,8 +36,8 @@ void USB_INT_DisableAllInterrupts(void) AVR32_USBB.USBCON.vbuste = false; AVR32_USBB.USBCON.idte = false; - AVR32_USBB.uhinteclr = 0xFFFFFFFF; - AVR32_USBB.udinteclr = 0xFFFFFFFF; + AVR32_USBB.uhinteclr = -1; + AVR32_USBB.udinteclr = -1; } void USB_INT_ClearAllInterrupts(void) @@ -45,8 +45,8 @@ void USB_INT_ClearAllInterrupts(void) AVR32_USBB.USBSTACLR.vbustic = true; AVR32_USBB.USBSTACLR.idtic = true; - AVR32_USBB.uhintclr = 0xFFFFFFFF; - AVR32_USBB.udintclr = 0xFFFFFFFF; + AVR32_USBB.uhintclr = -1; + AVR32_USBB.udintclr = -1; } ISR(USB_GEN_vect) -- cgit v1.2.3