summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2022-01-19 10:33:37 +0700
committerGitHub <[email protected]>2022-01-19 10:33:37 +0700
commit983abfd6d81f780c079df284b0329d5ef780d21e (patch)
treed98c3eda525124071dea66711cc5fab287a8076c
parent84f2ca77f78d8a79d08377ba08ce72ca8e3da239 (diff)
parentda44fe3fc91ad643ec3892cc01a68eb52ed3dc5e (diff)
Merge pull request #1279 from kasjer/kasjer/nrf5x-int-race
nrf5x: Fix EP OUT race conditions
-rw-r--r--src/portable/nordic/nrf5x/dcd_nrf5x.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/portable/nordic/nrf5x/dcd_nrf5x.c b/src/portable/nordic/nrf5x/dcd_nrf5x.c
index 49e352d39..6b2cd83fd 100644
--- a/src/portable/nordic/nrf5x/dcd_nrf5x.c
+++ b/src/portable/nordic/nrf5x/dcd_nrf5x.c
@@ -457,9 +457,11 @@ bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t
xfer_td_t* xfer = get_td(epnum, dir);
+ dcd_int_disable(rhport);
xfer->buffer = buffer;
xfer->total_len = total_bytes;
xfer->actual_len = 0;
+ dcd_int_enable(rhport);
// Control endpoint with zero-length packet and opposite direction to 1st request byte --> status stage
bool const control_status = (epnum == 0 && total_bytes == 0 && dir != tu_edpt_dir(NRF_USBD->BMREQUESTTYPE));
@@ -480,7 +482,7 @@ bool dcd_edpt_xfer (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t
edpt_dma_start(&NRF_USBD->TASKS_EP0RCVOUT);
}else
{
- if ( xfer->data_received )
+ if ( xfer->data_received && xfer->total_len > xfer->actual_len)
{
// Data is already received previously
// start DMA to copy to SRAM