mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-04 02:57:46 +00:00
arm: allow nesting in DisableInterrupts and EnableInterrupts
This finally fixes a TODO left in the code.
This commit is contained in:
committed by
Ron Evans
parent
6389e45d99
commit
23e88bfb15
+9
-10
@@ -191,22 +191,21 @@ func SetPriority(irq uint32, priority uint32) {
|
||||
NVIC.IPR[regnum].Set((uint32(NVIC.IPR[regnum].Get()) &^ mask) | priority)
|
||||
}
|
||||
|
||||
// DisableInterrupts disables all interrupts, and returns the old state.
|
||||
//
|
||||
// TODO: it doesn't actually return the old state, meaning that it cannot be
|
||||
// nested.
|
||||
// DisableInterrupts disables all interrupts, and returns the old interrupt
|
||||
// state.
|
||||
func DisableInterrupts() uintptr {
|
||||
Asm("cpsid if")
|
||||
return 0
|
||||
return AsmFull(`
|
||||
mrs {}, PRIMASK
|
||||
cpsid if
|
||||
`, nil)
|
||||
}
|
||||
|
||||
// EnableInterrupts enables all interrupts again. The value passed in must be
|
||||
// the mask returned by DisableInterrupts.
|
||||
//
|
||||
// TODO: it doesn't actually use the old state, meaning that it cannot be
|
||||
// nested.
|
||||
func EnableInterrupts(mask uintptr) {
|
||||
Asm("cpsie if")
|
||||
AsmFull("msr PRIMASK, {mask}", map[string]interface{}{
|
||||
"mask": mask,
|
||||
})
|
||||
}
|
||||
|
||||
// SystemReset performs a hard system reset.
|
||||
|
||||
Reference in New Issue
Block a user