diff options
| author | hathach <[email protected]> | 2021-08-29 12:05:34 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2021-08-29 12:05:34 +0700 |
| commit | ad21b692775f5c75c09bc550ef77fdca64690a5a (patch) | |
| tree | 31763b300bdbde26eccc9b67946808c081bcf6a1 | |
| parent | 66c292e2ecb2cbc888074f2801c50e019f0bacf3 (diff) | |
fix nrf clear data toggle sequence when clearing stall
| -rw-r--r-- | src/portable/nordic/nrf5x/dcd_nrf5x.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/portable/nordic/nrf5x/dcd_nrf5x.c b/src/portable/nordic/nrf5x/dcd_nrf5x.c index 2013c5649..f40ba2d4f 100644 --- a/src/portable/nordic/nrf5x/dcd_nrf5x.c +++ b/src/portable/nordic/nrf5x/dcd_nrf5x.c @@ -539,12 +539,15 @@ void dcd_edpt_clear_stall (uint8_t rhport, uint8_t ep_addr) if ( epnum != 0 && epnum != EP_ISO_NUM ) { - // clear stall - NRF_USBD->EPSTALL = (USBD_EPSTALL_STALL_UnStall << USBD_EPSTALL_STALL_Pos) | ep_addr; - // reset data toggle to DATA0 + // First write this register with VALUE=Nop to select the endpoint, then either read it to get the status from + // VALUE, or write it again with VALUE=Data0 or Data1 + NRF_USBD->DTOGGLE = ep_addr; NRF_USBD->DTOGGLE = (USBD_DTOGGLE_VALUE_Data0 << USBD_DTOGGLE_VALUE_Pos) | ep_addr; + // clear stall + NRF_USBD->EPSTALL = (USBD_EPSTALL_STALL_UnStall << USBD_EPSTALL_STALL_Pos) | ep_addr; + // Write any value to SIZE register will allow nRF to ACK/accept data if (dir == TUSB_DIR_OUT) NRF_USBD->SIZE.EPOUT[epnum] = 0; |
