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