Enter Low Power mode not to use sd_power_system_off() subroutine
Dependents: BLE_EddystoneBeacon_w_ACC_TY51822 BLE_LoopbackUART_low_pwr_w_RTC1 BLE_Paired_Server BLE_Paired_Client
nRF51_lowpwr.cpp@0:9ddf14df689c, 2016-06-01 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed Jun 01 10:55:02 2016 +0000
- Revision:
- 0:9ddf14df689c
- Child:
- 1:4c3f4f1e154e
Enter low power mode
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:9ddf14df689c | 1 | /* |
kenjiArai | 0:9ddf14df689c | 2 | * mbed library program |
kenjiArai | 0:9ddf14df689c | 3 | * Set low power condition only for nRF51822 BLE chip |
kenjiArai | 0:9ddf14df689c | 4 | * |
kenjiArai | 0:9ddf14df689c | 5 | * Copyright (c) 2016 Kenji Arai / JH1PJL |
kenjiArai | 0:9ddf14df689c | 6 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:9ddf14df689c | 7 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 0:9ddf14df689c | 8 | * Started: April 30th, 2016 |
kenjiArai | 0:9ddf14df689c | 9 | * Revised: June 1st, 2016 |
kenjiArai | 0:9ddf14df689c | 10 | * |
kenjiArai | 0:9ddf14df689c | 11 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 0:9ddf14df689c | 12 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 0:9ddf14df689c | 13 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 0:9ddf14df689c | 14 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 0:9ddf14df689c | 15 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 0:9ddf14df689c | 16 | */ |
kenjiArai | 0:9ddf14df689c | 17 | |
kenjiArai | 0:9ddf14df689c | 18 | #include "mbed.h" |
kenjiArai | 0:9ddf14df689c | 19 | #include "nRF51_lowpwr.h" |
kenjiArai | 0:9ddf14df689c | 20 | #include "nrf_delay.h" |
kenjiArai | 0:9ddf14df689c | 21 | |
kenjiArai | 0:9ddf14df689c | 22 | LowPwr::LowPwr(const nRF51_LOWPWR_TypeDef *param){ |
kenjiArai | 0:9ddf14df689c | 23 | if (!((param->std_printf_function == false) || (param->serial_function == true))){ |
kenjiArai | 0:9ddf14df689c | 24 | //#warning "Disable Serial function (cannot use printf)!" |
kenjiArai | 0:9ddf14df689c | 25 | NRF_UART0->ENABLE = 0; |
kenjiArai | 0:9ddf14df689c | 26 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 27 | NRF_UART0->EVENTS_RXDRDY = 0; |
kenjiArai | 0:9ddf14df689c | 28 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 29 | //NRF_UART0->INTENCLR = 0x00020287; |
kenjiArai | 0:9ddf14df689c | 30 | NRF_UART0->INTENCLR = 0xffffffff; |
kenjiArai | 0:9ddf14df689c | 31 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 32 | NRF_UART0->TASKS_STOPRX = 1; |
kenjiArai | 0:9ddf14df689c | 33 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 34 | NRF_UART0->POWER = 0; |
kenjiArai | 0:9ddf14df689c | 35 | } |
kenjiArai | 0:9ddf14df689c | 36 | if (param->i2c_function == false){ |
kenjiArai | 0:9ddf14df689c | 37 | //#warning "Disable I2C function!" |
kenjiArai | 0:9ddf14df689c | 38 | NRF_TWI0->EVENTS_ERROR = 0; |
kenjiArai | 0:9ddf14df689c | 39 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 40 | NRF_TWI0->INTENCLR = 0xffffffff; |
kenjiArai | 0:9ddf14df689c | 41 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 42 | NRF_TWI0->ENABLE = 0; |
kenjiArai | 0:9ddf14df689c | 43 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 44 | NRF_TWI0->POWER = 0; |
kenjiArai | 0:9ddf14df689c | 45 | NRF_TWI1->EVENTS_ERROR = 0; |
kenjiArai | 0:9ddf14df689c | 46 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 47 | NRF_TWI0->INTENCLR = 0xffffffff; |
kenjiArai | 0:9ddf14df689c | 48 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 49 | NRF_TWI1->ENABLE = 0; |
kenjiArai | 0:9ddf14df689c | 50 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 51 | NRF_TWI1->POWER = 0; |
kenjiArai | 0:9ddf14df689c | 52 | } |
kenjiArai | 0:9ddf14df689c | 53 | if (!((param->spi_function == false) || (param->spi_slave_function == true))){ |
kenjiArai | 0:9ddf14df689c | 54 | //#warning "Disable SPI function!" |
kenjiArai | 0:9ddf14df689c | 55 | NRF_SPI0->INTENCLR = 0xffffffff; |
kenjiArai | 0:9ddf14df689c | 56 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 57 | NRF_SPI0->ENABLE = 0; |
kenjiArai | 0:9ddf14df689c | 58 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 59 | NRF_SPI0->POWER = 0; |
kenjiArai | 0:9ddf14df689c | 60 | NRF_SPI1->INTENCLR = 0xffffffff; |
kenjiArai | 0:9ddf14df689c | 61 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 62 | NRF_SPI1->ENABLE = 0; |
kenjiArai | 0:9ddf14df689c | 63 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 64 | NRF_SPI1->POWER = 0; |
kenjiArai | 0:9ddf14df689c | 65 | NRF_SPIS1->INTENCLR = 0xffffffff; |
kenjiArai | 0:9ddf14df689c | 66 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 67 | NRF_SPIS1->ENABLE = 0; |
kenjiArai | 0:9ddf14df689c | 68 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 69 | NRF_SPIS1->POWER = 0; |
kenjiArai | 0:9ddf14df689c | 70 | } |
kenjiArai | 0:9ddf14df689c | 71 | if (param->pwm_functions == false){ |
kenjiArai | 0:9ddf14df689c | 72 | //#warning "Disable PWM function!" |
kenjiArai | 0:9ddf14df689c | 73 | // Timer0,1,2 |
kenjiArai | 0:9ddf14df689c | 74 | NRF_TIMER0->INTENCLR = 0xffffffff; |
kenjiArai | 0:9ddf14df689c | 75 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 76 | NRF_TIMER0->TASKS_STOP = 1; |
kenjiArai | 0:9ddf14df689c | 77 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 78 | NRF_TIMER0->POWER = 0; |
kenjiArai | 0:9ddf14df689c | 79 | NRF_TIMER1->INTENCLR = 0xffffffff; |
kenjiArai | 0:9ddf14df689c | 80 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 81 | NRF_TIMER1->TASKS_STOP = 1; |
kenjiArai | 0:9ddf14df689c | 82 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 83 | NRF_TIMER1->POWER = 0; |
kenjiArai | 0:9ddf14df689c | 84 | NRF_TIMER2->INTENCLR = 0xffffffff; |
kenjiArai | 0:9ddf14df689c | 85 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 86 | NRF_TIMER2->TASKS_STOP = 1; |
kenjiArai | 0:9ddf14df689c | 87 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 88 | NRF_TIMER2->POWER = 0; |
kenjiArai | 0:9ddf14df689c | 89 | // PPI |
kenjiArai | 0:9ddf14df689c | 90 | NRF_PPI->TASKS_CHG[0].DIS = 1; |
kenjiArai | 0:9ddf14df689c | 91 | NRF_PPI->TASKS_CHG[1].DIS = 1; |
kenjiArai | 0:9ddf14df689c | 92 | NRF_PPI->TASKS_CHG[2].DIS = 1; |
kenjiArai | 0:9ddf14df689c | 93 | NRF_PPI->TASKS_CHG[3].DIS = 1; |
kenjiArai | 0:9ddf14df689c | 94 | for (uint8_t n = 0; n <16 ; n++){ |
kenjiArai | 0:9ddf14df689c | 95 | NRF_PPI->CH[n].TEP = 0; |
kenjiArai | 0:9ddf14df689c | 96 | NRF_PPI->CH[n].EEP = 0; |
kenjiArai | 0:9ddf14df689c | 97 | } |
kenjiArai | 0:9ddf14df689c | 98 | } |
kenjiArai | 0:9ddf14df689c | 99 | if (param->analog_function == false){ |
kenjiArai | 0:9ddf14df689c | 100 | //#warning "Disable ADC function!" |
kenjiArai | 0:9ddf14df689c | 101 | NRF_ADC->TASKS_STOP = 1; |
kenjiArai | 0:9ddf14df689c | 102 | NRF_ADC->CONFIG = 0x18; |
kenjiArai | 0:9ddf14df689c | 103 | NRF_ADC->ENABLE = 0; |
kenjiArai | 0:9ddf14df689c | 104 | nrf_delay_us(5); |
kenjiArai | 0:9ddf14df689c | 105 | NRF_ADC->POWER = 0; |
kenjiArai | 0:9ddf14df689c | 106 | } |
kenjiArai | 0:9ddf14df689c | 107 | } |