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:
Wed Mar 19 17:15:21 2014 +0000
Revision:
127:ce7cebc0511f
Parent:
104:a6a92e2e5a92
Synchronized with git revision 92d3e97e186ceaa812d103009822fb1a21d797de

Full URL: https://github.com/mbedmicro/mbed/commit/92d3e97e186ceaa812d103009822fb1a21d797de/

Merge after reverting the python scripts to generating hex file with UICR

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 127:ce7cebc0511f 46 {
mbed_official 85:e1a8e879a6a9 47 // Prepare the peripherals for use as indicated by the PAN 26 "System: Manual setup is required
mbed_official 85:e1a8e879a6a9 48 // to enable the use of peripherals" found at Product Anomaly document for your device found at
mbed_official 85:e1a8e879a6a9 49 // https://www.nordicsemi.com/. The side effect of executing these instructions in the devices
mbed_official 85:e1a8e879a6a9 50 // that do not need it is that the new peripherals in the second generation devices (LPCOMP for
mbed_official 85:e1a8e879a6a9 51 // example) will not be available.
mbed_official 85:e1a8e879a6a9 52 if (is_manual_peripheral_setup_needed()){
mbed_official 85:e1a8e879a6a9 53 *(uint32_t volatile *)0x40000504 = 0xC007FFDF;
mbed_official 85:e1a8e879a6a9 54 *(uint32_t volatile *)0x40006C18 = 0x00008000;
mbed_official 85:e1a8e879a6a9 55 }
mbed_official 85:e1a8e879a6a9 56
mbed_official 85:e1a8e879a6a9 57 // Disable PROTENSET registers under debug, as indicated by PAN 59 "MPU: Reset value of DISABLEINDEBUG
mbed_official 85:e1a8e879a6a9 58 // register is incorrect" found at Product Anomaly document four your device found at
mbed_official 85:e1a8e879a6a9 59 // https://www.nordicsemi.com/. There is no side effect of using these instruction if not needed.
mbed_official 85:e1a8e879a6a9 60 if (is_disabled_in_debug_needed()){
mbed_official 85:e1a8e879a6a9 61 NRF_MPU->DISABLEINDEBUG = MPU_DISABLEINDEBUG_DISABLEINDEBUG_Disabled << MPU_DISABLEINDEBUG_DISABLEINDEBUG_Pos;
mbed_official 85:e1a8e879a6a9 62 }
mbed_official 85:e1a8e879a6a9 63
mbed_official 85:e1a8e879a6a9 64 // Start 16 MHz crystal oscillator.
mbed_official 85:e1a8e879a6a9 65 NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;
mbed_official 85:e1a8e879a6a9 66 NRF_CLOCK->TASKS_HFCLKSTART = 1;
mbed_official 85:e1a8e879a6a9 67
mbed_official 85:e1a8e879a6a9 68 // Wait for the external oscillator to start up.
mbed_official 85:e1a8e879a6a9 69 while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0) {
mbed_official 85:e1a8e879a6a9 70 // Do nothing.
mbed_official 85:e1a8e879a6a9 71 }
mbed_official 85:e1a8e879a6a9 72 }
mbed_official 85:e1a8e879a6a9 73
mbed_official 85:e1a8e879a6a9 74 static bool is_manual_peripheral_setup_needed(void)
mbed_official 85:e1a8e879a6a9 75 {
mbed_official 85:e1a8e879a6a9 76 if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x1) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0))
mbed_official 85:e1a8e879a6a9 77 {
mbed_official 85:e1a8e879a6a9 78 if ((((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x00) && (((*(uint32_t *)0xF0000FEC) & 0x000000F0) == 0x0))
mbed_official 85:e1a8e879a6a9 79 {
mbed_official 85:e1a8e879a6a9 80 return true;
mbed_official 85:e1a8e879a6a9 81 }
mbed_official 85:e1a8e879a6a9 82 if ((((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x10) && (((*(uint32_t *)0xF0000FEC) & 0x000000F0) == 0x0))
mbed_official 85:e1a8e879a6a9 83 {
mbed_official 85:e1a8e879a6a9 84 return true;
mbed_official 85:e1a8e879a6a9 85 }
mbed_official 85:e1a8e879a6a9 86 if ((((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30) && (((*(uint32_t *)0xF0000FEC) & 0x000000F0) == 0x0))
mbed_official 85:e1a8e879a6a9 87 {
mbed_official 85:e1a8e879a6a9 88 return true;
mbed_official 85:e1a8e879a6a9 89 }
mbed_official 85:e1a8e879a6a9 90 }
mbed_official 85:e1a8e879a6a9 91
mbed_official 85:e1a8e879a6a9 92 return false;
mbed_official 85:e1a8e879a6a9 93 }
mbed_official 85:e1a8e879a6a9 94
mbed_official 85:e1a8e879a6a9 95 static bool is_disabled_in_debug_needed(void)
mbed_official 85:e1a8e879a6a9 96 {
mbed_official 85:e1a8e879a6a9 97 if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x1) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0))
mbed_official 85:e1a8e879a6a9 98 {
mbed_official 85:e1a8e879a6a9 99 if ((((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40) && (((*(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