\r
/* Private Interface - For use in library only: */\r
#if !defined(__DOXYGEN__)\r
+ /* Macros: */\r
+ #define PIPE_HSB_ADDRESS_SPACE_SIZE (64 * 1024UL)\r
+ \r
/* External Variables: */\r
extern volatile uint8_t USB_SelectedPipe;\r
extern volatile uint8_t* USB_PipeFIFOPos[];\r
* bank.\r
*/\r
#define PIPE_BANK_DOUBLE AVR32_USBB_UPCFG0_PBK_DOUBLE\r
-\r
- /** Mask for the bank mode selection for the \ref Pipe_ConfigurePipe() macro. This indicates that the pipe\r
- * should have three banks, which requires more USB FIFO memory but results in faster transfers as one\r
- * USB device (the AVR or the attached device) can access one bank while the other accesses the remaining\r
- * banks.\r
- */\r
- #define PIPE_BANK_TRIPLE AVR32_USBB_UPCFG0_PBK_TRIPLE\r
//@}\r
\r
/** Default size of the default control pipe's bank, until altered by the Endpoint0Size value\r
{\r
AVR32_USBB.uprst |= (AVR32_USBB_PRST0_MASK << PipeNumber);\r
AVR32_USBB.uprst &= ~(AVR32_USBB_PRST0_MASK << PipeNumber);\r
- USB_PipeFIFOPos[USB_SelectedPipe] = &AVR32_USBB_SLAVE[USB_SelectedPipe * 0x10000];\r
+ USB_PipeFIFOPos[USB_SelectedPipe] = &AVR32_USBB_SLAVE[USB_SelectedPipe * PIPE_HSB_ADDRESS_SPACE_SIZE];\r
}\r
\r
/** Enables the currently selected pipe so that data can be sent and received through it to and from\r
static inline void Pipe_ClearSETUP(void)\r
{\r
(&AVR32_USBB.UPSTA0CLR)[USB_SelectedPipe].txstpic = true;\r
- USB_PipeFIFOPos[USB_SelectedPipe] = &AVR32_USBB_SLAVE[USB_SelectedPipe * 0x10000];\r
+ USB_PipeFIFOPos[USB_SelectedPipe] = &AVR32_USBB_SLAVE[USB_SelectedPipe * PIPE_HSB_ADDRESS_SPACE_SIZE];\r
}\r
\r
/** Acknowledges the reception of a setup IN request from the attached device on the currently selected\r
{\r
(&AVR32_USBB.UPSTA0CLR)[USB_SelectedPipe].rxinic = true;\r
(&AVR32_USBB.UPCON0CLR)[USB_SelectedPipe].fifoconc = true;\r
- USB_PipeFIFOPos[USB_SelectedPipe] = &AVR32_USBB_SLAVE[USB_SelectedPipe * 0x10000];\r
+ USB_PipeFIFOPos[USB_SelectedPipe] = &AVR32_USBB_SLAVE[USB_SelectedPipe * PIPE_HSB_ADDRESS_SPACE_SIZE];\r
}\r
\r
/** Sends the currently selected pipe's contents to the device as an OUT packet on the selected pipe, freeing\r
{\r
(&AVR32_USBB.UPSTA0CLR)[USB_SelectedPipe].txoutic = true;\r
(&AVR32_USBB.UPCON0CLR)[USB_SelectedPipe].fifoconc = true;\r
- USB_PipeFIFOPos[USB_SelectedPipe] = &AVR32_USBB_SLAVE[USB_SelectedPipe * 0x10000];\r
+ USB_PipeFIFOPos[USB_SelectedPipe] = &AVR32_USBB_SLAVE[USB_SelectedPipe * PIPE_HSB_ADDRESS_SPACE_SIZE];\r
}\r
\r
/** Determines if the device sent a NAK (Negative Acknowledge) in response to the last sent packet on\r
static inline void Pipe_ClearStall(void)\r
{\r
(&AVR32_USBB.UPSTA0CLR)[USB_SelectedPipe].rxstalldic = true;\r
- USB_PipeFIFOPos[USB_SelectedPipe] = &AVR32_USBB_SLAVE[USB_SelectedPipe * 0x10000];\r
+ USB_PipeFIFOPos[USB_SelectedPipe] = &AVR32_USBB_SLAVE[USB_SelectedPipe * PIPE_HSB_ADDRESS_SPACE_SIZE];\r
}\r
\r
/** Reads one byte from the currently selected pipe's bank, for OUT direction pipes.\r
*\r
* \return Next byte in the currently selected pipe's FIFO buffer.\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
+ static inline uint8_t Pipe_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+ static inline uint8_t Pipe_Read_8(void)\r
{\r
return *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
}\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*\r
- * \param[in] Byte Next byte to write into the the currently selected pipe's FIFO buffer.\r
+ * \param[in] Data Data to write into the the currently selected pipe's FIFO buffer.\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
+ static inline void Pipe_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE;\r
+ static inline void Pipe_Write_8(const uint8_t Data)\r
{\r
- *(USB_PipeFIFOPos[USB_SelectedPipe]++) = Byte;\r
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = Data;\r
}\r
\r
/** Discards one byte from the currently selected pipe's bank, for OUT direction pipes.\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*/\r
- static inline void Pipe_Discard_Byte(void) ATTR_ALWAYS_INLINE;\r
- static inline void Pipe_Discard_Byte(void)\r
+ static inline void Pipe_Discard_8(void) ATTR_ALWAYS_INLINE;\r
+ static inline void Pipe_Discard_8(void)\r
{\r
uint8_t Dummy;\r
\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*\r
- * \return Next word in the currently selected pipe's FIFO buffer.\r
+ * \return Next two bytes in the currently selected pipe's FIFO buffer.\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
+ static inline uint16_t Pipe_Read_16_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+ static inline uint16_t Pipe_Read_16_LE(void)\r
{\r
uint16_t Byte1 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
uint16_t Byte0 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*\r
- * \return Next word in the currently selected pipe's FIFO buffer.\r
+ * \return Next two bytes in the currently selected pipe's FIFO buffer.\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
+ static inline uint16_t Pipe_Read_16_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+ static inline uint16_t Pipe_Read_16_BE(void)\r
{\r
uint16_t Byte0 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
uint16_t Byte1 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*\r
- * \param[in] Word Next word to write to the currently selected pipe's FIFO buffer.\r
+ * \param[in] Data Data to write to the currently selected pipe's FIFO buffer.\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
+ static inline void Pipe_Write_16_LE(const uint16_t Data) ATTR_ALWAYS_INLINE;\r
+ static inline void Pipe_Write_16_LE(const uint16_t Data)\r
{\r
- *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Word >> 8);\r
- *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Word & 0xFF);\r
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data >> 8);\r
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data & 0xFF);\r
}\r
\r
/** Writes two bytes to the currently selected pipe's bank in big endian format, for IN\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*\r
- * \param[in] Word Next word to write to the currently selected pipe's FIFO buffer.\r
+ * \param[in] Data Data to write to the currently selected pipe's FIFO buffer.\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
+ static inline void Pipe_Write_16_BE(const uint16_t Data) ATTR_ALWAYS_INLINE;\r
+ static inline void Pipe_Write_16_BE(const uint16_t Data)\r
{\r
- *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Word & 0xFF);\r
- *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Word >> 8);\r
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data & 0xFF);\r
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data >> 8);\r
}\r
\r
/** Discards two bytes from the currently selected pipe's bank, for OUT direction pipes.\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*/\r
- static inline void Pipe_Discard_Word(void) ATTR_ALWAYS_INLINE;\r
- static inline void Pipe_Discard_Word(void)\r
+ static inline void Pipe_Discard_16(void) ATTR_ALWAYS_INLINE;\r
+ static inline void Pipe_Discard_16(void)\r
{\r
uint8_t Dummy;\r
\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*\r
- * \return Next double word in the currently selected pipe's FIFO buffer.\r
+ * \return Next four bytes in the currently selected pipe's FIFO buffer.\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
+ static inline uint32_t Pipe_Read_32_LE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+ static inline uint32_t Pipe_Read_32_LE(void)\r
{\r
uint32_t Byte3 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
uint32_t Byte2 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*\r
- * \return Next double word in the currently selected pipe's FIFO buffer.\r
+ * \return Next four bytes in the currently selected pipe's FIFO buffer.\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
+ static inline uint32_t Pipe_Read_32_BE(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;\r
+ static inline uint32_t Pipe_Read_32_BE(void)\r
{\r
uint32_t Byte0 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
uint32_t Byte1 = *(USB_PipeFIFOPos[USB_SelectedPipe]++);\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*\r
- * \param[in] DWord Next double word to write to the currently selected pipe's FIFO buffer.\r
+ * \param[in] Data Data to write to the currently selected pipe's FIFO buffer.\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
+ static inline void Pipe_Write_32_LE(const uint32_t Data) ATTR_ALWAYS_INLINE;\r
+ static inline void Pipe_Write_32_LE(const uint32_t Data)\r
{\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
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data >> 24);\r
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data >> 16);\r
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data >> 8);\r
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data & 0xFF);\r
}\r
\r
/** Writes four bytes to the currently selected pipe's bank in big endian format, for IN\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*\r
- * \param[in] DWord Next double word to write to the currently selected pipe's FIFO buffer.\r
+ * \param[in] Data Data to write to the currently selected pipe's FIFO buffer.\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
+ static inline void Pipe_Write_32_BE(const uint32_t Data) ATTR_ALWAYS_INLINE;\r
+ static inline void Pipe_Write_32_BE(const uint32_t Data)\r
{\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
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data & 0xFF);\r
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data >> 8);\r
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data >> 16);\r
+ *(USB_PipeFIFOPos[USB_SelectedPipe]++) = (Data >> 24);\r
}\r
\r
/** Discards four bytes from the currently selected pipe's bank, for OUT direction pipes.\r
*\r
* \ingroup Group_PipePrimitiveRW_UC3\r
*/\r
- static inline void Pipe_Discard_DWord(void) ATTR_ALWAYS_INLINE;\r
- static inline void Pipe_Discard_DWord(void)\r
+ static inline void Pipe_Discard_32(void) ATTR_ALWAYS_INLINE;\r
+ static inline void Pipe_Discard_32(void)\r
{\r
uint8_t Dummy;\r
\r