To get started with Seeed Tiny BLE, include detecting motion, button and battery level.

Dependencies:   BLE_API eMPL_MPU6050 mbed nRF51822

Committer:
yihui
Date:
Wed Apr 22 07:47:17 2015 +0000
Revision:
1:fc2f9d636751
update libraries; ; delete nRF51822/nordic-sdk/components/gpiote/app_gpiote.c to solve GPIOTE_IRQHandler multiply defined issue. temperarily change nRF51822 library to folder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yihui 1:fc2f9d636751 1 /* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved.
yihui 1:fc2f9d636751 2 *
yihui 1:fc2f9d636751 3 * The information contained herein is property of Nordic Semiconductor ASA.
yihui 1:fc2f9d636751 4 * Terms and conditions of usage are described in detail in NORDIC
yihui 1:fc2f9d636751 5 * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
yihui 1:fc2f9d636751 6 *
yihui 1:fc2f9d636751 7 * Licensees are granted free, non-transferable use of the information. NO
yihui 1:fc2f9d636751 8 * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
yihui 1:fc2f9d636751 9 * the file.
yihui 1:fc2f9d636751 10 *
yihui 1:fc2f9d636751 11 * $LastChangedRevision: 17685 $
yihui 1:fc2f9d636751 12 */
yihui 1:fc2f9d636751 13
yihui 1:fc2f9d636751 14 /**
yihui 1:fc2f9d636751 15 *@file
yihui 1:fc2f9d636751 16 *@brief NMVC driver implementation
yihui 1:fc2f9d636751 17 */
yihui 1:fc2f9d636751 18
yihui 1:fc2f9d636751 19 #include "stdbool.h"
yihui 1:fc2f9d636751 20 #include "nrf.h"
yihui 1:fc2f9d636751 21 #include "nrf_nvmc.h"
yihui 1:fc2f9d636751 22
yihui 1:fc2f9d636751 23
yihui 1:fc2f9d636751 24 void nrf_nvmc_page_erase(uint32_t address)
yihui 1:fc2f9d636751 25 {
yihui 1:fc2f9d636751 26 // Enable erase.
yihui 1:fc2f9d636751 27 NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Een;
yihui 1:fc2f9d636751 28 while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
yihui 1:fc2f9d636751 29 {
yihui 1:fc2f9d636751 30 }
yihui 1:fc2f9d636751 31
yihui 1:fc2f9d636751 32 // Erase the page
yihui 1:fc2f9d636751 33 NRF_NVMC->ERASEPAGE = address;
yihui 1:fc2f9d636751 34 while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
yihui 1:fc2f9d636751 35 {
yihui 1:fc2f9d636751 36 }
yihui 1:fc2f9d636751 37
yihui 1:fc2f9d636751 38 NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren;
yihui 1:fc2f9d636751 39 while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
yihui 1:fc2f9d636751 40 {
yihui 1:fc2f9d636751 41 }
yihui 1:fc2f9d636751 42 }
yihui 1:fc2f9d636751 43
yihui 1:fc2f9d636751 44
yihui 1:fc2f9d636751 45 void nrf_nvmc_write_byte(uint32_t address, uint8_t value)
yihui 1:fc2f9d636751 46 {
yihui 1:fc2f9d636751 47 uint32_t byte_shift = address & (uint32_t)0x03;
yihui 1:fc2f9d636751 48 uint32_t address32 = address & ~byte_shift; // Address to the word this byte is in.
yihui 1:fc2f9d636751 49 uint32_t value32 = (*(uint32_t*)address32 & ~((uint32_t)0xFF << (byte_shift << (uint32_t)3)));
yihui 1:fc2f9d636751 50 value32 = value32 + ((uint32_t)value << (byte_shift << 3));
yihui 1:fc2f9d636751 51
yihui 1:fc2f9d636751 52 // Enable write.
yihui 1:fc2f9d636751 53 NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos);
yihui 1:fc2f9d636751 54 while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
yihui 1:fc2f9d636751 55 {
yihui 1:fc2f9d636751 56 }
yihui 1:fc2f9d636751 57
yihui 1:fc2f9d636751 58 *(uint32_t*)address32 = value32;
yihui 1:fc2f9d636751 59 while(NRF_NVMC->READY == NVMC_READY_READY_Busy)
yihui 1:fc2f9d636751 60 {
yihui 1:fc2f9d636751 61 }
yihui 1:fc2f9d636751 62
yihui 1:fc2f9d636751 63 NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos);
yihui 1:fc2f9d636751 64 {
yihui 1:fc2f9d636751 65 }
yihui 1:fc2f9d636751 66 }
yihui 1:fc2f9d636751 67
yihui 1:fc2f9d636751 68 void nrf_nvmc_write_word(uint32_t address, uint32_t value)
yihui 1:fc2f9d636751 69 {
yihui 1:fc2f9d636751 70 // Enable write.
yihui 1:fc2f9d636751 71 NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen;
yihui 1:fc2f9d636751 72 while (NRF_NVMC->READY == NVMC_READY_READY_Busy){
yihui 1:fc2f9d636751 73 }
yihui 1:fc2f9d636751 74
yihui 1:fc2f9d636751 75 *(uint32_t*)address = value;
yihui 1:fc2f9d636751 76 while (NRF_NVMC->READY == NVMC_READY_READY_Busy){
yihui 1:fc2f9d636751 77 }
yihui 1:fc2f9d636751 78
yihui 1:fc2f9d636751 79 NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren;
yihui 1:fc2f9d636751 80 while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
yihui 1:fc2f9d636751 81 {
yihui 1:fc2f9d636751 82 }
yihui 1:fc2f9d636751 83 }
yihui 1:fc2f9d636751 84
yihui 1:fc2f9d636751 85 void nrf_nvmc_write_bytes(uint32_t address, const uint8_t * src, uint32_t num_bytes)
yihui 1:fc2f9d636751 86 {
yihui 1:fc2f9d636751 87 uint32_t i;
yihui 1:fc2f9d636751 88 for(i=0;i<num_bytes;i++)
yihui 1:fc2f9d636751 89 {
yihui 1:fc2f9d636751 90 nrf_nvmc_write_byte(address+i,src[i]);
yihui 1:fc2f9d636751 91 }
yihui 1:fc2f9d636751 92 }
yihui 1:fc2f9d636751 93
yihui 1:fc2f9d636751 94 void nrf_nvmc_write_words(uint32_t address, const uint32_t * src, uint32_t num_words)
yihui 1:fc2f9d636751 95 {
yihui 1:fc2f9d636751 96 uint32_t i;
yihui 1:fc2f9d636751 97
yihui 1:fc2f9d636751 98 // Enable write.
yihui 1:fc2f9d636751 99 NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen;
yihui 1:fc2f9d636751 100 while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
yihui 1:fc2f9d636751 101 {
yihui 1:fc2f9d636751 102 }
yihui 1:fc2f9d636751 103
yihui 1:fc2f9d636751 104 for(i=0;i<num_words;i++)
yihui 1:fc2f9d636751 105 {
yihui 1:fc2f9d636751 106 ((uint32_t*)address)[i] = src[i];
yihui 1:fc2f9d636751 107 while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
yihui 1:fc2f9d636751 108 {
yihui 1:fc2f9d636751 109 }
yihui 1:fc2f9d636751 110 }
yihui 1:fc2f9d636751 111
yihui 1:fc2f9d636751 112 NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren;
yihui 1:fc2f9d636751 113 while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
yihui 1:fc2f9d636751 114 {
yihui 1:fc2f9d636751 115 }
yihui 1:fc2f9d636751 116 }
yihui 1:fc2f9d636751 117