Skip to content

Commit 9c0a982

Browse files
committed
K64F - sleep support
1 parent 5edcf36 commit 9c0a982

File tree

2 files changed

+50
-1
lines changed
  • libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F

2 files changed

+50
-1
lines changed

libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F/device.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
#define DEVICE_LOCALFILESYSTEM 0
4646
#define DEVICE_ID_LENGTH 24
4747

48-
#define DEVICE_SLEEP 0
48+
#define DEVICE_SLEEP 1
4949

5050
#define DEVICE_DEBUG_AWARENESS 0
5151

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/* mbed Microcontroller Library
2+
* Copyright (c) 2006-2013 ARM Limited
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
#include "sleep_api.h"
17+
#include "cmsis.h"
18+
#include "fsl_mcg_hal.h"
19+
#include "fsl_smc_hal.h"
20+
21+
void sleep(void) {
22+
smc_power_mode_protection_config_t sleep_config = {true};
23+
smc_hal_config_power_mode_protection(&sleep_config);
24+
25+
SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;
26+
__WFI();
27+
}
28+
29+
void deepsleep(void) {
30+
mcg_clock_select_t mcg_clock = clock_get_clks();
31+
32+
smc_power_mode_protection_config_t sleep_config = {true};
33+
smc_hal_config_power_mode_protection(&sleep_config);
34+
SMC->PMCTRL = SMC_PMCTRL_STOPM(2);
35+
36+
//Deep sleep for ARM core:
37+
SCB->SCR = 1 << SCB_SCR_SLEEPDEEP_Pos;
38+
39+
__WFI();
40+
41+
//Switch back to PLL as clock source if needed
42+
//The interrupt that woke up the device will run at reduced speed
43+
if (mcg_clock == kMcgClockSelectOut) {
44+
if (clock_get_plls() == kMcgPllSelectPllcs) {
45+
while (clock_get_lock0() == kMcgLockUnlocked);
46+
}
47+
clock_set_clks(kMcgClockSelectOut);
48+
}
49+
}

0 commit comments

Comments
 (0)