Skip to content

Commit 483ad5f

Browse files
committed
Allow DMA to same buffer half if shortfall margin is low enough.
1 parent e6027fb commit 483ad5f

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

firmware/hackrf_usb/usb_api_transceiver.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -567,19 +567,21 @@ void start_dma_if_possible(direction_t direction, size_t size)
567567
uint32_t dma_completed = m0_state.m4_count;
568568
uint32_t samp_offset = dma_started & USB_SAMP_BUFFER_MASK;
569569
uint32_t bulk_offset = dma_started & USB_BULK_BUFFER_MASK;
570-
uint32_t data_available, space_in_use, space_available;
570+
uint32_t data_available, space_in_use, space_available, samp_buf_margin;
571571
uint8_t *dest, *src;
572572

573573
if (direction == DIRECTION_RX) {
574574
data_available = sampling_completed - dma_started;
575575
space_in_use = usb_completed - dma_completed;
576576
space_available = USB_BULK_BUFFER_SIZE - space_in_use;
577+
samp_buf_margin = USB_SAMP_BUFFER_SIZE - data_available;
577578
src = &usb_samp_buffer[samp_offset];
578579
dest = &usb_bulk_buffer[bulk_offset];
579580
} else {
580581
data_available = usb_completed - dma_started;
581582
space_in_use = dma_started - sampling_completed;
582583
space_available = USB_SAMP_BUFFER_SIZE - space_in_use;
584+
samp_buf_margin = space_available;
583585
src = &usb_bulk_buffer[bulk_offset];
584586
dest = &usb_samp_buffer[samp_offset];
585587
}
@@ -588,9 +590,11 @@ void start_dma_if_possible(direction_t direction, size_t size)
588590
return;
589591
}
590592

591-
bool ahb_busy = !((sampling_completed ^ dma_started) & BUF_HALF_MASK);
593+
uint32_t m0_buf_half = sampling_completed & BUF_HALF_MASK;
594+
uint32_t dma_buf_half = dma_started & BUF_HALF_MASK;
595+
bool same_buf_half = m0_buf_half == dma_buf_half;
592596

593-
if (ahb_busy) {
597+
if (same_buf_half && samp_buf_margin >= (USB_SAMP_BUFFER_SIZE / 2)) {
594598
return;
595599
}
596600

0 commit comments

Comments
 (0)