Simplify AVR32 UC3B software FIFO, as it will only ever be accessed a byte at a time...
authorDean Camera <dean@fourwalledcubicle.com>
Fri, 11 Mar 2011 07:03:34 +0000 (07:03 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Fri, 11 Mar 2011 07:03:34 +0000 (07:03 +0000)
LUFA/Drivers/USB/Core/UC3B/Endpoint_UC3B.c
LUFA/Drivers/USB/Core/UC3B/Endpoint_UC3B.h
LUFA/Drivers/USB/Core/UC3B/Pipe_UC3B.c
LUFA/Drivers/USB/Core/UC3B/Pipe_UC3B.h

index 1775e98..14f66d9 100644 (file)
@@ -39,8 +39,8 @@
 uint8_t USB_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;\r
 #endif\r
 \r
 uint8_t USB_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE;\r
 #endif\r
 \r
-volatile uint8_t USB_SelectedEndpoint = ENDPOINT_CONTROLEP;\r
-volatile void*   USB_EndpointFIFOPos[ENDPOINT_TOTAL_ENDPOINTS];\r
+volatile uint8_t  USB_SelectedEndpoint = ENDPOINT_CONTROLEP;\r
+volatile uint8_t* USB_EndpointFIFOPos[ENDPOINT_TOTAL_ENDPOINTS];\r
 \r
 bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number,\r
                                     const uint32_t UECFG0Data)\r
 \r
 bool Endpoint_ConfigureEndpoint_Prv(const uint8_t Number,\r
                                     const uint32_t UECFG0Data)\r
index 760f782..5de8225 100644 (file)
                                                            const uint32_t UECFGXData);\r
                \r
                /* External Variables: */\r
                                                            const uint32_t UECFGXData);\r
                \r
                /* External Variables: */\r
-                       extern volatile uint8_t USB_SelectedEndpoint;\r
-                       extern volatile void*   USB_EndpointFIFOPos[];\r
+                       extern volatile uint8_t  USB_SelectedEndpoint;\r
+                       extern volatile uint8_t* USB_EndpointFIFOPos[];\r
        #endif\r
 \r
        /* Public Interface - May be used in end-application: */\r
        #endif\r
 \r
        /* Public Interface - May be used in end-application: */\r
                        static inline uint32_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint32_t Endpoint_GetEndpointDirection(void)\r
                        {\r
                        static inline uint32_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint32_t Endpoint_GetEndpointDirection(void)\r
                        {\r
-                               return ((&AVR32_USBB.uecfg0)[USB_SelectedEndpoint] & AVR32_USBB_UECFG0_EPDIR_MASK) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT;\r
+                               return ((&AVR32_USBB.UECFG0)[USB_SelectedEndpoint].epdir ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT);\r
                        }\r
 \r
                        /** Sets the direction of the currently selected endpoint.\r
                        }\r
 \r
                        /** Sets the direction of the currently selected endpoint.\r
                        static inline uint8_t Endpoint_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint8_t Endpoint_Read_Byte(void)\r
                        {\r
                        static inline uint8_t Endpoint_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint8_t Endpoint_Read_Byte(void)\r
                        {\r
-                               return *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
+                               return *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
                        }\r
 \r
                        /** Writes one byte from the currently selected endpoint's bank, for IN direction endpoints.\r
                        }\r
 \r
                        /** Writes one byte from the currently selected endpoint's bank, for IN direction endpoints.\r
                        static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_Byte(const uint8_t Byte)\r
                        {\r
                        static inline void Endpoint_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_Byte(const uint8_t Byte)\r
                        {\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = Byte;\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = Byte;\r
                        }\r
 \r
                        /** Discards one byte from the currently selected endpoint's bank, for OUT direction endpoints.\r
                        }\r
 \r
                        /** Discards one byte from the currently selected endpoint's bank, for OUT direction endpoints.\r
                        {\r
                                uint8_t Dummy;\r
 \r
                        {\r
                                uint8_t Dummy;\r
 \r
-                               Dummy = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
+                               Dummy = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
                        }\r
 \r
                        /** Reads two bytes from the currently selected endpoint's bank in little endian format, for OUT\r
                        }\r
 \r
                        /** Reads two bytes from the currently selected endpoint's bank in little endian format, for OUT\r
                        static inline uint16_t Endpoint_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint16_t Endpoint_Read_Word_LE(void)\r
                        {\r
                        static inline uint16_t Endpoint_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint16_t Endpoint_Read_Word_LE(void)\r
                        {\r
-                               uint16_t Byte1 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               uint16_t Byte0 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
+                               uint16_t Byte1 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               uint16_t Byte0 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
 \r
                                return ((Byte0 << 8) | Byte1);\r
                        }\r
 \r
                                return ((Byte0 << 8) | Byte1);\r
                        }\r
                        static inline uint16_t Endpoint_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint16_t Endpoint_Read_Word_BE(void)\r
                        {\r
                        static inline uint16_t Endpoint_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint16_t Endpoint_Read_Word_BE(void)\r
                        {\r
-                               uint16_t Byte0 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               uint16_t Byte1 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
+                               uint16_t Byte0 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               uint16_t Byte1 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
 \r
                                return ((Byte0 << 8) | Byte1);\r
                        }\r
 \r
                                return ((Byte0 << 8) | Byte1);\r
                        }\r
                        static inline void Endpoint_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_Word_LE(const uint16_t Word)\r
                        {\r
                        static inline void Endpoint_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_Word_LE(const uint16_t Word)\r
                        {\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (Word >> 8);\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (Word & 0xFF);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (Word >> 8);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (Word & 0xFF);\r
                        }\r
 \r
                        /** Writes two bytes to the currently selected endpoint's bank in big endian format, for IN\r
                        }\r
 \r
                        /** Writes two bytes to the currently selected endpoint's bank in big endian format, for IN\r
                        static inline void Endpoint_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_Word_BE(const uint16_t Word)\r
                        {\r
                        static inline void Endpoint_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_Word_BE(const uint16_t Word)\r
                        {\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (Word & 0xFF);\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (Word >> 8);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (Word & 0xFF);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (Word >> 8);\r
                        }\r
 \r
                        /** Discards two bytes from the currently selected endpoint's bank, for OUT direction endpoints.\r
                        }\r
 \r
                        /** Discards two bytes from the currently selected endpoint's bank, for OUT direction endpoints.\r
                        {\r
                                uint8_t Dummy;\r
 \r
                        {\r
                                uint8_t Dummy;\r
 \r
-                               Dummy = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               Dummy = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
+                               Dummy = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               Dummy = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
                        }\r
 \r
                        /** Reads four bytes from the currently selected endpoint's bank in little endian format, for OUT\r
                        }\r
 \r
                        /** Reads four bytes from the currently selected endpoint's bank in little endian format, for OUT\r
                        static inline uint32_t Endpoint_Read_DWord_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint32_t Endpoint_Read_DWord_LE(void)\r
                        {\r
                        static inline uint32_t Endpoint_Read_DWord_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint32_t Endpoint_Read_DWord_LE(void)\r
                        {\r
-                               uint32_t Byte3 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               uint32_t Byte2 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               uint32_t Byte1 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               uint32_t Byte0 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
+                               uint32_t Byte3 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               uint32_t Byte2 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               uint32_t Byte1 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               uint32_t Byte0 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
 \r
                                return ((Byte0 << 24) | (Byte1 << 16) | (Byte2 << 8) | Byte3);\r
                        }\r
 \r
                                return ((Byte0 << 24) | (Byte1 << 16) | (Byte2 << 8) | Byte3);\r
                        }\r
                        static inline uint32_t Endpoint_Read_DWord_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint32_t Endpoint_Read_DWord_BE(void)\r
                        {\r
                        static inline uint32_t Endpoint_Read_DWord_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint32_t Endpoint_Read_DWord_BE(void)\r
                        {\r
-                               uint32_t Byte0 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               uint32_t Byte1 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               uint32_t Byte2 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               uint32_t Byte3 = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
+                               uint32_t Byte0 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               uint32_t Byte1 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               uint32_t Byte2 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               uint32_t Byte3 = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
 \r
                                return ((Byte0 << 24) | (Byte1 << 16) | (Byte2 << 8) | Byte3);\r
                        }\r
 \r
                                return ((Byte0 << 24) | (Byte1 << 16) | (Byte2 << 8) | Byte3);\r
                        }\r
                        static inline void Endpoint_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_DWord_LE(const uint32_t DWord)\r
                        {\r
                        static inline void Endpoint_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_DWord_LE(const uint32_t DWord)\r
                        {\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (DWord >> 24);\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (DWord >> 16);\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (DWord >> 8);\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (DWord &  0xFF);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (DWord >> 24);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (DWord >> 16);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (DWord >> 8);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (DWord &  0xFF);\r
                        }\r
 \r
                        /** Writes four bytes to the currently selected endpoint's bank in big endian format, for IN\r
                        }\r
 \r
                        /** Writes four bytes to the currently selected endpoint's bank in big endian format, for IN\r
                        static inline void Endpoint_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_DWord_BE(const uint32_t DWord)\r
                        {\r
                        static inline void Endpoint_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
                        static inline void Endpoint_Write_DWord_BE(const uint32_t DWord)\r
                        {\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (DWord &  0xFF);\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (DWord >> 8);\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (DWord >> 16);\r
-                               *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++) = (DWord >> 24);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (DWord &  0xFF);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (DWord >> 8);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (DWord >> 16);\r
+                               *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++) = (DWord >> 24);\r
                        }\r
 \r
                        /** Discards four bytes from the currently selected endpoint's bank, for OUT direction endpoints.\r
                        }\r
 \r
                        /** Discards four bytes from the currently selected endpoint's bank, for OUT direction endpoints.\r
                        {\r
                                uint8_t Dummy;\r
 \r
                        {\r
                                uint8_t Dummy;\r
 \r
-                               Dummy = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               Dummy = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               Dummy = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
-                               Dummy = *(((volatile uint8_t** volatile)USB_EndpointFIFOPos)[USB_SelectedEndpoint]++);\r
+                               Dummy = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               Dummy = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               Dummy = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
+                               Dummy = *(USB_EndpointFIFOPos[USB_SelectedEndpoint]++);\r
                        }\r
 \r
                /* External Variables: */\r
                        }\r
 \r
                /* External Variables: */\r
index d20926a..870828e 100644 (file)
@@ -37,8 +37,8 @@
 \r
 uint8_t USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;\r
 \r
 \r
 uint8_t USB_ControlPipeSize = PIPE_CONTROLPIPE_DEFAULT_SIZE;\r
 \r
-volatile uint8_t USB_SelectedPipe = PIPE_CONTROLPIPE;\r
-volatile void*   USB_PipeFIFOPos[PIPE_TOTAL_PIPES];\r
+volatile uint8_t  USB_SelectedPipe = PIPE_CONTROLPIPE;\r
+volatile uint8_t* USB_PipeFIFOPos[PIPE_TOTAL_PIPES];\r
 \r
 bool Pipe_ConfigurePipe(const uint8_t Number,\r
                         const uint8_t Type,\r
 \r
 bool Pipe_ConfigurePipe(const uint8_t Number,\r
                         const uint8_t Type,\r
index ee0b165..a135138 100644 (file)
@@ -99,8 +99,8 @@
        /* Private Interface - For use in library only: */\r
        #if !defined(__DOXYGEN__)\r
                /* External Variables: */\r
        /* Private Interface - For use in library only: */\r
        #if !defined(__DOXYGEN__)\r
                /* External Variables: */\r
-                       extern volatile uint8_t USB_SelectedPipe;\r
-                       extern volatile void*   USB_PipeFIFOPos[];\r
+                       extern volatile uint8_t  USB_SelectedPipe;\r
+                       extern volatile uint8_t* USB_PipeFIFOPos[];\r
        #endif\r
 \r
        /* Public Interface - May be used in end-application: */\r
        #endif\r
 \r
        /* Public Interface - May be used in end-application: */\r
                        static inline uint8_t Pipe_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint8_t Pipe_Read_Byte(void)\r
                        {\r
                        static inline uint8_t Pipe_Read_Byte(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint8_t Pipe_Read_Byte(void)\r
                        {\r
-                               return *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
+                               return *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
                        }\r
 \r
                        /** Writes one byte from the currently selected pipe's bank, for IN direction pipes.\r
                        }\r
 \r
                        /** Writes one byte from the currently selected pipe's bank, for IN direction pipes.\r
                        static inline void Pipe_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;\r
                        static inline void Pipe_Write_Byte(const uint8_t Byte)\r
                        {\r
                        static inline void Pipe_Write_Byte(const uint8_t Byte) ATTR_ALWAYS_INLINE;\r
                        static inline void Pipe_Write_Byte(const uint8_t Byte)\r
                        {\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = Byte;\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = Byte;\r
                        }\r
 \r
                        /** Discards one byte from the currently selected pipe's bank, for OUT direction pipes.\r
                        }\r
 \r
                        /** Discards one byte from the currently selected pipe's bank, for OUT direction pipes.\r
                        {\r
                                uint8_t Dummy;\r
 \r
                        {\r
                                uint8_t Dummy;\r
 \r
-                               Dummy = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
+                               Dummy = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
                        }\r
 \r
                        /** Reads two bytes from the currently selected pipe's bank in little endian format, for OUT\r
                        }\r
 \r
                        /** Reads two bytes from the currently selected pipe's bank in little endian format, for OUT\r
                        static inline uint16_t Pipe_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint16_t Pipe_Read_Word_LE(void)\r
                        {\r
                        static inline uint16_t Pipe_Read_Word_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint16_t Pipe_Read_Word_LE(void)\r
                        {\r
-                               uint16_t Byte1 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               uint16_t Byte0 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
+                               uint16_t Byte1 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               uint16_t Byte0 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
 \r
                                return ((Byte0 << 8) | Byte1);\r
                        }\r
 \r
                                return ((Byte0 << 8) | Byte1);\r
                        }\r
                        static inline uint16_t Pipe_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint16_t Pipe_Read_Word_BE(void)\r
                        {\r
                        static inline uint16_t Pipe_Read_Word_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint16_t Pipe_Read_Word_BE(void)\r
                        {\r
-                               uint16_t Byte0 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               uint16_t Byte1 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
+                               uint16_t Byte0 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               uint16_t Byte1 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
 \r
                                return ((Byte0 << 8) | Byte1);\r
                        }\r
 \r
                                return ((Byte0 << 8) | Byte1);\r
                        }\r
                        static inline void Pipe_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
                        static inline void Pipe_Write_Word_LE(const uint16_t Word)\r
                        {\r
                        static inline void Pipe_Write_Word_LE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
                        static inline void Pipe_Write_Word_LE(const uint16_t Word)\r
                        {\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (Word >> 8);\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (Word & 0xFF);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Word >> 8);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Word & 0xFF);\r
                        }\r
 \r
                        /** Writes two bytes to the currently selected pipe's bank in big endian format, for IN\r
                        }\r
 \r
                        /** Writes two bytes to the currently selected pipe's bank in big endian format, for IN\r
                        static inline void Pipe_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
                        static inline void Pipe_Write_Word_BE(const uint16_t Word)\r
                        {\r
                        static inline void Pipe_Write_Word_BE(const uint16_t Word) ATTR_ALWAYS_INLINE;\r
                        static inline void Pipe_Write_Word_BE(const uint16_t Word)\r
                        {\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (Word & 0xFF);\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (Word >> 8);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Word & 0xFF);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Word >> 8);\r
                        }\r
 \r
                        /** Discards two bytes from the currently selected pipe's bank, for OUT direction pipes.\r
                        }\r
 \r
                        /** Discards two bytes from the currently selected pipe's bank, for OUT direction pipes.\r
                        {\r
                                uint8_t Dummy;\r
 \r
                        {\r
                                uint8_t Dummy;\r
 \r
-                               Dummy = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               Dummy = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
+                               Dummy = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               Dummy = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
                        }\r
 \r
                        /** Reads four bytes from the currently selected pipe's bank in little endian format, for OUT\r
                        }\r
 \r
                        /** Reads four bytes from the currently selected pipe's bank in little endian format, for OUT\r
                        static inline uint32_t Pipe_Read_DWord_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint32_t Pipe_Read_DWord_LE(void)\r
                        {\r
                        static inline uint32_t Pipe_Read_DWord_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint32_t Pipe_Read_DWord_LE(void)\r
                        {\r
-                               uint32_t Byte3 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               uint32_t Byte2 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               uint32_t Byte1 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               uint32_t Byte0 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
+                               uint32_t Byte3 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               uint32_t Byte2 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               uint32_t Byte1 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               uint32_t Byte0 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
 \r
                                return ((Byte0 << 24) | (Byte1 << 16) | (Byte2 << 8) | Byte3);\r
                        }\r
 \r
                                return ((Byte0 << 24) | (Byte1 << 16) | (Byte2 << 8) | Byte3);\r
                        }\r
                        static inline uint32_t Pipe_Read_DWord_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint32_t Pipe_Read_DWord_BE(void)\r
                        {\r
                        static inline uint32_t Pipe_Read_DWord_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
                        static inline uint32_t Pipe_Read_DWord_BE(void)\r
                        {\r
-                               uint32_t Byte0 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               uint32_t Byte1 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               uint32_t Byte2 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               uint32_t Byte3 = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
+                               uint32_t Byte0 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               uint32_t Byte1 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               uint32_t Byte2 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               uint32_t Byte3 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
 \r
                                return ((Byte0 << 24) | (Byte1 << 16) | (Byte2 << 8) | Byte3);\r
                        }\r
 \r
                                return ((Byte0 << 24) | (Byte1 << 16) | (Byte2 << 8) | Byte3);\r
                        }\r
                        static inline void Pipe_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
                        static inline void Pipe_Write_DWord_LE(const uint32_t DWord)\r
                        {\r
                        static inline void Pipe_Write_DWord_LE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
                        static inline void Pipe_Write_DWord_LE(const uint32_t DWord)\r
                        {\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (DWord >> 24);\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (DWord >> 16);\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (DWord >> 8);\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (DWord &  0xFF);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (DWord >> 24);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (DWord >> 16);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (DWord >> 8);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (DWord &  0xFF);\r
                        }\r
 \r
                        /** Writes four bytes to the currently selected pipe's bank in big endian format, for IN\r
                        }\r
 \r
                        /** Writes four bytes to the currently selected pipe's bank in big endian format, for IN\r
                        static inline void Pipe_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
                        static inline void Pipe_Write_DWord_BE(const uint32_t DWord)\r
                        {\r
                        static inline void Pipe_Write_DWord_BE(const uint32_t DWord) ATTR_ALWAYS_INLINE;\r
                        static inline void Pipe_Write_DWord_BE(const uint32_t DWord)\r
                        {\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (DWord &  0xFF);\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (DWord >> 8);\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (DWord >> 16);\r
-                               *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++) = (DWord >> 24);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (DWord &  0xFF);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (DWord >> 8);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (DWord >> 16);\r
+                               *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (DWord >> 24);\r
                        }\r
 \r
                        /** Discards four bytes from the currently selected pipe's bank, for OUT direction pipes.\r
                        }\r
 \r
                        /** Discards four bytes from the currently selected pipe's bank, for OUT direction pipes.\r
                        {\r
                                uint8_t Dummy;\r
 \r
                        {\r
                                uint8_t Dummy;\r
 \r
-                               Dummy = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               Dummy = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               Dummy = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
-                               Dummy = *(((volatile uint8_t** volatile)USB_PipeFIFOPos)[USB_SelectedPipe]++);\r
+                               Dummy = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               Dummy = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               Dummy = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
+                               Dummy = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
                        }\r
 \r
                /* External Variables: */\r
                        }\r
 \r
                /* External Variables: */\r