mirror of
https://github.com/hathach/tinyusb.git
synced 2025-03-28 05:37:15 +00:00
code format
This commit is contained in:
parent
fadd9524c1
commit
ac4e649e56
@ -1,30 +1,32 @@
|
|||||||
/**
|
/*
|
||||||
* Copyright(c) 2016 STMicroelectronics
|
* Copyright(c) 2016 STMicroelectronics
|
||||||
* Copyright(c) N Conrad
|
* Copyright(c) N Conrad
|
||||||
*
|
* Copyright (c) 2019 Ha Thach (tinyusb.org)
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
*
|
||||||
* are permitted provided that the following conditions are met:
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
* are permitted provided that the following conditions are met:
|
||||||
* this list of conditions and the following disclaimer.
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
* this list of conditions and the following disclaimer.
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
* and/or other materials provided with the distribution.
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
* and/or other materials provided with the distribution.
|
||||||
* may be used to endorse or promote products derived from this software
|
* 3. Neither the name of STMicroelectronics nor the names of its contributors
|
||||||
* without specific prior written permission.
|
* may be used to endorse or promote products derived from this software
|
||||||
*
|
* without specific prior written permission.
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
*
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
*
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*
|
||||||
|
* This file is part of the TinyUSB stack.
|
||||||
|
*/
|
||||||
|
|
||||||
// This file contains source copied from ST's HAL, and thus should have their copyright statement.
|
// This file contains source copied from ST's HAL, and thus should have their copyright statement.
|
||||||
|
|
||||||
@ -138,7 +140,6 @@
|
|||||||
#define USB_CNTR_LPMODE USB_CNTR_SUSPRDY
|
#define USB_CNTR_LPMODE USB_CNTR_SUSPRDY
|
||||||
#define USB_CNTR_FSUSP USB_CNTR_SUSPEN
|
#define USB_CNTR_FSUSP USB_CNTR_SUSPEN
|
||||||
|
|
||||||
|
|
||||||
#elif CFG_TUSB_MCU == OPT_MCU_STM32WB
|
#elif CFG_TUSB_MCU == OPT_MCU_STM32WB
|
||||||
#include "stm32wbxx.h"
|
#include "stm32wbxx.h"
|
||||||
#define FSDEV_PMA_SIZE (1024u)
|
#define FSDEV_PMA_SIZE (1024u)
|
||||||
@ -182,27 +183,23 @@ typedef uint16_t fsdev_bus_t;
|
|||||||
// Volatile is also needed to prevent the optimizer from changing access to 32-bit (as 32-bit access is forbidden)
|
// Volatile is also needed to prevent the optimizer from changing access to 32-bit (as 32-bit access is forbidden)
|
||||||
static __IO uint16_t * const pma = (__IO uint16_t*)USB_PMAADDR;
|
static __IO uint16_t * const pma = (__IO uint16_t*)USB_PMAADDR;
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline __IO uint16_t * pcd_btable_word_ptr(USB_TypeDef * USBx, size_t x)
|
TU_ATTR_ALWAYS_INLINE static inline __IO uint16_t * pcd_btable_word_ptr(USB_TypeDef * USBx, size_t x) {
|
||||||
{
|
|
||||||
size_t total_word_offset = (((USBx)->BTABLE)>>1) + x;
|
size_t total_word_offset = (((USBx)->BTABLE)>>1) + x;
|
||||||
total_word_offset *= FSDEV_PMA_STRIDE;
|
total_word_offset *= FSDEV_PMA_STRIDE;
|
||||||
return &(pma[total_word_offset]);
|
return &(pma[total_word_offset]);
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline __IO uint16_t* pcd_ep_tx_cnt_ptr(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline __IO uint16_t* pcd_ep_tx_cnt_ptr(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
return pcd_btable_word_ptr(USBx,(bEpIdx)*4u + 1u);
|
return pcd_btable_word_ptr(USBx,(bEpIdx)*4u + 1u);
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline __IO uint16_t* pcd_ep_rx_cnt_ptr(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline __IO uint16_t* pcd_ep_rx_cnt_ptr(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
return pcd_btable_word_ptr(USBx,(bEpIdx)*4u + 3u);
|
return pcd_btable_word_ptr(USBx,(bEpIdx)*4u + 3u);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Aligned buffer size according to hardware */
|
/* Aligned buffer size according to hardware */
|
||||||
TU_ATTR_ALWAYS_INLINE static inline uint16_t pcd_aligned_buffer_size(uint16_t size)
|
TU_ATTR_ALWAYS_INLINE static inline uint16_t pcd_aligned_buffer_size(uint16_t size) {
|
||||||
{
|
|
||||||
/* The STM32 full speed USB peripheral supports only a limited set of
|
/* The STM32 full speed USB peripheral supports only a limited set of
|
||||||
* buffer sizes given by the RX buffer entry format in the USB_BTABLE. */
|
* buffer sizes given by the RX buffer entry format in the USB_BTABLE. */
|
||||||
uint16_t blocksize = (size > 62) ? 32 : 2;
|
uint16_t blocksize = (size > 62) ? 32 : 2;
|
||||||
@ -213,9 +210,7 @@ TU_ATTR_ALWAYS_INLINE static inline uint16_t pcd_aligned_buffer_size(uint16_t si
|
|||||||
return numblocks * blocksize;
|
return numblocks * blocksize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SetENDPOINT */
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_endpoint(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wRegValue) {
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_endpoint(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wRegValue)
|
|
||||||
{
|
|
||||||
#ifdef FSDEV_BUS_32BIT
|
#ifdef FSDEV_BUS_32BIT
|
||||||
(void) USBx;
|
(void) USBx;
|
||||||
__O uint32_t *reg = (__O uint32_t *)(USB_DRD_BASE + bEpIdx*4);
|
__O uint32_t *reg = (__O uint32_t *)(USB_DRD_BASE + bEpIdx*4);
|
||||||
@ -226,7 +221,6 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_endpoint(USB_TypeDef * USBx, ui
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* GetENDPOINT */
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_endpoint(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_endpoint(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
#ifdef FSDEV_BUS_32BIT
|
#ifdef FSDEV_BUS_32BIT
|
||||||
(void) USBx;
|
(void) USBx;
|
||||||
@ -237,8 +231,7 @@ TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_endpoint(USB_TypeDef * USBx
|
|||||||
return *reg;
|
return *reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_eptype(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wType)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_eptype(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wType) {
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
regVal &= (uint32_t)USB_EP_T_MASK;
|
regVal &= (uint32_t)USB_EP_T_MASK;
|
||||||
regVal |= wType;
|
regVal |= wType;
|
||||||
@ -246,20 +239,19 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_eptype(USB_TypeDef * USBx, uint
|
|||||||
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_eptype(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_eptype(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
regVal &= USB_EP_T_FIELD;
|
regVal &= USB_EP_T_FIELD;
|
||||||
return regVal;
|
return regVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Clears bit CTR_RX / CTR_TX in the endpoint register.
|
* @brief Clears bit CTR_RX / CTR_TX in the endpoint register.
|
||||||
* @param USBx USB peripheral instance register address.
|
* @param USBx USB peripheral instance register address.
|
||||||
* @param bEpIdx Endpoint Number.
|
* @param bEpIdx Endpoint Number.
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_rx_ep_ctr(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_rx_ep_ctr(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
regVal &= USB_EPREG_MASK;
|
regVal &= USB_EPREG_MASK;
|
||||||
regVal &= ~USB_EP_CTR_RX;
|
regVal &= ~USB_EP_CTR_RX;
|
||||||
@ -267,22 +259,21 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_rx_ep_ctr(USB_TypeDef * USBx,
|
|||||||
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_tx_ep_ctr(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_tx_ep_ctr(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
regVal &= USB_EPREG_MASK;
|
regVal &= USB_EPREG_MASK;
|
||||||
regVal &= ~USB_EP_CTR_TX;
|
regVal &= ~USB_EP_CTR_TX;
|
||||||
regVal |= USB_EP_CTR_RX; // preserve CTR_RX (clears on writing 0)
|
regVal |= USB_EP_CTR_RX; // preserve CTR_RX (clears on writing 0)
|
||||||
pcd_set_endpoint(USBx, bEpIdx,regVal);
|
pcd_set_endpoint(USBx, bEpIdx,regVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief gets counter of the tx buffer.
|
* @brief gets counter of the tx buffer.
|
||||||
* @param USBx USB peripheral instance register address.
|
* @param USBx USB peripheral instance register address.
|
||||||
* @param bEpIdx Endpoint Number.
|
* @param bEpIdx Endpoint Number.
|
||||||
* @retval Counter value
|
* @retval Counter value
|
||||||
*/
|
*/
|
||||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_tx_cnt(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_tx_cnt(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
#ifdef FSDEV_BUS_32BIT
|
#ifdef FSDEV_BUS_32BIT
|
||||||
(void) USBx;
|
(void) USBx;
|
||||||
return (pma32[2*bEpIdx] & 0x03FF0000) >> 16;
|
return (pma32[2*bEpIdx] & 0x03FF0000) >> 16;
|
||||||
@ -292,8 +283,7 @@ TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_tx_cnt(USB_TypeDef * USB
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_rx_cnt(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_rx_cnt(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
#ifdef FSDEV_BUS_32BIT
|
#ifdef FSDEV_BUS_32BIT
|
||||||
(void) USBx;
|
(void) USBx;
|
||||||
/* WA: few cycles for RX PMA descriptor to update, otherwise doesn't return the correct value.
|
/* WA: few cycles for RX PMA descriptor to update, otherwise doesn't return the correct value.
|
||||||
@ -320,8 +310,7 @@ TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_rx_cnt(USB_TypeDef * USB
|
|||||||
* @param bAddr Address.
|
* @param bAddr Address.
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_address(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t bAddr)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_address(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t bAddr) {
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
regVal &= USB_EPREG_MASK;
|
regVal &= USB_EPREG_MASK;
|
||||||
regVal |= bAddr;
|
regVal |= bAddr;
|
||||||
@ -329,8 +318,7 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_address(USB_TypeDef * USBx,
|
|||||||
pcd_set_endpoint(USBx, bEpIdx,regVal);
|
pcd_set_endpoint(USBx, bEpIdx,regVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_tx_address(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_tx_address(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
#ifdef FSDEV_BUS_32BIT
|
#ifdef FSDEV_BUS_32BIT
|
||||||
(void) USBx;
|
(void) USBx;
|
||||||
return pma32[2*bEpIdx] & 0x0000FFFFu ;
|
return pma32[2*bEpIdx] & 0x0000FFFFu ;
|
||||||
@ -339,8 +327,7 @@ TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_tx_address(USB_TypeDef *
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_rx_address(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_rx_address(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
#ifdef FSDEV_BUS_32BIT
|
#ifdef FSDEV_BUS_32BIT
|
||||||
(void) USBx;
|
(void) USBx;
|
||||||
return pma32[2*bEpIdx + 1] & 0x0000FFFFu;
|
return pma32[2*bEpIdx + 1] & 0x0000FFFFu;
|
||||||
@ -349,8 +336,7 @@ TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_rx_address(USB_TypeDef *
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_address(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t addr)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_address(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t addr) {
|
||||||
{
|
|
||||||
#ifdef FSDEV_BUS_32BIT
|
#ifdef FSDEV_BUS_32BIT
|
||||||
(void) USBx;
|
(void) USBx;
|
||||||
pma32[2*bEpIdx] = (pma32[2*bEpIdx] & 0xFFFF0000u) | (addr & 0x0000FFFCu);
|
pma32[2*bEpIdx] = (pma32[2*bEpIdx] & 0xFFFF0000u) | (addr & 0x0000FFFCu);
|
||||||
@ -359,8 +345,7 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_address(USB_TypeDef * USB
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_rx_address(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t addr)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_rx_address(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t addr) {
|
||||||
{
|
|
||||||
#ifdef FSDEV_BUS_32BIT
|
#ifdef FSDEV_BUS_32BIT
|
||||||
(void) USBx;
|
(void) USBx;
|
||||||
pma32[2*bEpIdx + 1] = (pma32[2*bEpIdx + 1] & 0xFFFF0000u) | (addr & 0x0000FFFCu);
|
pma32[2*bEpIdx + 1] = (pma32[2*bEpIdx + 1] & 0xFFFF0000u) | (addr & 0x0000FFFCu);
|
||||||
@ -369,8 +354,7 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_rx_address(USB_TypeDef * USB
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_cnt(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wCount)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_cnt(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wCount) {
|
||||||
{
|
|
||||||
#ifdef FSDEV_BUS_32BIT
|
#ifdef FSDEV_BUS_32BIT
|
||||||
(void) USBx;
|
(void) USBx;
|
||||||
pma32[2*bEpIdx] = (pma32[2*bEpIdx] & ~0x03FF0000u) | ((wCount & 0x3FFu) << 16);
|
pma32[2*bEpIdx] = (pma32[2*bEpIdx] & ~0x03FF0000u) | ((wCount & 0x3FFu) << 16);
|
||||||
@ -380,8 +364,7 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_cnt(USB_TypeDef * USBx, u
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_rx_cnt(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wCount)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_rx_cnt(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wCount) {
|
||||||
{
|
|
||||||
#ifdef FSDEV_BUS_32BIT
|
#ifdef FSDEV_BUS_32BIT
|
||||||
(void) USBx;
|
(void) USBx;
|
||||||
pma32[2*bEpIdx + 1] = (pma32[2*bEpIdx + 1] & ~0x03FF0000u) | ((wCount & 0x3FFu) << 16);
|
pma32[2*bEpIdx + 1] = (pma32[2*bEpIdx + 1] & ~0x03FF0000u) | ((wCount & 0x3FFu) << 16);
|
||||||
@ -391,8 +374,8 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_rx_cnt(USB_TypeDef * USBx, u
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_blsize_num_blocks(USB_TypeDef * USBx, uint32_t rxtx_idx, uint32_t blocksize, uint32_t numblocks)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_blsize_num_blocks(USB_TypeDef * USBx, uint32_t rxtx_idx,
|
||||||
{
|
uint32_t blocksize, uint32_t numblocks) {
|
||||||
/* Encode into register. When BLSIZE==1, we need to subtract 1 block count */
|
/* Encode into register. When BLSIZE==1, we need to subtract 1 block count */
|
||||||
#ifdef FSDEV_BUS_32BIT
|
#ifdef FSDEV_BUS_32BIT
|
||||||
(void) USBx;
|
(void) USBx;
|
||||||
@ -403,8 +386,7 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_blsize_num_blocks(USB_TypeDe
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_bufsize(USB_TypeDef * USBx, uint32_t rxtx_idx, uint32_t wCount)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_bufsize(USB_TypeDef * USBx, uint32_t rxtx_idx, uint32_t wCount) {
|
||||||
{
|
|
||||||
wCount = pcd_aligned_buffer_size(wCount);
|
wCount = pcd_aligned_buffer_size(wCount);
|
||||||
|
|
||||||
/* We assume that the buffer size is already aligned to hardware requirements. */
|
/* We assume that the buffer size is already aligned to hardware requirements. */
|
||||||
@ -418,13 +400,11 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_bufsize(USB_TypeDef * USBx,
|
|||||||
pcd_set_ep_blsize_num_blocks(USBx, rxtx_idx, blocksize, numblocks);
|
pcd_set_ep_blsize_num_blocks(USBx, rxtx_idx, blocksize, numblocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_bufsize(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wCount)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_bufsize(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wCount) {
|
||||||
{
|
|
||||||
pcd_set_ep_bufsize(USBx, 2*bEpIdx, wCount);
|
pcd_set_ep_bufsize(USBx, 2*bEpIdx, wCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_rx_bufsize(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wCount)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_rx_bufsize(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wCount) {
|
||||||
{
|
|
||||||
pcd_set_ep_bufsize(USBx, 2*bEpIdx + 1, wCount);
|
pcd_set_ep_bufsize(USBx, 2*bEpIdx + 1, wCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -435,8 +415,7 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_rx_bufsize(USB_TypeDef * USB
|
|||||||
* @param wState new state
|
* @param wState new state
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_status(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wState)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_status(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wState) {
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
regVal &= USB_EPTX_DTOGMASK;
|
regVal &= USB_EPTX_DTOGMASK;
|
||||||
|
|
||||||
@ -453,7 +432,7 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_status(USB_TypeDef * USBx
|
|||||||
|
|
||||||
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX;
|
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX;
|
||||||
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
||||||
} /* pcd_set_ep_tx_status */
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief sets the status for rx transfer (bits STAT_TX[1:0])
|
* @brief sets the status for rx transfer (bits STAT_TX[1:0])
|
||||||
@ -463,31 +442,27 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_tx_status(USB_TypeDef * USBx
|
|||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_rx_status(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wState)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_rx_status(USB_TypeDef * USBx, uint32_t bEpIdx, uint32_t wState) {
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
regVal &= USB_EPRX_DTOGMASK;
|
regVal &= USB_EPRX_DTOGMASK;
|
||||||
|
|
||||||
/* toggle first bit ? */
|
/* toggle first bit ? */
|
||||||
if((USB_EPRX_DTOG1 & wState)!= 0U)
|
if((USB_EPRX_DTOG1 & wState)!= 0U) {
|
||||||
{
|
|
||||||
regVal ^= USB_EPRX_DTOG1;
|
regVal ^= USB_EPRX_DTOG1;
|
||||||
}
|
}
|
||||||
/* toggle second bit ? */
|
/* toggle second bit ? */
|
||||||
if((USB_EPRX_DTOG2 & wState)!= 0U)
|
if((USB_EPRX_DTOG2 & wState)!= 0U) {
|
||||||
{
|
|
||||||
regVal ^= USB_EPRX_DTOG2;
|
regVal ^= USB_EPRX_DTOG2;
|
||||||
}
|
}
|
||||||
|
|
||||||
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX;
|
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX;
|
||||||
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
||||||
} /* pcd_set_ep_rx_status */
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_rx_status(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_rx_status(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
return (regVal & USB_EPRX_STAT) >> (12u);
|
return (regVal & USB_EPRX_STAT) >> (12u);
|
||||||
} /* pcd_get_ep_rx_status */
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -496,16 +471,14 @@ TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_rx_status(USB_TypeDef *
|
|||||||
* @param bEpIdx Endpoint Number.
|
* @param bEpIdx Endpoint Number.
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_rx_dtog(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_rx_dtog(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
regVal &= USB_EPREG_MASK;
|
regVal &= USB_EPREG_MASK;
|
||||||
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX|USB_EP_DTOG_RX;
|
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX|USB_EP_DTOG_RX;
|
||||||
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_tx_dtog(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_tx_dtog(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
regVal &= USB_EPREG_MASK;
|
regVal &= USB_EPREG_MASK;
|
||||||
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX|USB_EP_DTOG_TX;
|
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX|USB_EP_DTOG_TX;
|
||||||
@ -518,21 +491,16 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_tx_dtog(USB_TypeDef * USBx, uint32
|
|||||||
* @param bEpIdx Endpoint Number.
|
* @param bEpIdx Endpoint Number.
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_rx_dtog(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_rx_dtog(USB_TypeDef * USBx, uint32_t bEpIdx)
|
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
if((regVal & USB_EP_DTOG_RX) != 0)
|
if((regVal & USB_EP_DTOG_RX) != 0) {
|
||||||
{
|
|
||||||
pcd_rx_dtog(USBx,bEpIdx);
|
pcd_rx_dtog(USBx,bEpIdx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_tx_dtog(USB_TypeDef * USBx, uint32_t bEpIdx)
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_tx_dtog(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
if((regVal & USB_EP_DTOG_TX) != 0)
|
if((regVal & USB_EP_DTOG_TX) != 0) {
|
||||||
{
|
|
||||||
pcd_tx_dtog(USBx,bEpIdx);
|
pcd_tx_dtog(USBx,bEpIdx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -543,17 +511,15 @@ TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_tx_dtog(USB_TypeDef * USBx,
|
|||||||
* @param bEpIdx Endpoint Number.
|
* @param bEpIdx Endpoint Number.
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_kind(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_set_ep_kind(USB_TypeDef * USBx, uint32_t bEpIdx)
|
|
||||||
{
|
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
regVal |= USB_EP_KIND;
|
regVal |= USB_EP_KIND;
|
||||||
regVal &= USB_EPREG_MASK;
|
regVal &= USB_EPREG_MASK;
|
||||||
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX;
|
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX;
|
||||||
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
pcd_set_endpoint(USBx, bEpIdx, regVal);
|
||||||
}
|
}
|
||||||
TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_ep_kind(USB_TypeDef * USBx, uint32_t bEpIdx)
|
|
||||||
{
|
TU_ATTR_ALWAYS_INLINE static inline void pcd_clear_ep_kind(USB_TypeDef * USBx, uint32_t bEpIdx) {
|
||||||
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
uint32_t regVal = pcd_get_endpoint(USBx, bEpIdx);
|
||||||
regVal &= USB_EPKIND_MASK;
|
regVal &= USB_EPKIND_MASK;
|
||||||
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX;
|
regVal |= USB_EP_CTR_RX|USB_EP_CTR_TX;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user