summaryrefslogtreecommitdiff
path: root/src/FreeRTOS
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2021-02-14 15:37:28 (GMT)
committerGitea <gitea@fake.local>2021-02-14 15:37:28 (GMT)
commit9d7955b6c0128a72475742495dabb57134dbe56d (patch)
tree27bdf0ae697453f31e0fa6952d3bf0ecbea48c68 /src/FreeRTOS
parentf534fb0356762122842ea49b481619cb963a5d27 (diff)
parent324c7dab326ea23a6c8502bbb8c6e9b9d87a839f (diff)
Merge branch 'develop' of JF/PineTime into master
Diffstat (limited to 'src/FreeRTOS')
-rw-r--r--src/FreeRTOS/port_cmsis.c20
-rw-r--r--src/FreeRTOS/portmacro_cmsis.h6
2 files changed, 24 insertions, 2 deletions
diff --git a/src/FreeRTOS/port_cmsis.c b/src/FreeRTOS/port_cmsis.c
index 2fbec43..d8850b5 100644
--- a/src/FreeRTOS/port_cmsis.c
+++ b/src/FreeRTOS/port_cmsis.c
@@ -354,4 +354,24 @@ static void vPortEnableVFP( void )
configASSERT( NVIC_GetPriorityGrouping() <= ulMaxPRIGROUPValue );
}
+uint32_t ulSetInterruptMaskFromISR( void )
+{
+ __asm volatile (
+ " mrs r0, PRIMASK \n"
+ " cpsid i \n"
+ " bx lr "
+ ::: "memory"
+ );
+}
+/*-----------------------------------------------------------*/
+
+void vClearInterruptMaskFromISR( __attribute__( ( unused ) ) uint32_t ulMask )
+{
+ __asm volatile (
+ " msr PRIMASK, r0 \n"
+ " bx lr "
+ ::: "memory"
+ );
+}
+
#endif /* configASSERT_DEFINED */
diff --git a/src/FreeRTOS/portmacro_cmsis.h b/src/FreeRTOS/portmacro_cmsis.h
index 0497538..e6e0915 100644
--- a/src/FreeRTOS/portmacro_cmsis.h
+++ b/src/FreeRTOS/portmacro_cmsis.h
@@ -104,8 +104,10 @@ typedef unsigned long UBaseType_t;
/* Critical section management. */
extern void vPortEnterCritical( void );
extern void vPortExitCritical( void );
-#define portSET_INTERRUPT_MASK_FROM_ISR() ulPortRaiseBASEPRI()
-#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x)
+extern uint32_t ulSetInterruptMaskFromISR( void ) __attribute__( ( naked ) );
+extern void vClearInterruptMaskFromISR( uint32_t ulMask ) __attribute__( ( naked ) );
+#define portSET_INTERRUPT_MASK_FROM_ISR() ulSetInterruptMaskFromISR()
+#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vClearInterruptMaskFromISR( x )
#define portDISABLE_INTERRUPTS() __asm volatile ( " cpsid i " ::: "memory" )
#define portENABLE_INTERRUPTS() __asm volatile ( " cpsie i " ::: "memory" )
#define portENTER_CRITICAL() vPortEnterCritical()