From 08c7c57cef0c0662c6b91e714ee80fc5171f10ca Mon Sep 17 00:00:00 2001 From: Kizarm Date: Tue, 28 Jan 2025 15:06:43 +0100 Subject: [PATCH] correct DMA --- V203F6P6/termistor/adc.cpp | 15 +++++++++++---- V203F6P6/ws2812b/spiclass.cpp | 3 +++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/V203F6P6/termistor/adc.cpp b/V203F6P6/termistor/adc.cpp index 3c2f29e..6175fd5 100644 --- a/V203F6P6/termistor/adc.cpp +++ b/V203F6P6/termistor/adc.cpp @@ -9,10 +9,17 @@ extern "C" { } void DMA1_Channel1_IRQHandler( void ) { DMA1_Type::INTFR_DEF state (DMA1.INTFR); - DMA1.INTFCR.R = state.R; // clear all - if (!pInstance) return; - if (state.B.HTIF1 != RESET) pInstance->send (false); - else if (state.B.TCIF1 != RESET) pInstance->send (true); + if (state.B.GIF1 != RESET) { // Zřejmě zbytečné, ale pokud používám víc DMA + DMA1.INTFCR.B.CGIF1 = SET; // kanálů, pak to tak má být. + } else return; // Událost nevznikla pro kanál 1. + if (state.B.HTIF1 != RESET) { + DMA1.INTFCR.B.CHTIF1 = SET; + if (pInstance) pInstance->send (false); + } + if (state.B.TCIF1 != RESET) { + DMA1.INTFCR.B.CTCIF1 = SET; + if (pInstance) pInstance->send (true); + } } static inline void EnableClock (void) noexcept { diff --git a/V203F6P6/ws2812b/spiclass.cpp b/V203F6P6/ws2812b/spiclass.cpp index 291e26e..d5c0265 100644 --- a/V203F6P6/ws2812b/spiclass.cpp +++ b/V203F6P6/ws2812b/spiclass.cpp @@ -41,6 +41,9 @@ static void InitPins () noexcept { void SpiClass::drq() { if (!driver) return; DMA1_Type::INTFR_DEF state (DMA1.INTFR); + if (state.B.GIF3 != RESET) { // Zřejmě zbytečné, ale pokud používám víc DMA + DMA1.INTFCR.B.CGIF3 = SET; // kanálů, pak to tak má být. + } else return; // Událost nevznikla pro kanál 1. /*if (state.B.HTIF3) { DMA1.INTFCR.B.CHTIF3 = SET; // clear half } */