mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_RENESAS/TARGET_RZ_A1XX/sleep.c@189:f392fc9709a3, 2019-02-20 (annotated)
- Committer:
- AnnaBridge
- Date:
- Wed Feb 20 22:31:08 2019 +0000
- Revision:
- 189:f392fc9709a3
- Parent:
- 186:707f6e361f3e
mbed library release version 165
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Anna Bridge |
186:707f6e361f3e | 1 | /* mbed Microcontroller Library |
Anna Bridge |
186:707f6e361f3e | 2 | * Copyright (c) 2018 ARM Limited |
Anna Bridge |
186:707f6e361f3e | 3 | * |
Anna Bridge |
186:707f6e361f3e | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
Anna Bridge |
186:707f6e361f3e | 5 | * you may not use this file except in compliance with the License. |
Anna Bridge |
186:707f6e361f3e | 6 | * You may obtain a copy of the License at |
Anna Bridge |
186:707f6e361f3e | 7 | * |
Anna Bridge |
186:707f6e361f3e | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
Anna Bridge |
186:707f6e361f3e | 9 | * |
Anna Bridge |
186:707f6e361f3e | 10 | * Unless required by applicable law or agreed to in writing, software |
Anna Bridge |
186:707f6e361f3e | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
Anna Bridge |
186:707f6e361f3e | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
Anna Bridge |
186:707f6e361f3e | 13 | * See the License for the specific language governing permissions and |
Anna Bridge |
186:707f6e361f3e | 14 | * limitations under the License. |
Anna Bridge |
186:707f6e361f3e | 15 | */ |
Anna Bridge |
186:707f6e361f3e | 16 | #include "sleep_api.h" |
Anna Bridge |
186:707f6e361f3e | 17 | #include "cmsis.h" |
Anna Bridge |
186:707f6e361f3e | 18 | #include "mbed_interface.h" |
Anna Bridge |
186:707f6e361f3e | 19 | #include "mbed_critical.h" |
Anna Bridge |
186:707f6e361f3e | 20 | #include "iodefine.h" |
Anna Bridge |
186:707f6e361f3e | 21 | |
Anna Bridge |
186:707f6e361f3e | 22 | #if DEVICE_SLEEP |
Anna Bridge |
186:707f6e361f3e | 23 | static volatile uint8_t wk_CPGSTBCR3; |
Anna Bridge |
186:707f6e361f3e | 24 | static volatile uint8_t wk_CPGSTBCR4; |
Anna Bridge |
186:707f6e361f3e | 25 | static volatile uint8_t wk_CPGSTBCR5; |
Anna Bridge |
186:707f6e361f3e | 26 | static volatile uint8_t wk_CPGSTBCR6; |
Anna Bridge |
186:707f6e361f3e | 27 | static volatile uint8_t wk_CPGSTBCR7; |
Anna Bridge |
186:707f6e361f3e | 28 | static volatile uint8_t wk_CPGSTBCR8; |
Anna Bridge |
186:707f6e361f3e | 29 | static volatile uint8_t wk_CPGSTBCR9; |
Anna Bridge |
186:707f6e361f3e | 30 | static volatile uint8_t wk_CPGSTBCR10; |
Anna Bridge |
186:707f6e361f3e | 31 | static volatile uint8_t wk_CPGSTBCR11; |
Anna Bridge |
186:707f6e361f3e | 32 | static volatile uint8_t wk_CPGSTBCR12; |
Anna Bridge |
186:707f6e361f3e | 33 | #if defined(TARGET_RZA1H) || defined(TARGET_VK_RZ_A1H) |
Anna Bridge |
186:707f6e361f3e | 34 | static volatile uint8_t wk_CPGSTBCR13; |
Anna Bridge |
186:707f6e361f3e | 35 | #endif |
Anna Bridge |
186:707f6e361f3e | 36 | static volatile uint8_t wk_CPGSTBREQ1; |
Anna Bridge |
186:707f6e361f3e | 37 | static volatile uint8_t wk_CPGSTBREQ2; |
Anna Bridge |
186:707f6e361f3e | 38 | |
Anna Bridge |
186:707f6e361f3e | 39 | typedef struct { |
Anna Bridge |
186:707f6e361f3e | 40 | volatile uint8_t * p_wk_stbcr; |
Anna Bridge |
186:707f6e361f3e | 41 | volatile uint8_t * p_stbcr; |
Anna Bridge |
186:707f6e361f3e | 42 | volatile uint8_t * p_stbreq; |
Anna Bridge |
186:707f6e361f3e | 43 | volatile uint8_t * p_stback; |
Anna Bridge |
186:707f6e361f3e | 44 | uint8_t mstp; |
Anna Bridge |
186:707f6e361f3e | 45 | uint8_t stbrq; |
Anna Bridge |
186:707f6e361f3e | 46 | } module_stanby_t; |
Anna Bridge |
186:707f6e361f3e | 47 | |
Anna Bridge |
186:707f6e361f3e | 48 | static const module_stanby_t module_stanby[] = { |
Anna Bridge |
186:707f6e361f3e | 49 | {&wk_CPGSTBCR6, &CPGSTBCR6, &CPGSTBREQ1, &CPGSTBACK1, CPG_STBCR6_BIT_MSTP61, CPG_STBREQ1_BIT_STBRQ13}, /* JCU */ |
Anna Bridge |
186:707f6e361f3e | 50 | {&wk_CPGSTBCR6, &CPGSTBCR6, &CPGSTBREQ1, &CPGSTBACK1, CPG_STBCR6_BIT_MSTP66, CPG_STBREQ1_BIT_STBRQ10}, /* CEU */ |
Anna Bridge |
186:707f6e361f3e | 51 | {&wk_CPGSTBCR6, &CPGSTBCR8, &CPGSTBREQ1, &CPGSTBACK1, CPG_STBCR8_BIT_MSTP82, CPG_STBREQ1_BIT_STBRQ12}, /* EthernetAVB */ |
Anna Bridge |
186:707f6e361f3e | 52 | {&wk_CPGSTBCR7, &CPGSTBCR7, &CPGSTBREQ2, &CPGSTBACK2, CPG_STBCR7_BIT_MSTP74, CPG_STBREQ2_BIT_STBRQ26}, /* Ethernet */ |
Anna Bridge |
186:707f6e361f3e | 53 | {&wk_CPGSTBCR8, &CPGSTBCR8, &CPGSTBREQ2, &CPGSTBACK2, CPG_STBCR8_BIT_MSTP83, CPG_STBREQ2_BIT_STBRQ27}, /* MediaLB */ |
Anna Bridge |
186:707f6e361f3e | 54 | {&wk_CPGSTBCR9, &CPGSTBCR9, &CPGSTBREQ2, &CPGSTBACK2, CPG_STBCR9_BIT_MSTP91, CPG_STBREQ2_BIT_STBRQ25}, /* VDC5_0 */ |
Anna Bridge |
186:707f6e361f3e | 55 | #if defined(TARGET_RZA1H) || defined(TARGET_VK_RZ_A1H) |
Anna Bridge |
186:707f6e361f3e | 56 | {&wk_CPGSTBCR8, &CPGSTBCR8, &CPGSTBREQ2, &CPGSTBACK2, CPG_STBCR8_BIT_MSTP85, CPG_STBREQ2_BIT_STBRQ21}, /* IMR-LSD */ |
Anna Bridge |
186:707f6e361f3e | 57 | {&wk_CPGSTBCR8, &CPGSTBCR8, &CPGSTBREQ2, &CPGSTBACK2, CPG_STBCR8_BIT_MSTP86, CPG_STBREQ2_BIT_STBRQ22}, /* IMR-LS2_1 */ |
Anna Bridge |
186:707f6e361f3e | 58 | {&wk_CPGSTBCR8, &CPGSTBCR8, &CPGSTBREQ2, &CPGSTBACK2, CPG_STBCR8_BIT_MSTP87, CPG_STBREQ2_BIT_STBRQ23}, /* IMR-LS2_0 */ |
Anna Bridge |
186:707f6e361f3e | 59 | {&wk_CPGSTBCR9, &CPGSTBCR9, &CPGSTBREQ2, &CPGSTBACK2, CPG_STBCR9_BIT_MSTP90, CPG_STBREQ2_BIT_STBRQ24}, /* VDC5_1 */ |
Anna Bridge |
186:707f6e361f3e | 60 | {&wk_CPGSTBCR10, &CPGSTBCR10, &CPGSTBREQ2, &CPGSTBACK2, CPG_STBCR10_BIT_MSTP100, CPG_STBREQ2_BIT_STBRQ20}, /* OpenVG */ |
Anna Bridge |
186:707f6e361f3e | 61 | #endif |
Anna Bridge |
186:707f6e361f3e | 62 | {0, 0, 0, 0, 0} /* None */ |
Anna Bridge |
186:707f6e361f3e | 63 | }; |
Anna Bridge |
186:707f6e361f3e | 64 | |
Anna Bridge |
186:707f6e361f3e | 65 | static void module_standby_in(void) { |
Anna Bridge |
186:707f6e361f3e | 66 | volatile uint32_t cnt; |
Anna Bridge |
186:707f6e361f3e | 67 | volatile uint8_t dummy_8; |
Anna Bridge |
186:707f6e361f3e | 68 | const module_stanby_t * p_module = &module_stanby[0]; |
Anna Bridge |
186:707f6e361f3e | 69 | |
Anna Bridge |
186:707f6e361f3e | 70 | while (p_module->p_wk_stbcr != 0) { |
Anna Bridge |
186:707f6e361f3e | 71 | if ((*p_module->p_wk_stbcr & p_module->mstp) == 0) { |
Anna Bridge |
186:707f6e361f3e | 72 | *p_module->p_stbreq |= p_module->stbrq; |
Anna Bridge |
186:707f6e361f3e | 73 | dummy_8 = *p_module->p_stbreq; |
Anna Bridge |
186:707f6e361f3e | 74 | for (cnt = 0; cnt < 1000; cnt++) { // wait time |
Anna Bridge |
186:707f6e361f3e | 75 | if ((*p_module->p_stback & p_module->stbrq) != 0) { |
Anna Bridge |
186:707f6e361f3e | 76 | break; |
Anna Bridge |
186:707f6e361f3e | 77 | } |
Anna Bridge |
186:707f6e361f3e | 78 | } |
Anna Bridge |
186:707f6e361f3e | 79 | *p_module->p_stbcr |= p_module->mstp; |
Anna Bridge |
186:707f6e361f3e | 80 | dummy_8 = *p_module->p_stbcr; |
Anna Bridge |
186:707f6e361f3e | 81 | } |
Anna Bridge |
186:707f6e361f3e | 82 | p_module++; |
Anna Bridge |
186:707f6e361f3e | 83 | } |
Anna Bridge |
186:707f6e361f3e | 84 | (void)dummy_8; |
Anna Bridge |
186:707f6e361f3e | 85 | } |
Anna Bridge |
186:707f6e361f3e | 86 | |
Anna Bridge |
186:707f6e361f3e | 87 | static void module_standby_out(void) { |
Anna Bridge |
186:707f6e361f3e | 88 | volatile uint32_t cnt; |
Anna Bridge |
186:707f6e361f3e | 89 | volatile uint8_t dummy_8; |
Anna Bridge |
186:707f6e361f3e | 90 | const module_stanby_t * p_module = &module_stanby[0]; |
Anna Bridge |
186:707f6e361f3e | 91 | |
Anna Bridge |
186:707f6e361f3e | 92 | while (p_module->p_wk_stbcr != 0) { |
Anna Bridge |
186:707f6e361f3e | 93 | if ((*p_module->p_wk_stbcr & p_module->mstp) == 0) { |
Anna Bridge |
186:707f6e361f3e | 94 | *p_module->p_stbreq &= ~(p_module->stbrq); |
Anna Bridge |
186:707f6e361f3e | 95 | dummy_8 = *p_module->p_stbreq; |
Anna Bridge |
186:707f6e361f3e | 96 | for (cnt = 0; cnt < 1000; cnt++) { |
Anna Bridge |
186:707f6e361f3e | 97 | if ((*p_module->p_stback & p_module->stbrq) == 0) { |
Anna Bridge |
186:707f6e361f3e | 98 | break; |
Anna Bridge |
186:707f6e361f3e | 99 | } |
Anna Bridge |
186:707f6e361f3e | 100 | } |
Anna Bridge |
186:707f6e361f3e | 101 | } |
Anna Bridge |
186:707f6e361f3e | 102 | p_module++; |
Anna Bridge |
186:707f6e361f3e | 103 | } |
Anna Bridge |
186:707f6e361f3e | 104 | (void)dummy_8; |
Anna Bridge |
186:707f6e361f3e | 105 | } |
Anna Bridge |
186:707f6e361f3e | 106 | |
Anna Bridge |
186:707f6e361f3e | 107 | void hal_sleep(void) { |
Anna Bridge |
186:707f6e361f3e | 108 | // Transition to Sleep Mode |
Anna Bridge |
186:707f6e361f3e | 109 | __WFI(); |
Anna Bridge |
186:707f6e361f3e | 110 | } |
Anna Bridge |
186:707f6e361f3e | 111 | |
Anna Bridge |
186:707f6e361f3e | 112 | void hal_deepsleep(void) { |
Anna Bridge |
186:707f6e361f3e | 113 | volatile uint8_t dummy_8; |
Anna Bridge |
186:707f6e361f3e | 114 | |
Anna Bridge |
186:707f6e361f3e | 115 | core_util_critical_section_enter(); |
Anna Bridge |
186:707f6e361f3e | 116 | /* For powerdown the peripheral module, save current standby control register values(just in case) */ |
Anna Bridge |
186:707f6e361f3e | 117 | wk_CPGSTBCR3 = CPGSTBCR3; |
Anna Bridge |
186:707f6e361f3e | 118 | wk_CPGSTBCR4 = CPGSTBCR4; |
Anna Bridge |
186:707f6e361f3e | 119 | wk_CPGSTBCR5 = CPGSTBCR5; |
Anna Bridge |
186:707f6e361f3e | 120 | wk_CPGSTBCR6 = CPGSTBCR6; |
Anna Bridge |
186:707f6e361f3e | 121 | wk_CPGSTBCR7 = CPGSTBCR7; |
Anna Bridge |
186:707f6e361f3e | 122 | wk_CPGSTBCR8 = CPGSTBCR8; |
Anna Bridge |
186:707f6e361f3e | 123 | wk_CPGSTBCR9 = CPGSTBCR9; |
Anna Bridge |
186:707f6e361f3e | 124 | wk_CPGSTBCR10 = CPGSTBCR10; |
Anna Bridge |
186:707f6e361f3e | 125 | wk_CPGSTBCR11 = CPGSTBCR11; |
Anna Bridge |
186:707f6e361f3e | 126 | wk_CPGSTBCR12 = CPGSTBCR12; |
Anna Bridge |
186:707f6e361f3e | 127 | #if defined(TARGET_RZA1H) || defined(TARGET_VK_RZ_A1H) |
Anna Bridge |
186:707f6e361f3e | 128 | wk_CPGSTBCR13 = CPGSTBCR13; |
Anna Bridge |
186:707f6e361f3e | 129 | #endif |
Anna Bridge |
186:707f6e361f3e | 130 | |
Anna Bridge |
186:707f6e361f3e | 131 | /* MTU2 (for low power ticker) */ |
Anna Bridge |
186:707f6e361f3e | 132 | CPGSTBCR3 |= ~(CPG_STBCR3_BIT_MSTP33); |
Anna Bridge |
186:707f6e361f3e | 133 | dummy_8 = CPGSTBCR3; |
Anna Bridge |
186:707f6e361f3e | 134 | CPGSTBCR4 = 0xFF; |
Anna Bridge |
186:707f6e361f3e | 135 | dummy_8 = CPGSTBCR4; |
Anna Bridge |
186:707f6e361f3e | 136 | CPGSTBCR5 = 0xFF; |
Anna Bridge |
186:707f6e361f3e | 137 | dummy_8 = CPGSTBCR5; |
Anna Bridge |
186:707f6e361f3e | 138 | /* Realtime Clock, JCU, CEU */ |
Anna Bridge |
186:707f6e361f3e | 139 | CPGSTBCR6 |= ~(CPG_STBCR6_BIT_MSTP60 | CPG_STBCR6_BIT_MSTP61 | CPG_STBCR6_BIT_MSTP66); |
Anna Bridge |
186:707f6e361f3e | 140 | dummy_8 = CPGSTBCR6; |
Anna Bridge |
186:707f6e361f3e | 141 | /* Video Decoder0, Video Decoder1, Ethernet */ |
Anna Bridge |
186:707f6e361f3e | 142 | CPGSTBCR7 |= ~(CPG_STBCR7_BIT_MSTP77 | CPG_STBCR7_BIT_MSTP76 | CPG_STBCR7_BIT_MSTP74); |
Anna Bridge |
186:707f6e361f3e | 143 | dummy_8 = CPGSTBCR7; |
Anna Bridge |
186:707f6e361f3e | 144 | /* EthernetAVB, MediaLB, IMR-LSD, IMR-LS2_1, IMR-LS2_0 */ |
Anna Bridge |
186:707f6e361f3e | 145 | CPGSTBCR8 |= ~(CPG_STBCR8_BIT_MSTP82 | CPG_STBCR8_BIT_MSTP83 | CPG_STBCR8_BIT_MSTP85 | CPG_STBCR8_BIT_MSTP86 | CPG_STBCR8_BIT_MSTP87); |
Anna Bridge |
186:707f6e361f3e | 146 | dummy_8 = CPGSTBCR8; |
Anna Bridge |
186:707f6e361f3e | 147 | /* VDC5_1, SPI Multi I/O Bus Controller0 */ |
Anna Bridge |
186:707f6e361f3e | 148 | CPGSTBCR9 |= ~(CPG_STBCR9_BIT_MSTP90 | CPG_STBCR9_BIT_MSTP93); |
Anna Bridge |
186:707f6e361f3e | 149 | dummy_8 = CPGSTBCR9; |
Anna Bridge |
186:707f6e361f3e | 150 | /* OpenVG */ |
Anna Bridge |
186:707f6e361f3e | 151 | CPGSTBCR10 |= ~(CPG_STBCR10_BIT_MSTP100); |
Anna Bridge |
186:707f6e361f3e | 152 | dummy_8 = CPGSTBCR10; |
Anna Bridge |
186:707f6e361f3e | 153 | CPGSTBCR11 = 0xFF; |
Anna Bridge |
186:707f6e361f3e | 154 | dummy_8 = CPGSTBCR11; |
Anna Bridge |
186:707f6e361f3e | 155 | CPGSTBCR12 = 0xFF; |
Anna Bridge |
186:707f6e361f3e | 156 | dummy_8 = CPGSTBCR12; |
Anna Bridge |
186:707f6e361f3e | 157 | #if defined(TARGET_RZA1H) || defined(TARGET_VK_RZ_A1H) |
Anna Bridge |
186:707f6e361f3e | 158 | CPGSTBCR13 = 0xFF; |
Anna Bridge |
186:707f6e361f3e | 159 | dummy_8 = CPGSTBCR13; |
Anna Bridge |
186:707f6e361f3e | 160 | #endif |
Anna Bridge |
186:707f6e361f3e | 161 | |
Anna Bridge |
186:707f6e361f3e | 162 | module_standby_in(); |
Anna Bridge |
186:707f6e361f3e | 163 | |
Anna Bridge |
186:707f6e361f3e | 164 | // Transition to Sleep Mode |
Anna Bridge |
186:707f6e361f3e | 165 | __WFI(); |
Anna Bridge |
186:707f6e361f3e | 166 | |
Anna Bridge |
186:707f6e361f3e | 167 | /* Revert standby control register values */ |
Anna Bridge |
186:707f6e361f3e | 168 | CPGSTBCR3 = wk_CPGSTBCR3; |
Anna Bridge |
186:707f6e361f3e | 169 | dummy_8 = CPGSTBCR3; |
Anna Bridge |
186:707f6e361f3e | 170 | CPGSTBCR4 = wk_CPGSTBCR4; |
Anna Bridge |
186:707f6e361f3e | 171 | dummy_8 = CPGSTBCR4; |
Anna Bridge |
186:707f6e361f3e | 172 | CPGSTBCR5 = wk_CPGSTBCR5; |
Anna Bridge |
186:707f6e361f3e | 173 | dummy_8 = CPGSTBCR5; |
Anna Bridge |
186:707f6e361f3e | 174 | CPGSTBCR6 = wk_CPGSTBCR6; |
Anna Bridge |
186:707f6e361f3e | 175 | dummy_8 = CPGSTBCR6; |
Anna Bridge |
186:707f6e361f3e | 176 | CPGSTBCR7 = wk_CPGSTBCR7; |
Anna Bridge |
186:707f6e361f3e | 177 | dummy_8 = CPGSTBCR7; |
Anna Bridge |
186:707f6e361f3e | 178 | CPGSTBCR8 = wk_CPGSTBCR8; |
Anna Bridge |
186:707f6e361f3e | 179 | dummy_8 = CPGSTBCR8; |
Anna Bridge |
186:707f6e361f3e | 180 | CPGSTBCR9 = wk_CPGSTBCR9; |
Anna Bridge |
186:707f6e361f3e | 181 | dummy_8 = CPGSTBCR9; |
Anna Bridge |
186:707f6e361f3e | 182 | CPGSTBCR10 = wk_CPGSTBCR10; |
Anna Bridge |
186:707f6e361f3e | 183 | dummy_8 = CPGSTBCR10; |
Anna Bridge |
186:707f6e361f3e | 184 | CPGSTBCR11 = wk_CPGSTBCR11; |
Anna Bridge |
186:707f6e361f3e | 185 | dummy_8 = CPGSTBCR11; |
Anna Bridge |
186:707f6e361f3e | 186 | CPGSTBCR12 = wk_CPGSTBCR12; |
Anna Bridge |
186:707f6e361f3e | 187 | dummy_8 = CPGSTBCR12; |
Anna Bridge |
186:707f6e361f3e | 188 | #if defined(TARGET_RZA1H) || defined(TARGET_VK_RZ_A1H) |
Anna Bridge |
186:707f6e361f3e | 189 | CPGSTBCR13 = wk_CPGSTBCR13; |
Anna Bridge |
186:707f6e361f3e | 190 | dummy_8 = CPGSTBCR13; |
Anna Bridge |
186:707f6e361f3e | 191 | #endif |
Anna Bridge |
186:707f6e361f3e | 192 | |
Anna Bridge |
186:707f6e361f3e | 193 | module_standby_out(); |
Anna Bridge |
186:707f6e361f3e | 194 | core_util_critical_section_exit(); |
Anna Bridge |
186:707f6e361f3e | 195 | |
Anna Bridge |
186:707f6e361f3e | 196 | (void)dummy_8; |
Anna Bridge |
186:707f6e361f3e | 197 | } |
Anna Bridge |
186:707f6e361f3e | 198 | #endif |