mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
Anna Bridge
Date:
Fri Jun 22 16:45:37 2018 +0100
Revision:
186:707f6e361f3e
Parent:
169:e3b6fe271b81
mbed-dev library. Release version 162

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 154:37f96f9d4de2 1 /* mbed Microcontroller Library
<> 154:37f96f9d4de2 2 * Copyright (c) 2006-2013 ARM Limited
<> 154:37f96f9d4de2 3 *
<> 154:37f96f9d4de2 4 * Licensed under the Apache License, Version 2.0 (the "License");
<> 154:37f96f9d4de2 5 * you may not use this file except in compliance with the License.
<> 154:37f96f9d4de2 6 * You may obtain a copy of the License at
<> 154:37f96f9d4de2 7 *
<> 154:37f96f9d4de2 8 * http://www.apache.org/licenses/LICENSE-2.0
<> 154:37f96f9d4de2 9 *
<> 154:37f96f9d4de2 10 * Unless required by applicable law or agreed to in writing, software
<> 154:37f96f9d4de2 11 * distributed under the License is distributed on an "AS IS" BASIS,
<> 154:37f96f9d4de2 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
<> 154:37f96f9d4de2 13 * See the License for the specific language governing permissions and
<> 154:37f96f9d4de2 14 * limitations under the License.
<> 154:37f96f9d4de2 15 */
<> 154:37f96f9d4de2 16 #include "sleep_api.h"
<> 154:37f96f9d4de2 17 #include "cmsis.h"
<> 154:37f96f9d4de2 18 #include "fsl_smc.h"
<> 154:37f96f9d4de2 19 #include "fsl_clock_config.h"
<> 154:37f96f9d4de2 20
<> 160:d5399cc887bb 21 void hal_sleep(void)
<> 154:37f96f9d4de2 22 {
<> 154:37f96f9d4de2 23 SMC_SetPowerModeProtection(SMC, kSMC_AllowPowerModeAll);
<> 154:37f96f9d4de2 24
<> 154:37f96f9d4de2 25 SMC_SetPowerModeWait(SMC);
<> 154:37f96f9d4de2 26 }
<> 154:37f96f9d4de2 27
Anna Bridge 186:707f6e361f3e 28 static void PreEnterStopModes(void)
Anna Bridge 186:707f6e361f3e 29 {
Anna Bridge 186:707f6e361f3e 30 flash_prefetch_speculation_status_t speculationStatus =
Anna Bridge 186:707f6e361f3e 31 {
Anna Bridge 186:707f6e361f3e 32 kFLASH_prefetchSpeculationOptionDisable, /* Disable instruction speculation.*/
Anna Bridge 186:707f6e361f3e 33 kFLASH_prefetchSpeculationOptionDisable, /* Disable data speculation.*/
Anna Bridge 186:707f6e361f3e 34 };
Anna Bridge 186:707f6e361f3e 35
Anna Bridge 186:707f6e361f3e 36 __ISB();
Anna Bridge 186:707f6e361f3e 37
Anna Bridge 186:707f6e361f3e 38 /*
Anna Bridge 186:707f6e361f3e 39 * Before enter stop modes, the flash cache prefetch should be disabled.
Anna Bridge 186:707f6e361f3e 40 * Otherwise the prefetch might be interrupted by stop, then the data and
Anna Bridge 186:707f6e361f3e 41 * and instruction from flash are wrong.
Anna Bridge 186:707f6e361f3e 42 */
Anna Bridge 186:707f6e361f3e 43 FLASH_PflashSetPrefetchSpeculation(&speculationStatus);
Anna Bridge 186:707f6e361f3e 44 }
Anna Bridge 186:707f6e361f3e 45
Anna Bridge 186:707f6e361f3e 46 static void PostExitStopModes(void)
Anna Bridge 186:707f6e361f3e 47 {
Anna Bridge 186:707f6e361f3e 48 flash_prefetch_speculation_status_t speculationStatus =
Anna Bridge 186:707f6e361f3e 49 {
Anna Bridge 186:707f6e361f3e 50 kFLASH_prefetchSpeculationOptionEnable, /* Enable instruction speculation.*/
Anna Bridge 186:707f6e361f3e 51 kFLASH_prefetchSpeculationOptionEnable, /* Enable data speculation.*/
Anna Bridge 186:707f6e361f3e 52 };
Anna Bridge 186:707f6e361f3e 53
Anna Bridge 186:707f6e361f3e 54 FLASH_PflashSetPrefetchSpeculation(&speculationStatus);
Anna Bridge 186:707f6e361f3e 55
Anna Bridge 186:707f6e361f3e 56 __ISB();
Anna Bridge 186:707f6e361f3e 57 }
Anna Bridge 186:707f6e361f3e 58
<> 160:d5399cc887bb 59 void hal_deepsleep(void)
<> 154:37f96f9d4de2 60 {
<> 154:37f96f9d4de2 61 #if (defined(FSL_FEATURE_SOC_MCG_COUNT) && FSL_FEATURE_SOC_MCG_COUNT)
Anna Bridge 186:707f6e361f3e 62 #if (defined(FSL_FEATURE_MCG_HAS_PLL) && FSL_FEATURE_MCG_HAS_PLL)
<> 154:37f96f9d4de2 63 mcg_mode_t mode = CLOCK_GetMode();
Anna Bridge 186:707f6e361f3e 64 #endif // FSL_FEATURE_MCG_HAS_PLL
Anna Bridge 186:707f6e361f3e 65 #endif // FSL_FEATURE_SOC_MCG_COUNT
Kojto 169:e3b6fe271b81 66
<> 154:37f96f9d4de2 67 SMC_SetPowerModeProtection(SMC, kSMC_AllowPowerModeAll);
<> 154:37f96f9d4de2 68
Anna Bridge 186:707f6e361f3e 69 PreEnterStopModes();
<> 154:37f96f9d4de2 70 SMC_SetPowerModeVlps(SMC);
Anna Bridge 186:707f6e361f3e 71 PostExitStopModes();
<> 154:37f96f9d4de2 72
<> 154:37f96f9d4de2 73 #if (defined(FSL_FEATURE_SOC_MCG_COUNT) && FSL_FEATURE_SOC_MCG_COUNT)
Anna Bridge 186:707f6e361f3e 74 #if (defined(FSL_FEATURE_MCG_HAS_PLL) && FSL_FEATURE_MCG_HAS_PLL)
<> 154:37f96f9d4de2 75 /*
<> 154:37f96f9d4de2 76 * If enter stop modes when MCG in PEE mode, then after wakeup, the MCG is in PBE mode,
<> 154:37f96f9d4de2 77 * need to enter PEE mode manually.
<> 154:37f96f9d4de2 78 */
<> 154:37f96f9d4de2 79 if (mode == kMCG_ModePEE) {
<> 154:37f96f9d4de2 80 BOARD_BootClockRUN();
<> 154:37f96f9d4de2 81 }
Anna Bridge 186:707f6e361f3e 82 #endif // FSL_FEATURE_MCG_HAS_PLL
Anna Bridge 186:707f6e361f3e 83 #endif // FSL_FEATURE_SOC_MCG_COUNT
<> 154:37f96f9d4de2 84 }