101 lines
2.5 KiB
ArmAsm
101 lines
2.5 KiB
ArmAsm
/***************************************************************************
|
|
*
|
|
* Copyright 2015-2020 BES.
|
|
* All rights reserved. All unpublished rights reserved.
|
|
*
|
|
* No part of this work may be used or reproduced in any form or by any
|
|
* means, or stored in a database or retrieval system, without prior written
|
|
* permission of BES.
|
|
*
|
|
* Use of this work is governed by a license granted by BES.
|
|
* This work contains confidential and proprietary information of
|
|
* BES. which is protected by copyright, trade secret,
|
|
* trademark and other intellectual property rights.
|
|
*
|
|
****************************************************************************/
|
|
|
|
/*
|
|
=========================================================================
|
|
Core Sleep Power Down and Wakeup Power Up Helper Functions
|
|
=========================================================================
|
|
*/
|
|
|
|
#include "cmsis.h"
|
|
|
|
.syntax unified
|
|
|
|
#ifdef CORE_SLEEP_POWER_DOWN
|
|
|
|
#ifdef ROM_BUILD
|
|
.section .bss.core_sleep_stack
|
|
#else
|
|
.section .sram_bss.core_sleep_stack
|
|
#endif
|
|
.align 2
|
|
core_sleep_stack:
|
|
.space 4
|
|
|
|
#ifdef ROM_BUILD
|
|
.section .text.hal_sleep_core_power_down, "ax", %progbits
|
|
#else
|
|
.section .sram_text.hal_sleep_core_power_down, "ax", %progbits
|
|
#endif
|
|
.thumb
|
|
.thumb_func
|
|
.align 2
|
|
.globl hal_sleep_core_power_down
|
|
.type hal_sleep_core_power_down, %function
|
|
hal_sleep_core_power_down:
|
|
|
|
ldr r3, =core_sleep_stack
|
|
push {r4-r12,lr}
|
|
#ifdef __ARM_ARCH_8M_MAIN__
|
|
mrs r0, msplim
|
|
push {r0,r1}
|
|
#endif
|
|
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
|
|
ldr r1, =0xE000EF34
|
|
ldr r0, [r1] /* Load FPCCR */
|
|
bic r0, #1 /* Clear LSPACT (Lazy state) */
|
|
str r0, [r1] /* Store FPCCR */
|
|
#endif
|
|
/* TODO: Save FPU registers? */
|
|
str sp, [r3]
|
|
bl hal_psc_core_auto_power_down
|
|
.pd_loop:
|
|
b .pd_loop
|
|
|
|
.pool
|
|
.size hal_sleep_core_power_down, . - hal_sleep_core_power_down
|
|
|
|
|
|
#ifdef ROM_BUILD
|
|
.section .text.hal_sleep_core_power_up, "ax", %progbits
|
|
#else
|
|
.section .sram_text.hal_sleep_core_power_up, "ax", %progbits
|
|
#endif
|
|
.thumb
|
|
.thumb_func
|
|
.align 2
|
|
.globl hal_sleep_core_power_up
|
|
.type hal_sleep_core_power_up, %function
|
|
hal_sleep_core_power_up:
|
|
|
|
ldr r3, =core_sleep_stack
|
|
ldr sp, [r3]
|
|
isb
|
|
/* TODO: Restore FPU registers? */
|
|
#ifdef __ARM_ARCH_8M_MAIN__
|
|
pop {r0,r1}
|
|
msr msplim, r0
|
|
#endif
|
|
pop {r4-r12,lr}
|
|
bx lr
|
|
|
|
.pool
|
|
.size hal_sleep_core_power_up, . - hal_sleep_core_power_up
|
|
|
|
#endif
|
|
|
|
.end
|