mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-17 05:32:55 +08:00
renesas: added wait function for IN transaction
This fixes a problem found on MSD class where data read from from disks were sometimes partially overwritten by the status MSD message ("USBS..."). The function introduced wait for the hw fifo pipe to be empty, that prevent that new writing in the fife overwrite data which are not yet be transmitted by hw.
This commit is contained in:
parent
7bf5923052
commit
7ce4cfa638
@ -266,6 +266,13 @@ static void pipe_read_packet_ff(rusb2_reg_t * rusb, tu_fifo_t *f, volatile void
|
|||||||
tu_fifo_advance_write_pointer(f, count);
|
tu_fifo_advance_write_pointer(f, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void wait_pipe_fifo_empty(rusb2_reg_t* rusb, uint8_t num) {
|
||||||
|
TU_ASSERT(num);
|
||||||
|
while( (rusb->PIPE_CTR[num-1] & RUSB2_PIPE_CTR_INBUFM_Msk) > 0 ) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Pipe Transfer
|
// Pipe Transfer
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
@ -339,6 +346,7 @@ static bool pipe_xfer_in(rusb2_reg_t* rusb, unsigned num)
|
|||||||
const unsigned rem = pipe->remaining;
|
const unsigned rem = pipe->remaining;
|
||||||
|
|
||||||
if (!rem) {
|
if (!rem) {
|
||||||
|
wait_pipe_fifo_empty(rusb, num);
|
||||||
pipe->buf = NULL;
|
pipe->buf = NULL;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user