Ver Fonte

[libcpu][arm][cortex-m33] allows rewrite to interrupt enable/disable api to support independent interrupts management

Evlers há 8 horas atrás
pai
commit
ad205d2bf3

+ 8 - 1
libcpu/arm/cortex-m33/context_gcc.S

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2006-2018, RT-Thread Development Team
+ * Copyright (c) 2006-2026, RT-Thread Development Team
  *
  *
  * SPDX-License-Identifier: Apache-2.0
  * SPDX-License-Identifier: Apache-2.0
  *
  *
@@ -10,6 +10,7 @@
  * 2013-06-18     aozima       add restore MSP feature.
  * 2013-06-18     aozima       add restore MSP feature.
  * 2013-06-23     aozima       support lazy stack optimized.
  * 2013-06-23     aozima       support lazy stack optimized.
  * 2018-07-24     aozima       enhancement hard fault exception handler.
  * 2018-07-24     aozima       enhancement hard fault exception handler.
+ * 2026-05-19     Evlers       allows rewrite to interrupt enable/disable api to support independent interrupts management
  */
  */
 
 
 /**
 /**
@@ -34,6 +35,7 @@
  * rt_base_t rt_hw_interrupt_disable();
  * rt_base_t rt_hw_interrupt_disable();
  */
  */
 .global rt_hw_interrupt_disable
 .global rt_hw_interrupt_disable
+.weak rt_hw_interrupt_disable
 .type rt_hw_interrupt_disable, %function
 .type rt_hw_interrupt_disable, %function
 rt_hw_interrupt_disable:
 rt_hw_interrupt_disable:
     MRS     r0, PRIMASK
     MRS     r0, PRIMASK
@@ -44,6 +46,7 @@ rt_hw_interrupt_disable:
  * void rt_hw_interrupt_enable(rt_base_t level);
  * void rt_hw_interrupt_enable(rt_base_t level);
  */
  */
 .global rt_hw_interrupt_enable
 .global rt_hw_interrupt_enable
+.weak rt_hw_interrupt_enable
 .type rt_hw_interrupt_enable, %function
 .type rt_hw_interrupt_enable, %function
 rt_hw_interrupt_enable:
 rt_hw_interrupt_enable:
     MSR     PRIMASK, r0
     MSR     PRIMASK, r0
@@ -258,6 +261,10 @@ rt_hw_context_switch_to:
     CPSIE   F
     CPSIE   F
     CPSIE   I
     CPSIE   I
 
 
+    /* clear the BASEPRI register to disable masking priority */
+    MOV     r0, #0x00
+    MSR     BASEPRI, r0
+
     /* ensure PendSV exception taken place before subsequent operation */
     /* ensure PendSV exception taken place before subsequent operation */
     DSB
     DSB
     ISB
     ISB

+ 8 - 3
libcpu/arm/cortex-m33/context_iar.S

@@ -1,5 +1,5 @@
 ;/*
 ;/*
-; * Copyright (c) 2006-2018, RT-Thread Development Team
+; * Copyright (c) 2006-2026, RT-Thread Development Team
 ; *
 ; *
 ; * SPDX-License-Identifier: Apache-2.0
 ; * SPDX-License-Identifier: Apache-2.0
 ; *
 ; *
@@ -11,6 +11,7 @@
 ; * 2013-06-18     aozima       add restore MSP feature.
 ; * 2013-06-18     aozima       add restore MSP feature.
 ; * 2013-06-23     aozima       support lazy stack optimized.
 ; * 2013-06-23     aozima       support lazy stack optimized.
 ; * 2018-07-24     aozima       enhancement hard fault exception handler.
 ; * 2018-07-24     aozima       enhancement hard fault exception handler.
+; * 2026-05-19     Evlers       allows rewrite to interrupt enable/disable api to support independent interrupts management
 ; */
 ; */
 
 
 ;/**
 ;/**
@@ -39,7 +40,7 @@ NVIC_PENDSVSET  EQU     0x10000000               ; value to trigger PendSV excep
 ;/*
 ;/*
 ; * rt_base_t rt_hw_interrupt_disable();
 ; * rt_base_t rt_hw_interrupt_disable();
 ; */
 ; */
-    EXPORT rt_hw_interrupt_disable
+    PUBWEAK rt_hw_interrupt_disable
 rt_hw_interrupt_disable:
 rt_hw_interrupt_disable:
     MRS     r0, PRIMASK
     MRS     r0, PRIMASK
     CPSID   I
     CPSID   I
@@ -48,7 +49,7 @@ rt_hw_interrupt_disable:
 ;/*
 ;/*
 ; * void rt_hw_interrupt_enable(rt_base_t level);
 ; * void rt_hw_interrupt_enable(rt_base_t level);
 ; */
 ; */
-    EXPORT  rt_hw_interrupt_enable
+    PUBWEAK  rt_hw_interrupt_enable
 rt_hw_interrupt_enable:
 rt_hw_interrupt_enable:
     MSR     PRIMASK, r0
     MSR     PRIMASK, r0
     BX      LR
     BX      LR
@@ -253,6 +254,10 @@ rt_hw_context_switch_to:
     CPSIE   F
     CPSIE   F
     CPSIE   I
     CPSIE   I
 
 
+    ; clear the BASEPRI register to disable masking priority
+    MOV     r0, #0x00
+    MSR     BASEPRI, r0
+
     ; ensure PendSV exception taken place before subsequent operation
     ; ensure PendSV exception taken place before subsequent operation
     DSB
     DSB
     ISB
     ISB

+ 8 - 3
libcpu/arm/cortex-m33/context_rvds.S

@@ -1,5 +1,5 @@
 ;/*
 ;/*
-;* Copyright (c) 2006-2018, RT-Thread Development Team
+;* Copyright (c) 2006-2026, RT-Thread Development Team
 ;*
 ;*
 ;* SPDX-License-Identifier: Apache-2.0
 ;* SPDX-License-Identifier: Apache-2.0
 ;*
 ;*
@@ -10,6 +10,7 @@
 ; * 2013-06-18     aozima       add restore MSP feature.
 ; * 2013-06-18     aozima       add restore MSP feature.
 ; * 2013-06-23     aozima       support lazy stack optimized.
 ; * 2013-06-23     aozima       support lazy stack optimized.
 ; * 2018-07-24     aozima       enhancement hard fault exception handler.
 ; * 2018-07-24     aozima       enhancement hard fault exception handler.
+; * 2026-05-19     Evlers       allows rewrite to interrupt enable/disable api to support independent interrupts management
 ; */
 ; */
 
 
 ;/**
 ;/**
@@ -39,7 +40,7 @@ NVIC_PENDSVSET  EQU     0x10000000               ; value to trigger PendSV excep
 ; * rt_base_t rt_hw_interrupt_disable();
 ; * rt_base_t rt_hw_interrupt_disable();
 ; */
 ; */
 rt_hw_interrupt_disable    PROC
 rt_hw_interrupt_disable    PROC
-    EXPORT  rt_hw_interrupt_disable
+    EXPORT  rt_hw_interrupt_disable [WEAK]
     MRS     r0, PRIMASK
     MRS     r0, PRIMASK
     CPSID   I
     CPSID   I
     BX      LR
     BX      LR
@@ -49,7 +50,7 @@ rt_hw_interrupt_disable    PROC
 ; * void rt_hw_interrupt_enable(rt_base_t level);
 ; * void rt_hw_interrupt_enable(rt_base_t level);
 ; */
 ; */
 rt_hw_interrupt_enable    PROC
 rt_hw_interrupt_enable    PROC
-    EXPORT  rt_hw_interrupt_enable
+    EXPORT  rt_hw_interrupt_enable [WEAK]
     MSR     PRIMASK, r0
     MSR     PRIMASK, r0
     BX      LR
     BX      LR
     ENDP
     ENDP
@@ -254,6 +255,10 @@ rt_hw_context_switch_to    PROC
     CPSIE   F
     CPSIE   F
     CPSIE   I
     CPSIE   I
 
 
+    ; clear the BASEPRI register to disable masking priority
+    MOV     r0, #0x00
+    MSR     BASEPRI, r0
+
     ; ensure PendSV exception taken place before subsequent operation
     ; ensure PendSV exception taken place before subsequent operation
     DSB
     DSB
     ISB
     ISB