From 96b38020df89bcd93889e07b635203681bedda30 Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Sun, 29 May 2022 14:52:40 +0800 Subject: [PATCH] update ep write zlp --- port/musb/usb_dc_musb.c | 44 ++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/port/musb/usb_dc_musb.c b/port/musb/usb_dc_musb.c index 9315af41..b5c29a46 100644 --- a/port/musb/usb_dc_musb.c +++ b/port/musb/usb_dc_musb.c @@ -470,25 +470,14 @@ int usbd_ep_write(const uint8_t ep, const uint8_t *data, uint32_t data_len, uint uint32_t timeout = 0xffffff; uint8_t old_ep_idx; - old_ep_idx = USBC_GetActiveEp(); - USBC_SelectActiveEp(ep_idx); if (!data && data_len) { - ret = -1; - goto _RET; + return -1; } - if (ep_idx == 0x00) { - while (HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) & USB_CSRL0_TXRDY) { - if (HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) & USB_CSRL0_ERROR) { - ret = -2; - goto _RET; - } - if (!(timeout--)) { - ret = -3; - goto _RET; - } - } - } else { + old_ep_idx = USBC_GetActiveEp(); + USBC_SelectActiveEp(ep_idx); + + if (ep_idx != 0x00) { while (HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) & USB_TXCSRL1_TXRDY) { if ((HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) & USB_TXCSRL1_ERROR) || (HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) & USB_TXCSRL1_UNDRN)) { ret = -2; @@ -502,7 +491,11 @@ int usbd_ep_write(const uint8_t ep, const uint8_t *data, uint32_t data_len, uint } if (!data_len) { - ret = 0; + if (ep == 0x00) { + HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) = USB_CSRL0_TXRDY; + } else { + HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) = USB_TXCSRL1_TXRDY; + } goto _RET; } @@ -514,9 +507,12 @@ int usbd_ep_write(const uint8_t ep, const uint8_t *data, uint32_t data_len, uint usb_musb_write_packet(ep_idx, (uint8_t *)data, data_len); - if (ep_idx != 0) { + if (ep == 0x00) { + HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) = USB_CSRL0_TXRDY; + } else { HWREGB(USB_BASE + MUSB_IND_TXCSRL_OFFSET) = USB_TXCSRL1_TXRDY; } + if (ret_bytes) { *ret_bytes = data_len; } @@ -533,18 +529,16 @@ int usbd_ep_read(const uint8_t ep, uint8_t *data, uint32_t max_data_len, uint32_ uint32_t read_count = 0; uint8_t old_ep_idx; - old_ep_idx = USBC_GetActiveEp(); - USBC_SelectActiveEp(ep_idx); if (!data && max_data_len) { - ret = -1; - goto _RET; + return -1; } + old_ep_idx = USBC_GetActiveEp(); + USBC_SelectActiveEp(ep_idx); + if (!max_data_len) { - if (ep_idx != 0x00) { + if (ep_idx != 0x00) HWREGB(USB_BASE + MUSB_IND_RXCSRL_OFFSET) &= ~(USB_RXCSRL1_RXRDY); - } - ret = 0; goto _RET; }