Patched version of nrf51822 FOTA compatible driver, with GPTIO disabled, as it clashed with the mbed definitions...

Fork of nRF51822 by Nordic Semiconductor

Committer:
finneyj
Date:
Thu May 21 09:35:07 2015 +0000
Revision:
177:dad139e1e3c4
Parent:
103:138bdc859cc9
Disabled GPTIOE as it conflicts with mbed definitions.

Who changed what in which revision?

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