Skip to content

Commit 641e3a8

Browse files
committed
Merge pull request ARMmbed#1891 from c1728p9/restore_interrupts
KSDK2 - restore interrupts in InstallIRQHandler
2 parents 24e767c + 9d7ca3e commit 641e3a8

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

hal/targets/hal/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_K22F/drivers/fsl_common.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ void InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler)
7777
uint32_t __RAM_VECTOR_TABLE_SIZE = (uint32_t)(__RAM_VECTOR_TABLE_SIZE_BYTES);
7878
#endif /* defined(__CC_ARM) */
7979
uint32_t n;
80+
uint32_t interrupts_disabled;
8081

82+
interrupts_disabled = __get_PRIMASK();
8183
__disable_irq();
8284
if (SCB->VTOR != (uint32_t)__VECTOR_RAM)
8385
{
@@ -93,5 +95,7 @@ void InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler)
9395
/* make sure the __VECTOR_RAM is noncachable */
9496
__VECTOR_RAM[irq + 16] = irqHandler;
9597

96-
__enable_irq();
98+
if (!interrupts_disabled) {
99+
__enable_irq();
100+
}
97101
}

hal/targets/hal/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_K64F/drivers/fsl_common.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ void InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler)
7777
uint32_t __RAM_VECTOR_TABLE_SIZE = (uint32_t)(__RAM_VECTOR_TABLE_SIZE_BYTES);
7878
#endif /* defined(__CC_ARM) */
7979
uint32_t n;
80+
uint32_t interrupts_disabled;
8081

82+
interrupts_disabled = __get_PRIMASK();
8183
__disable_irq();
8284
if (SCB->VTOR != (uint32_t)__VECTOR_RAM)
8385
{
@@ -93,5 +95,7 @@ void InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler)
9395
/* make sure the __VECTOR_RAM is noncachable */
9496
__VECTOR_RAM[irq + 16] = irqHandler;
9597

96-
__enable_irq();
98+
if (!interrupts_disabled) {
99+
__enable_irq();
100+
}
97101
}

hal/targets/hal/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL27Z/drivers/fsl_common.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ void InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler)
7777
uint32_t __RAM_VECTOR_TABLE_SIZE = (uint32_t)(__RAM_VECTOR_TABLE_SIZE_BYTES);
7878
#endif /* defined(__CC_ARM) */
7979
uint32_t n;
80+
uint32_t interrupts_disabled;
8081

82+
interrupts_disabled = __get_PRIMASK();
8183
__disable_irq();
8284
if (SCB->VTOR != (uint32_t)__VECTOR_RAM)
8385
{
@@ -93,5 +95,7 @@ void InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler)
9395
/* make sure the __VECTOR_RAM is noncachable */
9496
__VECTOR_RAM[irq + 16] = irqHandler;
9597

96-
__enable_irq();
98+
if (!interrupts_disabled) {
99+
__enable_irq();
100+
}
97101
}

0 commit comments

Comments
 (0)