micropython/cc3200/util/sleeprestore.s
danicampora 9e44383e3f cc3200: Add power management framework. Add mpcallback class.
Supports suspend and hibernate modes. Waking is possible throug GPIO
and WLAN.
The mpcallback class is generic and can be reused by other classes.
2015-03-11 17:00:33 +01:00

62 lines
1.2 KiB
ArmAsm

.syntax unified
.cpu cortex-m4
.thumb
.text
.align 2
@ global variable with the backup registers
.extern vault_arm_registers
@ global function that performs the wake up actions
.extern pybsleep_suspend_exit
@ uint sleep_store(void)
.global sleep_store
.thumb
.thumb_func
.type sleep_store, %function
sleep_store:
dsb
isb
push {r0-r12, lr}
ldr r1, =vault_arm_registers
mrs r0, msp
str r0, [r1]
mrs r0, psp
str r0, [r1, #4]
mrs r0, primask
str r0, [r1, #12]
mrs r0, faultmask
str r0, [r1, #16]
mrs r0, basepri
str r0, [r1, #20]
mrs r0, control
str r0, [r1, #24]
dsb
isb
bx lr
@ uint sleep_restore(void)
.global sleep_restore
.thumb
.thumb_func
.type sleep_restore, %function
sleep_restore:
dsb
isb
mrs r0, msp
msr psp, r0
ldr r1, =vault_arm_registers
ldr r0, [r1, #24]
msr control, r0
ldr r0, [r1]
msr msp, r0
ldr r0, [r1, #12]
msr primask, r0
ldr r0, [r1, #16]
msr faultmask, r0
ldr r0, [r1, #20]
msr basepri, r0
dsb
isb
bl pybsleep_suspend_exit