Skip to content

Commit be432d4

Browse files
committed
Avoid accessing the same half of the sample buffer as the M0.
1 parent 17f4ec9 commit be432d4

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

firmware/hackrf_usb/usb_api_transceiver.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
#define USB_TRANSFER_SIZE 0x4000
5353
#define DMA_TRANSFER_SIZE 0x2000
5454

55+
#define BUF_HALF_MASK (USB_SAMP_BUFFER_SIZE >> 1)
56+
5557
#define DMA_CHANNEL 1
5658

5759
volatile uint32_t dma_started, usb_started, usb_completed;
@@ -472,7 +474,8 @@ void rx_mode(uint32_t seq)
472474
uint32_t data_available = data_gathered - dma_started;
473475
uint32_t space_in_use = usb_completed - dma_completed;
474476
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) &&
476479
(space_available >= DMA_TRANSFER_SIZE)) {
477480
uint32_t samp_offset = dma_started & USB_SAMP_BUFFER_MASK;
478481
uint32_t bulk_offset = dma_started & USB_BULK_BUFFER_MASK;
@@ -536,7 +539,8 @@ void tx_mode(uint32_t seq)
536539
uint32_t data_available = usb_completed - dma_started;
537540
uint32_t space_in_use = dma_started - data_used;
538541
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) &&
540544
(space_available >= DMA_TRANSFER_SIZE)) {
541545
uint32_t samp_offset = dma_started & USB_SAMP_BUFFER_MASK;
542546
uint32_t bulk_offset = dma_started & USB_BULK_BUFFER_MASK;

0 commit comments

Comments
 (0)