mbed official / mbed-dev

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 189:f392fc9709a3 1 /***************************************************************************//**
AnnaBridge 189:f392fc9709a3 2 * @file clocking.h
AnnaBridge 189:f392fc9709a3 3 * @brief Clock selection calculations
AnnaBridge 189:f392fc9709a3 4 *******************************************************************************
AnnaBridge 189:f392fc9709a3 5 * @section License
AnnaBridge 189:f392fc9709a3 6 * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b>
AnnaBridge 189:f392fc9709a3 7 *******************************************************************************
AnnaBridge 189:f392fc9709a3 8 *
AnnaBridge 189:f392fc9709a3 9 * SPDX-License-Identifier: Apache-2.0
AnnaBridge 189:f392fc9709a3 10 *
AnnaBridge 189:f392fc9709a3 11 * Licensed under the Apache License, Version 2.0 (the "License"); you may
AnnaBridge 189:f392fc9709a3 12 * not use this file except in compliance with the License.
AnnaBridge 189:f392fc9709a3 13 * You may obtain a copy of the License at
AnnaBridge 189:f392fc9709a3 14 *
AnnaBridge 189:f392fc9709a3 15 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 189:f392fc9709a3 16 *
AnnaBridge 189:f392fc9709a3 17 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 189:f392fc9709a3 18 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
AnnaBridge 189:f392fc9709a3 19 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 189:f392fc9709a3 20 * See the License for the specific language governing permissions and
AnnaBridge 189:f392fc9709a3 21 * limitations under the License.
AnnaBridge 189:f392fc9709a3 22 *
AnnaBridge 189:f392fc9709a3 23 ******************************************************************************/
AnnaBridge 189:f392fc9709a3 24 #ifndef MBED_CLOCKING_H
AnnaBridge 189:f392fc9709a3 25 #define MBED_CLOCKING_H
AnnaBridge 189:f392fc9709a3 26
AnnaBridge 189:f392fc9709a3 27 #include "em_cmu.h"
AnnaBridge 189:f392fc9709a3 28
AnnaBridge 189:f392fc9709a3 29 /* Clock definitions */
AnnaBridge 189:f392fc9709a3 30 #define LFXO 0
AnnaBridge 189:f392fc9709a3 31 #define HFXO 1
AnnaBridge 189:f392fc9709a3 32 #define LFRCO 2
AnnaBridge 189:f392fc9709a3 33 #define HFRCO 3
AnnaBridge 189:f392fc9709a3 34 #if !defined(_EFM32_GECKO_FAMILY)
AnnaBridge 189:f392fc9709a3 35 #define ULFRCO 4
AnnaBridge 189:f392fc9709a3 36 #endif
AnnaBridge 189:f392fc9709a3 37
AnnaBridge 189:f392fc9709a3 38 /* Low Energy peripheral clock source.
AnnaBridge 189:f392fc9709a3 39 * Options:
AnnaBridge 189:f392fc9709a3 40 * * LFXO: external crystal, please define frequency.
AnnaBridge 189:f392fc9709a3 41 * * LFRCO: internal RC oscillator (32.768kHz)
AnnaBridge 189:f392fc9709a3 42 * * ULFRCO: internal ultra-low power RC oscillator (available down to EM3) (1kHz)
AnnaBridge 189:f392fc9709a3 43 */
AnnaBridge 189:f392fc9709a3 44 #ifndef LOW_ENERGY_CLOCK_SOURCE
AnnaBridge 189:f392fc9709a3 45 #define LOW_ENERGY_CLOCK_SOURCE LFXO
AnnaBridge 189:f392fc9709a3 46 #endif
AnnaBridge 189:f392fc9709a3 47
AnnaBridge 189:f392fc9709a3 48 /** Core clock source.
AnnaBridge 189:f392fc9709a3 49 * Options:
AnnaBridge 189:f392fc9709a3 50 * * HFXO: external crystal, please define frequency.
AnnaBridge 189:f392fc9709a3 51 * * HFRCO: High-frequency internal RC oscillator. Please select band as well.
AnnaBridge 189:f392fc9709a3 52 */
AnnaBridge 189:f392fc9709a3 53 #ifndef CORE_CLOCK_SOURCE
AnnaBridge 189:f392fc9709a3 54 #define CORE_CLOCK_SOURCE HFRCO
AnnaBridge 189:f392fc9709a3 55 #if defined(_CMU_HFRCOCTRL_BAND_MASK)
AnnaBridge 189:f392fc9709a3 56 #define HFRCO_FREQUENCY_ENUM _CMU_HFRCOCTRL_BAND_21MHZ
AnnaBridge 189:f392fc9709a3 57 #define HFRCO_FREQUENCY 21000000
AnnaBridge 189:f392fc9709a3 58 #elif defined(_CMU_HFRCOCTRL_FREQRANGE_MASK)
AnnaBridge 189:f392fc9709a3 59 #define HFRCO_FREQUENCY_ENUM cmuHFRCOFreq_32M0Hz
AnnaBridge 189:f392fc9709a3 60 #define HFRCO_FREQUENCY 32000000
AnnaBridge 189:f392fc9709a3 61 #endif
AnnaBridge 189:f392fc9709a3 62 #endif // CORE_CLOCK_SOURCE
AnnaBridge 189:f392fc9709a3 63
AnnaBridge 189:f392fc9709a3 64 #if !defined(LFXO_FREQUENCY) && (LOW_ENERGY_CLOCK_SOURCE == LFXO)
AnnaBridge 189:f392fc9709a3 65 #error "LFXO frequency is undefined!"
AnnaBridge 189:f392fc9709a3 66 #endif
AnnaBridge 189:f392fc9709a3 67
AnnaBridge 189:f392fc9709a3 68 #if !defined(HFXO_FREQUENCY) && (CORE_CLOCK_SOURCE == HFXO)
AnnaBridge 189:f392fc9709a3 69 #error "HFXO frequency is undefined!"
AnnaBridge 189:f392fc9709a3 70 #endif
AnnaBridge 189:f392fc9709a3 71
AnnaBridge 189:f392fc9709a3 72 #if (LOW_ENERGY_CLOCK_SOURCE == LFXO)
AnnaBridge 189:f392fc9709a3 73 #define LOW_ENERGY_CLOCK_FREQUENCY LFXO_FREQUENCY
AnnaBridge 189:f392fc9709a3 74 #elif (LOW_ENERGY_CLOCK_SOURCE == LFRCO)
AnnaBridge 189:f392fc9709a3 75 #define LOW_ENERGY_CLOCK_FREQUENCY 32768
AnnaBridge 189:f392fc9709a3 76 #elif (LOW_ENERGY_CLOCK_SOURCE == ULFRCO)
AnnaBridge 189:f392fc9709a3 77 #define LOW_ENERGY_CLOCK_FREQUENCY 1000
AnnaBridge 189:f392fc9709a3 78 #else
AnnaBridge 189:f392fc9709a3 79 #error "Unknown Low Energy Clock selection"
AnnaBridge 189:f392fc9709a3 80 #endif
AnnaBridge 189:f392fc9709a3 81
AnnaBridge 189:f392fc9709a3 82 #if( CORE_CLOCK_SOURCE == HFXO)
AnnaBridge 189:f392fc9709a3 83 # define REFERENCE_FREQUENCY HFXO_FREQUENCY
AnnaBridge 189:f392fc9709a3 84 #elif( CORE_CLOCK_SOURCE == HFRCO)
AnnaBridge 189:f392fc9709a3 85 #if !defined(HFRCO_FREQUENCY)
AnnaBridge 189:f392fc9709a3 86 # error "HFRCO frequency is not defined!"
AnnaBridge 189:f392fc9709a3 87 #else
AnnaBridge 189:f392fc9709a3 88 # define REFERENCE_FREQUENCY HFRCO_FREQUENCY
AnnaBridge 189:f392fc9709a3 89 #endif
AnnaBridge 189:f392fc9709a3 90 #endif
AnnaBridge 189:f392fc9709a3 91
AnnaBridge 189:f392fc9709a3 92 #if ( LOW_ENERGY_CLOCK_SOURCE == LFXO )
AnnaBridge 189:f392fc9709a3 93 # define LEUART_USING_LFXO
AnnaBridge 189:f392fc9709a3 94 # if ( (defined(CMU_CTRL_HFLE) || defined(CMU_CTRL_WSHFLE) ) && (REFERENCE_FREQUENCY > 24000000) )
AnnaBridge 189:f392fc9709a3 95 # define LEUART_HF_REF_FREQ (REFERENCE_FREQUENCY / 4)
AnnaBridge 189:f392fc9709a3 96 # else
AnnaBridge 189:f392fc9709a3 97 # define LEUART_HF_REF_FREQ (REFERENCE_FREQUENCY / 2)
AnnaBridge 189:f392fc9709a3 98 # endif
AnnaBridge 189:f392fc9709a3 99 # define LEUART_LF_REF_FREQ LFXO_FREQUENCY
AnnaBridge 189:f392fc9709a3 100 #else
AnnaBridge 189:f392fc9709a3 101 # if ( (defined(CMU_CTRL_HFLE) || defined(CMU_CTRL_WSHFLE) ) && (REFERENCE_FREQUENCY > 24000000) )
AnnaBridge 189:f392fc9709a3 102 # define LEUART_REF_FREQ (REFERENCE_FREQUENCY / 4)
AnnaBridge 189:f392fc9709a3 103 # else
AnnaBridge 189:f392fc9709a3 104 # define LEUART_REF_FREQ (REFERENCE_FREQUENCY / 2)
AnnaBridge 189:f392fc9709a3 105 # endif
AnnaBridge 189:f392fc9709a3 106 #endif
AnnaBridge 189:f392fc9709a3 107
AnnaBridge 189:f392fc9709a3 108 /* Adjust this to change speed of RTC and LP ticker ticks */
AnnaBridge 189:f392fc9709a3 109 #define RTC_CLOCKDIV cmuClkDiv_1
AnnaBridge 189:f392fc9709a3 110 /* Adjust this to match RTC_CLOCKDIV as integer value */
AnnaBridge 189:f392fc9709a3 111 #define RTC_CLOCKDIV_INT 1U
AnnaBridge 189:f392fc9709a3 112 /* Adjust this to match RTC_CLOCKDIV as shift for 1 second worth of ticks.
AnnaBridge 189:f392fc9709a3 113 * E.g. with 32768 Hz crystal and CLOCKDIV of 8, 1 second is 4096 ticks.
AnnaBridge 189:f392fc9709a3 114 * 4096 equals 1 << 12, so RTC_FREQ_SHIFT needs to be 12. */
AnnaBridge 189:f392fc9709a3 115 #define RTC_FREQ_SHIFT 15U
AnnaBridge 189:f392fc9709a3 116
AnnaBridge 189:f392fc9709a3 117 #endif