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

Committer:
kenjiArai
Date:
Sat Jun 11 00:45:36 2016 +0000
Revision:
2:ffd5168de563
Parent:
1:4c3f4f1e154e
added delay()

Who changed what in which revision?

UserRevisionLine numberNew 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 2:ffd5168de563 9 * Revised: June 11th, 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 1:4c3f4f1e154e 23 if ((param->std_printf_function == false) && (param->serial_function == false)){
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 2:ffd5168de563 35 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 36 }
kenjiArai 0:9ddf14df689c 37 if (param->i2c_function == false){
kenjiArai 0:9ddf14df689c 38 //#warning "Disable I2C function!"
kenjiArai 0:9ddf14df689c 39 NRF_TWI0->EVENTS_ERROR = 0;
kenjiArai 0:9ddf14df689c 40 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 41 NRF_TWI0->INTENCLR = 0xffffffff;
kenjiArai 0:9ddf14df689c 42 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 43 NRF_TWI0->ENABLE = 0;
kenjiArai 0:9ddf14df689c 44 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 45 NRF_TWI0->POWER = 0;
kenjiArai 2:ffd5168de563 46 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 47 NRF_TWI1->EVENTS_ERROR = 0;
kenjiArai 0:9ddf14df689c 48 nrf_delay_us(5);
kenjiArai 2:ffd5168de563 49 NRF_TWI1->INTENCLR = 0xffffffff;
kenjiArai 0:9ddf14df689c 50 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 51 NRF_TWI1->ENABLE = 0;
kenjiArai 0:9ddf14df689c 52 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 53 NRF_TWI1->POWER = 0;
kenjiArai 0:9ddf14df689c 54 }
kenjiArai 1:4c3f4f1e154e 55 if ((param->spi_function == false) && (param->spi_slave_function == false)){
kenjiArai 0:9ddf14df689c 56 //#warning "Disable SPI function!"
kenjiArai 0:9ddf14df689c 57 NRF_SPI0->INTENCLR = 0xffffffff;
kenjiArai 0:9ddf14df689c 58 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 59 NRF_SPI0->ENABLE = 0;
kenjiArai 0:9ddf14df689c 60 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 61 NRF_SPI0->POWER = 0;
kenjiArai 2:ffd5168de563 62 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 63 NRF_SPI1->INTENCLR = 0xffffffff;
kenjiArai 0:9ddf14df689c 64 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 65 NRF_SPI1->ENABLE = 0;
kenjiArai 0:9ddf14df689c 66 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 67 NRF_SPI1->POWER = 0;
kenjiArai 2:ffd5168de563 68 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 69 NRF_SPIS1->INTENCLR = 0xffffffff;
kenjiArai 0:9ddf14df689c 70 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 71 NRF_SPIS1->ENABLE = 0;
kenjiArai 0:9ddf14df689c 72 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 73 NRF_SPIS1->POWER = 0;
kenjiArai 0:9ddf14df689c 74 }
kenjiArai 0:9ddf14df689c 75 if (param->pwm_functions == false){
kenjiArai 0:9ddf14df689c 76 //#warning "Disable PWM function!"
kenjiArai 0:9ddf14df689c 77 // Timer0,1,2
kenjiArai 0:9ddf14df689c 78 NRF_TIMER0->INTENCLR = 0xffffffff;
kenjiArai 0:9ddf14df689c 79 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 80 NRF_TIMER0->TASKS_STOP = 1;
kenjiArai 0:9ddf14df689c 81 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 82 NRF_TIMER0->POWER = 0;
kenjiArai 2:ffd5168de563 83 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 84 NRF_TIMER1->INTENCLR = 0xffffffff;
kenjiArai 0:9ddf14df689c 85 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 86 NRF_TIMER1->TASKS_STOP = 1;
kenjiArai 0:9ddf14df689c 87 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 88 NRF_TIMER1->POWER = 0;
kenjiArai 2:ffd5168de563 89 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 90 NRF_TIMER2->INTENCLR = 0xffffffff;
kenjiArai 0:9ddf14df689c 91 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 92 NRF_TIMER2->TASKS_STOP = 1;
kenjiArai 0:9ddf14df689c 93 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 94 NRF_TIMER2->POWER = 0;
kenjiArai 2:ffd5168de563 95 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 96 // PPI
kenjiArai 0:9ddf14df689c 97 NRF_PPI->TASKS_CHG[0].DIS = 1;
kenjiArai 0:9ddf14df689c 98 NRF_PPI->TASKS_CHG[1].DIS = 1;
kenjiArai 0:9ddf14df689c 99 NRF_PPI->TASKS_CHG[2].DIS = 1;
kenjiArai 0:9ddf14df689c 100 NRF_PPI->TASKS_CHG[3].DIS = 1;
kenjiArai 0:9ddf14df689c 101 for (uint8_t n = 0; n <16 ; n++){
kenjiArai 0:9ddf14df689c 102 NRF_PPI->CH[n].TEP = 0;
kenjiArai 0:9ddf14df689c 103 NRF_PPI->CH[n].EEP = 0;
kenjiArai 0:9ddf14df689c 104 }
kenjiArai 0:9ddf14df689c 105 }
kenjiArai 0:9ddf14df689c 106 if (param->analog_function == false){
kenjiArai 0:9ddf14df689c 107 //#warning "Disable ADC function!"
kenjiArai 0:9ddf14df689c 108 NRF_ADC->TASKS_STOP = 1;
kenjiArai 2:ffd5168de563 109 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 110 NRF_ADC->CONFIG = 0x18;
kenjiArai 2:ffd5168de563 111 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 112 NRF_ADC->ENABLE = 0;
kenjiArai 0:9ddf14df689c 113 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 114 NRF_ADC->POWER = 0;
kenjiArai 2:ffd5168de563 115 nrf_delay_us(5);
kenjiArai 0:9ddf14df689c 116 }
kenjiArai 0:9ddf14df689c 117 }