From 7245c79dce9ee107b23fa82d8028c9319a2441b6 Mon Sep 17 00:00:00 2001 From: blckmn Date: Tue, 30 Jan 2018 04:11:57 +1100 Subject: [PATCH] Fixes error in DMA irq handling --- src/main/drivers/dma.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/drivers/dma.h b/src/main/drivers/dma.h index 2b17b642e..de77d9d1a 100644 --- a/src/main/drivers/dma.h +++ b/src/main/drivers/dma.h @@ -89,8 +89,9 @@ typedef enum { } #define DEFINE_DMA_IRQ_HANDLER(d, s, i) void DMA ## d ## _Stream ## s ## _IRQHandler(void) {\ - if (dmaDescriptors[i].irqHandlerCallback)\ - dmaDescriptors[i].irqHandlerCallback(&dmaDescriptors[i]);\ + const uint8_t index = DMA_IDENTIFIER_TO_INDEX(i); \ + if (dmaDescriptors[index].irqHandlerCallback)\ + dmaDescriptors[index].irqHandlerCallback(&dmaDescriptors[index]);\ } #define DMA_CLEAR_FLAG(d, flag) if (d->flagsShift > 31) d->dma->HIFCR = (flag << (d->flagsShift - 32)); else d->dma->LIFCR = (flag << d->flagsShift) @@ -149,8 +150,9 @@ typedef enum { } #define DEFINE_DMA_IRQ_HANDLER(d, c, i) void DMA ## d ## _Channel ## c ## _IRQHandler(void) {\ - if (dmaDescriptors[i].irqHandlerCallback)\ - dmaDescriptors[i].irqHandlerCallback(&dmaDescriptors[i]);\ + const uint8_t index = DMA_IDENTIFIER_TO_INDEX(i); \ + if (dmaDescriptors[index].irqHandlerCallback)\ + dmaDescriptors[index].irqHandlerCallback(&dmaDescriptors[index]);\ } #define DMA_CLEAR_FLAG(d, flag) d->dma->IFCR = (flag << d->flagsShift)