From 6eead4d72809e24f931d2a52484057811a601df8 Mon Sep 17 00:00:00 2001
From: Emilio Corigliano <emilio.corigliano@skywarder.eu>
Date: Fri, 15 Mar 2024 14:52:13 +0100
Subject: [PATCH] [ExternalInterrupts] Updated the IRQs so that no C code is in
 the naked interrupt handlers

---
 .../drivers/interrupt/external_interrupts.cpp | 35 +++++++++++++------
 1 file changed, 25 insertions(+), 10 deletions(-)

diff --git a/src/shared/drivers/interrupt/external_interrupts.cpp b/src/shared/drivers/interrupt/external_interrupts.cpp
index 985a7b006..350ea9a85 100644
--- a/src/shared/drivers/interrupt/external_interrupts.cpp
+++ b/src/shared/drivers/interrupt/external_interrupts.cpp
@@ -159,11 +159,14 @@ void __attribute__((weak)) EXTI15_IRQHandlerImpl()
  * Implementation of the IRQHandler that is triggered when
  * external interrupt 0 is raised.
  */
+void __attribute__((used)) EXTI0_IRQHandlerImplBase(){
+    EXTI->PR = EXTI_PR_PR0;
+    EXTI0_IRQHandlerImpl();
+}
 void __attribute__((naked)) EXTI0_IRQHandler()
 {
     saveContext();
-    EXTI->PR = EXTI_PR_PR0;
-    asm volatile("bl _Z20EXTI0_IRQHandlerImplv");
+    asm volatile("bl _Z24EXTI0_IRQHandlerImplBasev");
     restoreContext();
 }
 
@@ -171,11 +174,14 @@ void __attribute__((naked)) EXTI0_IRQHandler()
  * Implementation of the IRQHandler that is triggered when
  * external interrupt 1 is raised.
  */
+void __attribute__((used)) EXTI1_IRQHandlerImplBase(){
+    EXTI->PR = EXTI_PR_PR1;
+    EXTI1_IRQHandlerImpl();
+}
 void __attribute__((naked)) EXTI1_IRQHandler()
 {
     saveContext();
-    EXTI->PR = EXTI_PR_PR1;
-    asm volatile("bl _Z20EXTI1_IRQHandlerImplv");
+    asm volatile("bl _Z24EXTI1_IRQHandlerImplBasev");
     restoreContext();
 }
 
@@ -183,11 +189,14 @@ void __attribute__((naked)) EXTI1_IRQHandler()
  * Implementation of the IRQHandler that is triggered when
  * external interrupt 2 is raised.
  */
+void __attribute__((used)) EXTI2_IRQHandlerImplBase(){
+    EXTI->PR = EXTI_PR_PR2;
+    EXTI2_IRQHandlerImpl();
+}
 void __attribute__((naked)) EXTI2_IRQHandler()
 {
     saveContext();
-    EXTI->PR = EXTI_PR_PR2;
-    asm volatile("bl _Z20EXTI2_IRQHandlerImplv");
+    asm volatile("bl _Z24EXTI2_IRQHandlerImplBasev");
     restoreContext();
 }
 
@@ -195,11 +204,14 @@ void __attribute__((naked)) EXTI2_IRQHandler()
  * Implementation of the IRQHandler that is triggered when
  * external interrupt 3 is raised.
  */
+void __attribute__((used)) EXTI3_IRQHandlerImplBase(){
+    EXTI->PR = EXTI_PR_PR3;
+    EXTI3_IRQHandlerImpl();
+}
 void __attribute__((naked)) EXTI3_IRQHandler()
 {
     saveContext();
-    EXTI->PR = EXTI_PR_PR3;
-    asm volatile("bl _Z20EXTI3_IRQHandlerImplv");
+    asm volatile("bl _Z24EXTI3_IRQHandlerImplBasev");
     restoreContext();
 }
 
@@ -207,11 +219,14 @@ void __attribute__((naked)) EXTI3_IRQHandler()
  * Implementation of the IRQHandler that is triggered when
  * external interrupt 4 is raised.
  */
+void __attribute__((used)) EXTI4_IRQHandlerImplBase(){
+    EXTI->PR = EXTI_PR_PR4;
+    EXTI4_IRQHandlerImpl();
+}
 void __attribute__((naked)) EXTI4_IRQHandler()
 {
     saveContext();
-    EXTI->PR = EXTI_PR_PR4;
-    asm volatile("bl _Z20EXTI4_IRQHandlerImplv");
+    asm volatile("bl _Z24EXTI4_IRQHandlerImplBasev");
     restoreContext();
 }
 
-- 
GitLab