diff options
| author | sakimisu <[email protected]> | 2022-11-19 21:45:50 +0800 |
|---|---|---|
| committer | sakimisu <[email protected]> | 2022-11-19 21:51:38 +0800 |
| commit | 9517ae828fd533667523c29df36a44c8c8778218 (patch) | |
| tree | a33715c4a1204f76e02b8a17b603b6d6723d2c64 | |
| parent | 71cec839c7b844843b47d66a49356a212365df7e (diff) | |
fix musb tx packet split
| -rw-r--r-- | port/musb/usb_dc_musb.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/port/musb/usb_dc_musb.c b/port/musb/usb_dc_musb.c index 85e835c0..3aa64b10 100644 --- a/port/musb/usb_dc_musb.c +++ b/port/musb/usb_dc_musb.c @@ -701,9 +701,15 @@ void USBD_IRQHandler(void) HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) &= ~USB_TXCSRL1_UNDRN; } - g_musb_udc.in_ep[ep_idx].xfer_buf += g_musb_udc.in_ep[ep_idx].ep_mps; - g_musb_udc.in_ep[ep_idx].actual_xfer_len += g_musb_udc.in_ep[ep_idx].ep_mps; - g_musb_udc.in_ep[ep_idx].xfer_len -= g_musb_udc.in_ep[ep_idx].ep_mps; + if (g_musb_udc.in_ep[ep_idx].xfer_len > g_musb_udc.in_ep[ep_idx].ep_mps) { + g_musb_udc.in_ep[ep_idx].xfer_buf += g_musb_udc.in_ep[ep_idx].ep_mps; + g_musb_udc.in_ep[ep_idx].actual_xfer_len += g_musb_udc.in_ep[ep_idx].ep_mps; + g_musb_udc.in_ep[ep_idx].xfer_len -= g_musb_udc.in_ep[ep_idx].ep_mps; + } else { + g_musb_udc.in_ep[ep_idx].xfer_buf += g_musb_udc.in_ep[ep_idx].xfer_len; + g_musb_udc.in_ep[ep_idx].actual_xfer_len += g_musb_udc.in_ep[ep_idx].xfer_len; + g_musb_udc.in_ep[ep_idx].xfer_len = 0; + } if (g_musb_udc.in_ep[ep_idx].xfer_len == 0) { usbd_event_ep_in_complete_handler(ep_idx | 0x80, g_musb_udc.in_ep[ep_idx].actual_xfer_len); |
