summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2024-03-25 19:14:58 +0700
committerGitHub <[email protected]>2024-03-25 19:14:58 +0700
commit0814ca0cc70f7343218c6637ce0b4deaf9058dc0 (patch)
tree9a4561f2c40d95761ffeb37ce52fbfce22e0e76a /src
parentc028cfa7cf2fa281e6c88a816cf70fd80eb68338 (diff)
parent29f016ae15eb94654748bf29b81557f6ab611384 (diff)
Merge pull request #2515 from Lurcy38/ReAlignMaster
Diffstat (limited to 'src')
-rw-r--r--src/device/usbd.h2
-rw-r--r--src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h10
2 files changed, 11 insertions, 1 deletions
diff --git a/src/device/usbd.h b/src/device/usbd.h
index 3ab6c813f..cf500143a 100644
--- a/src/device/usbd.h
+++ b/src/device/usbd.h
@@ -421,7 +421,7 @@ TU_ATTR_WEAK bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb
/* Standard AS Isochronous Feedback Endpoint Descriptor(4.10.2.1) */
#define TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN 7
#define TUD_AUDIO_DESC_STD_AS_ISO_FB_EP(_ep, _interval) \
- TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN, TUSB_DESC_ENDPOINT, _ep, (uint8_t) (TUSB_XFER_ISOCHRONOUS | TUSB_ISO_EP_ATT_NO_SYNC | TUSB_ISO_EP_ATT_EXPLICIT_FB), U16_TO_U8S_LE(4), _interval
+ TUD_AUDIO_DESC_STD_AS_ISO_FB_EP_LEN, TUSB_DESC_ENDPOINT, _ep, (uint8_t) ((uint8_t)TUSB_XFER_ISOCHRONOUS | (uint8_t)TUSB_ISO_EP_ATT_NO_SYNC | (uint8_t)TUSB_ISO_EP_ATT_EXPLICIT_FB), U16_TO_U8S_LE(4), _interval
// AUDIO simple descriptor (UAC2) for 1 microphone input
// - 1 Input Terminal, 1 Feature Unit (Mute and Volume Control), 1 Output Terminal, 1 Clock Source
diff --git a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h
index 3f4db985d..ade64b4fb 100644
--- a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h
+++ b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev_pvt_st.h
@@ -296,6 +296,16 @@ TU_ATTR_ALWAYS_INLINE static inline uint32_t pcd_get_ep_rx_cnt(USB_TypeDef * USB
{
#ifdef FSDEV_BUS_32BIT
(void) USBx;
+ /* WA: few cycles for RX PMA descriptor to update, otherwise doesn't return the correct value.
+ Note: required for G0, U5, H5 etc.
+ This workaround is ported from stm32h5xx_hal_pcd.h and fixes the issue when calling this function fast enough.
+ Reproduced with GCC ast optimization(O2/O3) and stm32h573i_dk with an high frequency.
+ Observed on Windows 10 where tud_task() is scheduled by interrupt handler.
+ */
+ volatile uint32_t count = 10; // defined as PCD_RX_PMA_CNT in stm32 hal_driver
+ while (count > 0U) {
+ count--;
+ }
return (pma32[2*bEpIdx + 1] & 0x03FF0000) >> 16;
#else
__I uint16_t *regPtr = pcd_ep_rx_cnt_ptr(USBx, bEpIdx);