From ae38be5c93c8360d0d9f2f3058f313b0d9c59381 Mon Sep 17 00:00:00 2001 From: Fabrizio Monti <fabrizio.monti@skywarder.eu> Date: Mon, 9 Dec 2024 13:45:16 +0100 Subject: [PATCH] [DMA] Updated IRQ handlers, commenting the ones already defined in miosix and disabling the corresponding streams. --- src/shared/drivers/dma/DMA.cpp | 61 +++++++++++++++++++++------------- src/shared/drivers/dma/DMA.h | 11 ++++-- 2 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/shared/drivers/dma/DMA.cpp b/src/shared/drivers/dma/DMA.cpp index 653401f22..5ee1dc131 100644 --- a/src/shared/drivers/dma/DMA.cpp +++ b/src/shared/drivers/dma/DMA.cpp @@ -42,7 +42,8 @@ void __attribute__((used)) DMA1_Stream0_IRQImpl() Boardcore::DMAStreamId::DMA1_Str0); } -// Commented because already used elsewhere by miosix +// TODO: decide how to handle this situation +// Commented because already defined elsewhere by miosix // void __attribute__((naked)) DMA1_Stream1_IRQHandler() // { // saveContext(); @@ -51,7 +52,8 @@ void __attribute__((used)) DMA1_Stream0_IRQImpl() // } // void __attribute__((used)) DMA1_Stream1_IRQImpl() // { -// Boardcore::DMADriver::instance().IRQhandleInterrupt(Boardcore::DMAStreamId::DMA1_Str1); +// Boardcore::DMADriver::instance().IRQhandleInterrupt( +// Boardcore::DMAStreamId::DMA1_Str1); // } void __attribute__((naked)) DMA1_Stream2_IRQHandler() @@ -67,7 +69,8 @@ void __attribute__((used)) DMA1_Stream2_IRQImpl() Boardcore::DMAStreamId::DMA1_Str2); } -// Commented because already used elsewhere by miosix +// TODO: decide how to handle this situation +// Commented because already defined elsewhere by miosix // void __attribute__((naked)) DMA1_Stream3_IRQHandler() // { // saveContext(); @@ -76,7 +79,8 @@ void __attribute__((used)) DMA1_Stream2_IRQImpl() // } // void __attribute__((used)) DMA1_Stream3_IRQImpl() // { -// Boardcore::DMADriver::instance().IRQhandleInterrupt(Boardcore::DMAStreamId::DMA1_Str3); +// Boardcore::DMADriver::instance().IRQhandleInterrupt( +// Boardcore::DMAStreamId::DMA1_Str3); // } void __attribute__((naked)) DMA1_Stream4_IRQHandler() @@ -170,14 +174,19 @@ void __attribute__((used)) DMA2_Stream2_IRQImpl() Boardcore::DMAStreamId::DMA2_Str2); } -// void __attribute__((naked)) DMA2_Stream3_IRQHandler() { +// TODO: decide how to handle this situation +// Commented because already defined elsewhere by miosix +// void __attribute__((naked)) DMA2_Stream3_IRQHandler() +// { // saveContext(); // asm volatile("bl _Z20DMA2_Stream3_IRQImplv"); // restoreContext(); // } -// void __attribute__((used)) DMA2_Stream3_IRQImpl() { -// DMADriver::instance().IRQhandleInterrupt(DMAStreamId::DMA2_Str3); +// void __attribute__((used)) DMA2_Stream3_IRQImpl() +// { +// Boardcore::DMADriver::instance().IRQhandleInterrupt( +// Boardcore::DMAStreamId::DMA2_Str3); // } void __attribute__((naked)) DMA2_Stream4_IRQHandler() @@ -193,15 +202,18 @@ void __attribute__((used)) DMA2_Stream4_IRQImpl() Boardcore::DMAStreamId::DMA2_Str4); } -// void __attribute__((naked)) DMA2_Stream5_IRQHandler() { -// saveContext(); -// asm volatile("bl _Z20DMA2_Stream5_IRQImplv"); -// restoreContext(); -// } +void __attribute__((naked)) DMA2_Stream5_IRQHandler() +{ + saveContext(); + asm volatile("bl _Z20DMA2_Stream5_IRQImplv"); + restoreContext(); +} -// void __attribute__((used)) DMA2_Stream5_IRQImpl() { -// DMADriver::instance().IRQhandleInterrupt(DMAStreamId::DMA2_Str5); -// } +void __attribute__((used)) DMA2_Stream5_IRQImpl() +{ + Boardcore::DMADriver::instance().IRQhandleInterrupt( + Boardcore::DMAStreamId::DMA2_Str5); +} void __attribute__((naked)) DMA2_Stream6_IRQHandler() { @@ -216,15 +228,18 @@ void __attribute__((used)) DMA2_Stream6_IRQImpl() Boardcore::DMAStreamId::DMA2_Str6); } -// void __attribute__((naked)) DMA2_Stream7_IRQHandler() { -// saveContext(); -// asm volatile("bl _Z20DMA2_Stream7_IRQImplv"); -// restoreContext(); -// } +void __attribute__((naked)) DMA2_Stream7_IRQHandler() +{ + saveContext(); + asm volatile("bl _Z20DMA2_Stream7_IRQImplv"); + restoreContext(); +} -// void __attribute__((used)) DMA2_Stream7_IRQImpl() { -// DMADriver::instance().IRQhandleInterrupt(DMAStreamId::DMA2_Str7); -// } +void __attribute__((used)) DMA2_Stream7_IRQImpl() +{ + Boardcore::DMADriver::instance().IRQhandleInterrupt( + Boardcore::DMAStreamId::DMA2_Str7); +} namespace Boardcore { diff --git a/src/shared/drivers/dma/DMA.h b/src/shared/drivers/dma/DMA.h index a0262f0e7..e36a70d90 100644 --- a/src/shared/drivers/dma/DMA.h +++ b/src/shared/drivers/dma/DMA.h @@ -44,10 +44,15 @@ namespace Boardcore enum class DMAStreamId : uint8_t { + // TODO: some streams are commented because the + // corresponding irq handler is already defined + // by miosix. For now those streams are not usable, + // decide how to handle this situation. + DMA1_Str0 = 0, - DMA1_Str1 = 1, + // DMA1_Str1 = 1, DMA1_Str2 = 2, - DMA1_Str3 = 3, + // DMA1_Str3 = 3, DMA1_Str4 = 4, DMA1_Str5 = 5, DMA1_Str6 = 6, @@ -55,7 +60,7 @@ enum class DMAStreamId : uint8_t DMA2_Str0 = 8, DMA2_Str1 = 9, DMA2_Str2 = 10, - DMA2_Str3 = 11, + // DMA2_Str3 = 11, DMA2_Str4 = 12, DMA2_Str5 = 13, DMA2_Str6 = 14, -- GitLab