|
15 | 15 | */
|
16 | 16 |
|
17 | 17 | #include "sleep_api.h"
|
18 |
| -#include "serial_api.h" |
19 |
| -#include "lp_ticker_api.h" |
20 | 18 |
|
21 | 19 | #if DEVICE_SLEEP
|
22 | 20 |
|
|
25 | 23 | #include "objects.h"
|
26 | 24 | #include "PeripheralPins.h"
|
27 | 25 |
|
28 |
| -static void mbed_enter_sleep(struct sleep_s *obj); |
29 |
| -static void mbed_exit_sleep(struct sleep_s *obj); |
30 |
| - |
31 |
| -int serial_allow_powerdown(void); |
32 |
| -int spi_allow_powerdown(void); |
33 |
| -int i2c_allow_powerdown(void); |
34 |
| -int pwmout_allow_powerdown(void); |
35 |
| - |
36 | 26 | /**
|
37 |
| - * Enter Idle mode. |
| 27 | + * Enter idle mode, in which just CPU is halted. |
38 | 28 | */
|
39 | 29 | void hal_sleep(void)
|
40 | 30 | {
|
41 |
| - struct sleep_s sleep_obj; |
42 |
| - sleep_obj.powerdown = 0; |
43 |
| - mbed_enter_sleep(&sleep_obj); |
44 |
| - mbed_exit_sleep(&sleep_obj); |
| 31 | + SYS_UnlockReg(); |
| 32 | + CLK_Idle(); |
| 33 | + SYS_LockReg(); |
45 | 34 | }
|
46 | 35 |
|
47 | 36 | /**
|
48 |
| - * Enter Power-down mode while no peripheral is active; otherwise, enter Idle mode. |
| 37 | + * Enter power-down mode, in which HXT/HIRC are halted. |
49 | 38 | */
|
50 | 39 | void hal_deepsleep(void)
|
51 | 40 | {
|
52 |
| - struct sleep_s sleep_obj; |
53 |
| - sleep_obj.powerdown = 1; |
54 |
| - mbed_enter_sleep(&sleep_obj); |
55 |
| - mbed_exit_sleep(&sleep_obj); |
56 |
| -} |
57 |
| - |
58 |
| -static void mbed_enter_sleep(struct sleep_s *obj) |
59 |
| -{ |
60 |
| - // Check if serial allows entering power-down mode |
61 |
| - if (obj->powerdown) { |
62 |
| - obj->powerdown = serial_allow_powerdown(); |
63 |
| - } |
64 |
| - // Check if spi allows entering power-down mode |
65 |
| - if (obj->powerdown) { |
66 |
| - obj->powerdown = spi_allow_powerdown(); |
67 |
| - } |
68 |
| - // Check if i2c allows entering power-down mode |
69 |
| - if (obj->powerdown) { |
70 |
| - obj->powerdown = i2c_allow_powerdown(); |
71 |
| - } |
72 |
| - // Check if pwmout allows entering power-down mode |
73 |
| - if (obj->powerdown) { |
74 |
| - obj->powerdown = pwmout_allow_powerdown(); |
75 |
| - } |
76 |
| - // TODO: Check if other peripherals allow entering power-down mode |
77 |
| - |
78 |
| - if (obj->powerdown) { // Power-down mode (HIRC/HXT disabled, LIRC/LXT enabled) |
79 |
| - SYS_UnlockReg(); |
80 |
| - CLK_PowerDown(); |
81 |
| - SYS_LockReg(); |
82 |
| - } else { // CPU halt mode (HIRC/HXT enabled, LIRC/LXT enabled) |
83 |
| - SYS_UnlockReg(); |
84 |
| - CLK_Idle(); |
85 |
| - SYS_LockReg(); |
86 |
| - } |
87 |
| - __NOP(); |
88 |
| - __NOP(); |
89 |
| - __NOP(); |
90 |
| - __NOP(); |
91 |
| -} |
92 |
| - |
93 |
| -static void mbed_exit_sleep(struct sleep_s *obj) |
94 |
| -{ |
95 |
| - (void)obj; |
| 41 | + SYS_UnlockReg(); |
| 42 | + CLK_PowerDown(); |
| 43 | + SYS_LockReg(); |
96 | 44 | }
|
97 | 45 |
|
98 | 46 | #endif
|
0 commit comments