mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Fri Feb 21 12:15:10 2014 +0000
Revision:
104:a6a92e2e5a92
Parent:
85:e1a8e879a6a9
Child:
127:ce7cebc0511f
Synchronized with git revision 195a50befc6da080be0051d0d9bc0838f6cb873e

Full URL: https://github.com/mbedmicro/mbed/commit/195a50befc6da080be0051d0d9bc0838f6cb873e/

nrf-mbed merge

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 85:e1a8e879a6a9 1 /* mbed Microcontroller Library
mbed_official 85:e1a8e879a6a9 2
mbed_official 104:a6a92e2e5a92 3 * Copyright (c) 2013 Nordic Semiconductor.
mbed_official 85:e1a8e879a6a9 4 *
mbed_official 85:e1a8e879a6a9 5 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 85:e1a8e879a6a9 6 * you may not use this file except in compliance with the License.
mbed_official 85:e1a8e879a6a9 7 * You may obtain a copy of the License at
mbed_official 85:e1a8e879a6a9 8 *
mbed_official 85:e1a8e879a6a9 9 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 85:e1a8e879a6a9 10 *
mbed_official 85:e1a8e879a6a9 11 * Unless required by applicable law or agreed to in writing, software
mbed_official 85:e1a8e879a6a9 12 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 85:e1a8e879a6a9 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 85:e1a8e879a6a9 14 * See the License for the specific language governing permissions and
mbed_official 85:e1a8e879a6a9 15 * limitations under the License.
mbed_official 85:e1a8e879a6a9 16 */
mbed_official 85:e1a8e879a6a9 17
mbed_official 85:e1a8e879a6a9 18
mbed_official 85:e1a8e879a6a9 19 #include <stdint.h>
mbed_official 85:e1a8e879a6a9 20 #include <stdbool.h>
mbed_official 85:e1a8e879a6a9 21 #include "nrf51822.h"
mbed_official 85:e1a8e879a6a9 22 #include "system_nrf51822.h"
mbed_official 85:e1a8e879a6a9 23
mbed_official 85:e1a8e879a6a9 24
mbed_official 85:e1a8e879a6a9 25 #define __SYSTEM_CLOCK (16000000UL) //!< nRF51 devices use a fixed System Clock Frequency of 16MHz
mbed_official 85:e1a8e879a6a9 26
mbed_official 85:e1a8e879a6a9 27 static bool is_manual_peripheral_setup_needed(void);
mbed_official 85:e1a8e879a6a9 28 static bool is_disabled_in_debug_needed(void);
mbed_official 85:e1a8e879a6a9 29
mbed_official 85:e1a8e879a6a9 30
mbed_official 85:e1a8e879a6a9 31 #if defined ( __CC_ARM )
mbed_official 85:e1a8e879a6a9 32 uint32_t SystemCoreClock __attribute__((used)) = __SYSTEM_CLOCK;
mbed_official 85:e1a8e879a6a9 33 #elif defined ( __ICCARM__ )
mbed_official 85:e1a8e879a6a9 34 __root uint32_t SystemCoreClock = __SYSTEM_CLOCK;
mbed_official 85:e1a8e879a6a9 35 #elif defined ( __GNUC__ )
mbed_official 85:e1a8e879a6a9 36 uint32_t SystemCoreClock __attribute__((used)) = __SYSTEM_CLOCK;
mbed_official 85:e1a8e879a6a9 37 #endif
mbed_official 85:e1a8e879a6a9 38
mbed_official 85:e1a8e879a6a9 39
mbed_official 85:e1a8e879a6a9 40 void SystemCoreClockUpdate(void)
mbed_official 85:e1a8e879a6a9 41 {
mbed_official 85:e1a8e879a6a9 42 SystemCoreClock = __SYSTEM_CLOCK;
mbed_official 85:e1a8e879a6a9 43 }
mbed_official 85:e1a8e879a6a9 44
mbed_official 85:e1a8e879a6a9 45 void SystemInit(void)
mbed_official 104:a6a92e2e5a92 46 {
mbed_official 104:a6a92e2e5a92 47 NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos);
mbed_official 104:a6a92e2e5a92 48 while (NRF_NVMC->READY == NVMC_READY_READY_Busy){
mbed_official 104:a6a92e2e5a92 49 }
mbed_official 104:a6a92e2e5a92 50 //write FWID (NRF_UICR->FWID is readonly)
mbed_official 104:a6a92e2e5a92 51 *(uint32_t *)0x10001010 = 0xFFFF0049;
mbed_official 85:e1a8e879a6a9 52
mbed_official 104:a6a92e2e5a92 53 while (NRF_NVMC->READY == NVMC_READY_READY_Busy){
mbed_official 85:e1a8e879a6a9 54 }
mbed_official 104:a6a92e2e5a92 55
mbed_official 104:a6a92e2e5a92 56 NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos);
mbed_official 104:a6a92e2e5a92 57 while (NRF_NVMC->READY == NVMC_READY_READY_Busy){
mbed_official 104:a6a92e2e5a92 58 }
mbed_official 85:e1a8e879a6a9 59 // Prepare the peripherals for use as indicated by the PAN 26 "System: Manual setup is required
mbed_official 85:e1a8e879a6a9 60 // to enable the use of peripherals" found at Product Anomaly document for your device found at
mbed_official 85:e1a8e879a6a9 61 // https://www.nordicsemi.com/. The side effect of executing these instructions in the devices
mbed_official 85:e1a8e879a6a9 62 // that do not need it is that the new peripherals in the second generation devices (LPCOMP for
mbed_official 85:e1a8e879a6a9 63 // example) will not be available.
mbed_official 85:e1a8e879a6a9 64
mbed_official 85:e1a8e879a6a9 65 if (is_manual_peripheral_setup_needed()){
mbed_official 85:e1a8e879a6a9 66 *(uint32_t volatile *)0x40000504 = 0xC007FFDF;
mbed_official 85:e1a8e879a6a9 67 *(uint32_t volatile *)0x40006C18 = 0x00008000;
mbed_official 85:e1a8e879a6a9 68 }
mbed_official 85:e1a8e879a6a9 69
mbed_official 85:e1a8e879a6a9 70 // Disable PROTENSET registers under debug, as indicated by PAN 59 "MPU: Reset value of DISABLEINDEBUG
mbed_official 85:e1a8e879a6a9 71 // register is incorrect" found at Product Anomaly document four your device found at
mbed_official 85:e1a8e879a6a9 72 // https://www.nordicsemi.com/. There is no side effect of using these instruction if not needed.
mbed_official 85:e1a8e879a6a9 73 if (is_disabled_in_debug_needed()){
mbed_official 85:e1a8e879a6a9 74 NRF_MPU->DISABLEINDEBUG = MPU_DISABLEINDEBUG_DISABLEINDEBUG_Disabled << MPU_DISABLEINDEBUG_DISABLEINDEBUG_Pos;
mbed_official 85:e1a8e879a6a9 75 }
mbed_official 85:e1a8e879a6a9 76
mbed_official 85:e1a8e879a6a9 77 // Start 16 MHz crystal oscillator.
mbed_official 85:e1a8e879a6a9 78 NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;
mbed_official 85:e1a8e879a6a9 79 NRF_CLOCK->TASKS_HFCLKSTART = 1;
mbed_official 85:e1a8e879a6a9 80
mbed_official 85:e1a8e879a6a9 81 // Wait for the external oscillator to start up.
mbed_official 85:e1a8e879a6a9 82 while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0) {
mbed_official 85:e1a8e879a6a9 83 // Do nothing.
mbed_official 85:e1a8e879a6a9 84 }
mbed_official 85:e1a8e879a6a9 85 }
mbed_official 85:e1a8e879a6a9 86
mbed_official 85:e1a8e879a6a9 87 static bool is_manual_peripheral_setup_needed(void)
mbed_official 85:e1a8e879a6a9 88 {
mbed_official 85:e1a8e879a6a9 89 if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x1) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0))
mbed_official 85:e1a8e879a6a9 90 {
mbed_official 85:e1a8e879a6a9 91 if ((((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x00) && (((*(uint32_t *)0xF0000FEC) & 0x000000F0) == 0x0))
mbed_official 85:e1a8e879a6a9 92 {
mbed_official 85:e1a8e879a6a9 93 return true;
mbed_official 85:e1a8e879a6a9 94 }
mbed_official 85:e1a8e879a6a9 95 if ((((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x10) && (((*(uint32_t *)0xF0000FEC) & 0x000000F0) == 0x0))
mbed_official 85:e1a8e879a6a9 96 {
mbed_official 85:e1a8e879a6a9 97 return true;
mbed_official 85:e1a8e879a6a9 98 }
mbed_official 85:e1a8e879a6a9 99 if ((((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30) && (((*(uint32_t *)0xF0000FEC) & 0x000000F0) == 0x0))
mbed_official 85:e1a8e879a6a9 100 {
mbed_official 85:e1a8e879a6a9 101 return true;
mbed_official 85:e1a8e879a6a9 102 }
mbed_official 85:e1a8e879a6a9 103 }
mbed_official 85:e1a8e879a6a9 104
mbed_official 85:e1a8e879a6a9 105 return false;
mbed_official 85:e1a8e879a6a9 106 }
mbed_official 85:e1a8e879a6a9 107
mbed_official 85:e1a8e879a6a9 108 static bool is_disabled_in_debug_needed(void)
mbed_official 85:e1a8e879a6a9 109 {
mbed_official 85:e1a8e879a6a9 110 if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x1) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0))
mbed_official 85:e1a8e879a6a9 111 {
mbed_official 85:e1a8e879a6a9 112 if ((((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40) && (((*(uint32_t *)0xF0000FEC) & 0x000000F0) == 0x0))
mbed_official 85:e1a8e879a6a9 113 {
mbed_official 85:e1a8e879a6a9 114 return true;
mbed_official 85:e1a8e879a6a9 115 }
mbed_official 85:e1a8e879a6a9 116 }
mbed_official 85:e1a8e879a6a9 117
mbed_official 85:e1a8e879a6a9 118 return false;
mbed_official 85:e1a8e879a6a9 119 }
mbed_official 85:e1a8e879a6a9 120