|
52 | 52 | #define USB_TRANSFER_SIZE 0x4000 |
53 | 53 | #define DMA_TRANSFER_SIZE 0x2000 |
54 | 54 |
|
| 55 | +#define BUF_HALF_MASK (USB_SAMP_BUFFER_SIZE >> 1) |
| 56 | + |
55 | 57 | #define DMA_CHANNEL 1 |
56 | 58 |
|
57 | 59 | volatile uint32_t dma_started, usb_started, usb_completed; |
@@ -472,7 +474,8 @@ void rx_mode(uint32_t seq) |
472 | 474 | uint32_t data_available = data_gathered - dma_started; |
473 | 475 | uint32_t space_in_use = usb_completed - dma_completed; |
474 | 476 | uint32_t space_available = USB_BULK_BUFFER_SIZE - space_in_use; |
475 | | - if (!dma_busy && (data_available >= DMA_TRANSFER_SIZE) && |
| 477 | + bool ahb_busy = !((data_gathered ^ dma_started) & BUF_HALF_MASK); |
| 478 | + if (!dma_busy && !ahb_busy && (data_available >= DMA_TRANSFER_SIZE) && |
476 | 479 | (space_available >= DMA_TRANSFER_SIZE)) { |
477 | 480 | uint32_t samp_offset = dma_started & USB_SAMP_BUFFER_MASK; |
478 | 481 | uint32_t bulk_offset = dma_started & USB_BULK_BUFFER_MASK; |
@@ -536,7 +539,8 @@ void tx_mode(uint32_t seq) |
536 | 539 | uint32_t data_available = usb_completed - dma_started; |
537 | 540 | uint32_t space_in_use = dma_started - data_used; |
538 | 541 | uint32_t space_available = USB_SAMP_BUFFER_SIZE - space_in_use; |
539 | | - if (!dma_busy && (data_available >= DMA_TRANSFER_SIZE) && |
| 542 | + bool ahb_busy = !((data_used ^ dma_started) & BUF_HALF_MASK); |
| 543 | + if (!dma_busy && !ahb_busy && (data_available >= DMA_TRANSFER_SIZE) && |
540 | 544 | (space_available >= DMA_TRANSFER_SIZE)) { |
541 | 545 | uint32_t samp_offset = dma_started & USB_SAMP_BUFFER_MASK; |
542 | 546 | uint32_t bulk_offset = dma_started & USB_BULK_BUFFER_MASK; |
|
0 commit comments