aboutsummaryrefslogtreecommitdiffstats
path: root/LUFA/Drivers/USB/Core/UC3B/Pipe_UC3B.c
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2011-02-26 20:22:33 +0000
committerDean Camera <dean@fourwalledcubicle.com>2011-02-26 20:22:33 +0000
commitcf2411435cf41ca4dbfcc3d89c6287743db79625 (patch)
tree9c68d72e708b6fa86066f644f23e5a8722986984 /LUFA/Drivers/USB/Core/UC3B/Pipe_UC3B.c
parent66c38cd940714287e4e11729bf688211902b464d (diff)
downloadlufa-cf2411435cf41ca4dbfcc3d89c6287743db79625.tar.gz
lufa-cf2411435cf41ca4dbfcc3d89c6287743db79625.tar.bz2
lufa-cf2411435cf41ca4dbfcc3d89c6287743db79625.zip
Removed Pipe_ClearErrorFlags(), pipe error flags are now automatically cleared when Pipe_ClearError() is called.
More UC3B architecture porting.
Diffstat (limited to 'LUFA/Drivers/USB/Core/UC3B/Pipe_UC3B.c')
-rw-r--r--LUFA/Drivers/USB/Core/UC3B/Pipe_UC3B.c68
1 files changed, 8 insertions, 60 deletions
diff --git a/LUFA/Drivers/USB/Core/UC3B/Pipe_UC3B.c b/LUFA/Drivers/USB/Core/UC3B/Pipe_UC3B.c
index e2fa2b960..8a054da61 100644
--- a/LUFA/Drivers/USB/Core/UC3B/Pipe_UC3B.c
+++ b/LUFA/Drivers/USB/Core/UC3B/Pipe_UC3B.c
@@ -36,6 +36,7 @@
#include "../Pipe.h"
uint8_t USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;
+uint8_t USB_SelectedPipe = PIPE_CONTROLPIPE;
bool Pipe_ConfigurePipe(const uint8_t Number,
const uint8_t Type,
@@ -44,70 +45,19 @@ 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();
- UPCFG1X = 0;
-
- UPCFG0X = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));
- UPCFG1X = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));
+ *((uint32_t*)AVR32_USBB_UPCFG0)[USB_SelectedPipe] = 0;
+ *((uint32_t*)AVR32_USBB_UPCFG0)[USB_SelectedPipe] = (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));
Pipe_SetInfiniteINRequests();
return Pipe_IsConfigured();
-#else
- for (uint8_t PNum = Number; PNum < PIPE_TOTAL_PIPES; PNum++)
- {
- uint8_t UPCFG0XTemp;
- uint8_t UPCFG1XTemp;
- uint8_t UPCFG2XTemp;
- uint8_t UPCONXTemp;
- uint8_t UPINRQXTemp;
- uint8_t UPIENXTemp;
-
- Pipe_SelectPipe(PNum);
-
- if (PNum == Number)
- {
- UPCFG0XTemp = ((Type << EPTYPE0) | Token | ((EndpointNumber & PIPE_EPNUM_MASK) << PEPNUM0));
- UPCFG1XTemp = ((1 << ALLOC) | Banks | Pipe_BytesToEPSizeMask(Size));
- UPCFG2XTemp = 0;
- UPCONXTemp = ((1 << PEN) | (1 << INMODE));
- UPINRQXTemp = 0;
- UPIENXTemp = 0;
- }
- else
- {
- UPCFG0XTemp = UPCFG0X;
- UPCFG1XTemp = UPCFG1X;
- UPCFG2XTemp = UPCFG2X;
- UPCONXTemp = UPCONX;
- UPINRQXTemp = UPINRQX;
- UPIENXTemp = UPIENX;
- }
-
- if (!(UPCFG1XTemp & (1 << ALLOC)))
- continue;
-
- Pipe_DisablePipe();
- UPCFG1X &= (1 << ALLOC);
-
- Pipe_EnablePipe();
- UPCFG0X = UPCFG0XTemp;
- UPCFG1X = UPCFG1XTemp;
- UPCFG2X = UPCFG2XTemp;
- UPCONX = UPCONXTemp;
- UPINRQX = UPINRQXTemp;
- UPIENX = UPIENXTemp;
-
- if (!(Pipe_IsConfigured()))
- return false;
- }
-
- Pipe_SelectPipe(Number);
- return true;
-#endif
}
void Pipe_ClearPipes(void)
@@ -117,9 +67,7 @@ void Pipe_ClearPipes(void)
for (uint8_t PNum = 0; PNum < PIPE_TOTAL_PIPES; PNum++)
{
Pipe_SelectPipe(PNum);
- UPIENX = 0;
- UPINTX = 0;
- UPCFG1X = 0;
+ *((uint32_t*)AVR32_USBB_UPCFG0)[USB_SelectedPipe] = 0;
Pipe_DisablePipe();
}
}