aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2011-07-19 02:42:27 +0000
committerDean Camera <dean@fourwalledcubicle.com>2011-07-19 02:42:27 +0000
commit2c404e5af53409af5ce279321377a1303c776617 (patch)
tree090bca3a20578720326ef0102cf1b22f582adf52 /LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
parent69243c5071c4b059c1405f9dd4753f306f8dc04e (diff)
downloadlufa-2c404e5af53409af5ce279321377a1303c776617.tar.gz
lufa-2c404e5af53409af5ce279321377a1303c776617.tar.bz2
lufa-2c404e5af53409af5ce279321377a1303c776617.zip
Add support for the ORDERED_EP_CONFIG compile time token on the UC3 architecture.
Diffstat (limited to 'LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c')
-rw-r--r--LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
index b1db1fc50..b425d3dae 100644
--- a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
+++ b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c
@@ -47,6 +47,7 @@ bool Pipe_ConfigurePipe(const uint8_t Number,
const uint16_t Size,
const uint8_t Banks)
{
+#if defined(ORDERED_EP_CONFIG)
Pipe_SelectPipe(Number);
Pipe_EnablePipe();
@@ -61,6 +62,44 @@ bool Pipe_ConfigurePipe(const uint8_t Number,
Pipe_SetInfiniteINRequests();
return Pipe_IsConfigured();
+#else
+ for (uint8_t PNum = Number; PNum < PIPE_TOTAL_PIPES; PNum++)
+ {
+ uint8_t UPCFG0Temp;
+
+ Pipe_SelectPipe(PNum);
+
+ if (PNum == Number)
+ {
+ UPCFG0Temp = (AVR32_USBB_ALLOC_MASK |
+ ((uint32_t)Type << AVR32_USBB_PTYPE_OFFSET) |
+ ((uint32_t)Token << AVR32_USBB_PTOKEN_OFFSET) |
+ ((uint32_t)Banks << AVR32_USBB_PBK_OFFSET) |
+ ((EndpointNumber & PIPE_EPNUM_MASK) << AVR32_USBB_PEPNUM_OFFSET));
+ }
+ else
+ {
+ UPCFG0Temp = (&AVR32_USBB.upcfg0)[PNum]
+ }
+
+ if (!(UPCFG0Temp & AVR32_USBB_ALLOC_MASK))
+ continue;
+
+ Pipe_DisablePipe();
+ (&AVR32_USBB.upcfg0)[PNum] &= ~AVR32_USBB_ALLOC_MASK;
+
+ Pipe_EnablePipe();
+ (&AVR32_USBB.upcfg0)[PNum] = UPCFG0Temp;
+
+ Pipe_SetInfiniteINRequests();
+
+ if (!(Pipe_IsConfigured()))
+ return false;
+ }
+
+ Pipe_SelectPipe(Number);
+ return true;
+#endif
}
void Pipe_ClearPipes(void)