aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2011-11-22 08:06:52 +0000
committerDean Camera <dean@fourwalledcubicle.com>2011-11-22 08:06:52 +0000
commitb711b7d6a484204098eeccc03845b454bb1ad208 (patch)
treeeaaed30dd7fc58054d6ba876b2534db8a5a4900f /LUFA/Drivers/USB
parenteb2e883fd35b5332a7425488105a7adb500ce3fe (diff)
downloadlufa-b711b7d6a484204098eeccc03845b454bb1ad208.tar.gz
lufa-b711b7d6a484204098eeccc03845b454bb1ad208.tar.bz2
lufa-b711b7d6a484204098eeccc03845b454bb1ad208.zip
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).
Diffstat (limited to 'LUFA/Drivers/USB')
-rw-r--r--LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c7
-rw-r--r--LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c7
-rw-r--r--LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h16
3 files changed, 17 insertions, 13 deletions
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: