From b711b7d6a484204098eeccc03845b454bb1ad208 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 22 Nov 2011 08:06:52 +0000 Subject: Fixed broken AVR32 endpoint/pipe communications when ORDERED_EP_CONFIG compile time option is not enabled (thanks to Matthias). Fixed broken compilation for the AVR32 devices if the NO_SOF_EVENTS compile time option was not enabled (thanks to Matthias). --- LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c | 7 ++++--- LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c | 7 ++++--- LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h | 16 +++++++++------- 3 files changed, 17 insertions(+), 13 deletions(-) (limited to 'LUFA/Drivers/USB/Core/UC3') diff --git a/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c b/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c index 7cd7ccf25..c8e3af72a 100644 --- a/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c +++ b/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c @@ -45,19 +45,20 @@ volatile uint8_t* USB_Endpoint_FIFOPos[ENDPOINT_TOTAL_ENDPOINTS]; bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number, const uint32_t UECFG0Data) { + USB_Endpoint_FIFOPos[Number] = &AVR32_USBB_SLAVE[Number * 0x10000]; + #if defined(CONTROL_ONLY_DEVICE) || defined(ORDERED_EP_CONFIG) Endpoint_SelectEndpoint(Number); Endpoint_EnableEndpoint(); (&AVR32_USBB.uecfg0)[Number] = 0; (&AVR32_USBB.uecfg0)[Number] = UECFG0Data; - USB_EndpointFIFOPos[Number] = &AVR32_USBB_SLAVE[Number * 0x10000]; return Endpoint_IsConfigured(); #else for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) { - uint8_t UECFG0Temp; + uint32_t UECFG0Temp; Endpoint_SelectEndpoint(EPNum); @@ -95,7 +96,7 @@ void Endpoint_ClearEndpoints(void) Endpoint_SelectEndpoint(EPNum); (&AVR32_USBB.uecfg0)[EPNum] = 0; (&AVR32_USBB.uecon0clr)[EPNum] = -1; - USB_EndpointFIFOPos[EPNum] = &AVR32_USBB_SLAVE[EPNum * 0x10000]; + USB_Endpoint_FIFOPos[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 5c9a44f03..eca6cb8aa 100644 --- a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c +++ b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c @@ -47,6 +47,8 @@ bool Pipe_ConfigurePipe(const uint8_t Number, const uint16_t Size, const uint8_t Banks) { + USB_Pipe_FIFOPos[Number] = &AVR32_USBB_SLAVE[Number * 0x10000]; + #if defined(ORDERED_EP_CONFIG) Pipe_SelectPipe(Number); Pipe_EnablePipe(); @@ -57,7 +59,6 @@ bool Pipe_ConfigurePipe(const uint8_t Number, ((uint32_t)Token << AVR32_USBB_PTOKEN_OFFSET) | ((uint32_t)Banks << AVR32_USBB_PBK_OFFSET) | ((EndpointNumber & PIPE_EPNUM_MASK) << AVR32_USBB_PEPNUM_OFFSET)); - USB_PipeFIFOPos[Number] = &AVR32_USBB_SLAVE[Number * 0x10000]; Pipe_SetInfiniteINRequests(); @@ -65,7 +66,7 @@ bool Pipe_ConfigurePipe(const uint8_t Number, #else for (uint8_t PNum = Number; PNum < PIPE_TOTAL_PIPES; PNum++) { - uint8_t UPCFG0Temp; + uint32_t UPCFG0Temp; Pipe_SelectPipe(PNum); @@ -109,7 +110,7 @@ void Pipe_ClearPipes(void) Pipe_SelectPipe(PNum); (&AVR32_USBB.upcfg0)[PNum] = 0; (&AVR32_USBB.upcon0clr)[PNum] = -1; - USB_PipeFIFOPos[PNum] = &AVR32_USBB_SLAVE[PNum * 0x10000]; + USB_Pipe_FIFOPos[PNum] = &AVR32_USBB_SLAVE[PNum * 0x10000]; Pipe_DisablePipe(); } } diff --git a/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h b/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h index 28dbabbfd..c4276d9c1 100644 --- a/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h +++ b/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h @@ -43,7 +43,6 @@ /* Includes: */ #include "../../../../Common/Common.h" - #include "../Endpoint.h" /* Enable C linkage for C++ Compilers: */ #if defined(__cplusplus) @@ -56,7 +55,10 @@ #endif /* Private Interface - For use in library only: */ - #if !defined(__DOXYGEN__) + #if !defined(__DOXYGEN__) + /* External Variables: */ + extern volatile uint32_t USB_Endpoint_SelectedEndpoint; + /* Enums: */ enum USB_Interrupts_t { @@ -109,7 +111,7 @@ AVR32_USBB.UDINTESET.sofes = true; break; case USB_INT_RXSTPI: - (&AVR32_USBB.UECON0SET)[USB_SelectedEndpoint].rxstpes = true; + (&AVR32_USBB.UECON0SET)[USB_Endpoint_SelectedEndpoint].rxstpes = true; break; #endif #if defined(USB_CAN_BE_HOST) @@ -162,7 +164,7 @@ AVR32_USBB.UDINTECLR.sofec = true; break; case USB_INT_RXSTPI: - (&AVR32_USBB.UECON0CLR)[USB_SelectedEndpoint].rxstpec = true; + (&AVR32_USBB.UECON0CLR)[USB_Endpoint_SelectedEndpoint].rxstpec = true; break; #endif #if defined(USB_CAN_BE_HOST) @@ -221,7 +223,7 @@ (void)AVR32_USBB.UDINTCLR; break; case USB_INT_RXSTPI: - (&AVR32_USBB.UESTA0CLR)[USB_SelectedEndpoint].rxstpic = true; + (&AVR32_USBB.UESTA0CLR)[USB_Endpoint_SelectedEndpoint].rxstpic = true; break; #endif #if defined(USB_CAN_BE_HOST) @@ -274,7 +276,7 @@ case USB_INT_SOFI: return AVR32_USBB.UDINTE.sofe; case USB_INT_RXSTPI: - return (&AVR32_USBB.UECON0)[USB_SelectedEndpoint].rxstpe; + return (&AVR32_USBB.UECON0)[USB_Endpoint_SelectedEndpoint].rxstpe; #endif #if defined(USB_CAN_BE_HOST) case USB_INT_HSOFI: @@ -316,7 +318,7 @@ case USB_INT_SOFI: return AVR32_USBB.UDINT.sof; case USB_INT_RXSTPI: - return (&AVR32_USBB.UESTA0)[USB_SelectedEndpoint].rxstpi; + return (&AVR32_USBB.UESTA0)[USB_Endpoint_SelectedEndpoint].rxstpi; #endif #if defined(USB_CAN_BE_HOST) case USB_INT_HSOFI: -- cgit v1.2.3