From 1a3f6419eff639e003c550adc0e0de9e6a1c8839 Mon Sep 17 00:00:00 2001 From: Lori Li Date: Tue, 7 Oct 2025 18:17:51 -0700 Subject: [PATCH 1/2] Use real status for conditionals --- Adafruit_ZeroDMA.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/Adafruit_ZeroDMA.cpp b/Adafruit_ZeroDMA.cpp index 7698847..8a91b67 100644 --- a/Adafruit_ZeroDMA.cpp +++ b/Adafruit_ZeroDMA.cpp @@ -306,7 +306,11 @@ ZeroDMAstatus Adafruit_ZeroDMA::free(void) { cpu_irq_enter_critical(); // jobStatus is volatile - if (jobStatus == DMA_STATUS_BUSY) { +#ifdef __SAMD51__ + if (DMAC->Channel[channel].CHSTATUS.reg & DMAC_CHSTATUS_BUSY) { +#else + if (DMAC->CHSTATUS.reg & DMAC_CHSTATUS_BUSY) { +#endif status = DMA_STATUS_BUSY; // Can't leave when busy } else if ((channel < DMAC_CH_NUM) && (_channelMask & (1 << channel))) { // Valid in-use channel; release it @@ -341,7 +345,11 @@ ZeroDMAstatus Adafruit_ZeroDMA::startJob(void) { cpu_irq_enter_critical(); // Job status is volatile - if (jobStatus == DMA_STATUS_BUSY) { +#ifdef __SAMD51__ + if (DMAC->Channel[channel].CHSTATUS.reg & DMAC_CHSTATUS_BUSY) { +#else + if (DMAC->CHSTATUS.reg & DMAC_CHSTATUS_BUSY) { +#endif status = DMA_STATUS_BUSY; // Resource is busy } else if (channel >= DMAC_CH_NUM) { status = DMA_STATUS_ERR_NOT_INITIALIZED; // Channel not in use @@ -495,7 +503,11 @@ DmacDescriptor *Adafruit_ZeroDMA::addDescriptor(void *src, void *dst, return NULL; // Can't do while job's busy - if (jobStatus == DMA_STATUS_BUSY) +#ifdef __SAMD51__ + if (DMAC->Channel[channel].CHSTATUS.reg & DMAC_CHSTATUS_BUSY) +#else + if (DMAC->CHSTATUS.reg & DMAC_CHSTATUS_BUSY) +#endif return NULL; DmacDescriptor *desc; From 3457a382ee422d3687e33d67098dc8bd07716c20 Mon Sep 17 00:00:00 2001 From: Haoan Li Date: Thu, 9 Oct 2025 02:20:35 -0700 Subject: [PATCH 2/2] Run clang format --- Adafruit_ZeroDMA.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Adafruit_ZeroDMA.cpp b/Adafruit_ZeroDMA.cpp index 8a91b67..5f20209 100644 --- a/Adafruit_ZeroDMA.cpp +++ b/Adafruit_ZeroDMA.cpp @@ -502,7 +502,7 @@ DmacDescriptor *Adafruit_ZeroDMA::addDescriptor(void *src, void *dst, if (channel >= DMAC_CH_NUM) return NULL; - // Can't do while job's busy + // Can't do while job's busy #ifdef __SAMD51__ if (DMAC->Channel[channel].CHSTATUS.reg & DMAC_CHSTATUS_BUSY) #else