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