sleeprestore.s 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. .syntax unified
  2. .cpu cortex-m4
  3. .thumb
  4. .text
  5. .align 2
  6. @ global variable with the backup registers
  7. .extern vault_arm_registers
  8. @ global function that performs the wake up actions
  9. .extern pyb_sleep_suspend_exit
  10. @ uint sleep_store(void)
  11. .global sleep_store
  12. .thumb
  13. .thumb_func
  14. .type sleep_store, %function
  15. sleep_store:
  16. dsb
  17. isb
  18. push {r0-r12, lr}
  19. ldr r1, =vault_arm_registers
  20. mrs r0, msp
  21. str r0, [r1]
  22. mrs r0, psp
  23. str r0, [r1, #4]
  24. mrs r0, primask
  25. str r0, [r1, #12]
  26. mrs r0, faultmask
  27. str r0, [r1, #16]
  28. mrs r0, basepri
  29. str r0, [r1, #20]
  30. mrs r0, control
  31. str r0, [r1, #24]
  32. dsb
  33. isb
  34. bx lr
  35. @ uint sleep_restore(void)
  36. .global sleep_restore
  37. .thumb
  38. .thumb_func
  39. .type sleep_restore, %function
  40. sleep_restore:
  41. dsb
  42. isb
  43. mrs r0, msp
  44. msr psp, r0
  45. ldr r1, =vault_arm_registers
  46. ldr r0, [r1, #24]
  47. msr control, r0
  48. ldr r0, [r1]
  49. msr msp, r0
  50. ldr r0, [r1, #12]
  51. msr primask, r0
  52. ldr r0, [r1, #16]
  53. msr faultmask, r0
  54. ldr r0, [r1, #20]
  55. msr basepri, r0
  56. dsb
  57. isb
  58. bl pyb_sleep_suspend_exit