The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
Diff: TARGET_EFM32GG_STK3700/TOOLCHAIN_IAR/clocking.h
- Revision:
- 171:3a7713b1edbc
- Parent:
- 169:a7c7b631e539
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_EFM32GG_STK3700/TOOLCHAIN_IAR/clocking.h Thu Nov 08 11:45:42 2018 +0000 @@ -0,0 +1,117 @@ +/***************************************************************************//** + * @file clocking.h + * @brief Clock selection calculations + ******************************************************************************* + * @section License + * <b>(C) Copyright 2015 Silicon Labs, http://www.silabs.com</b> + ******************************************************************************* + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ +#ifndef MBED_CLOCKING_H +#define MBED_CLOCKING_H + +#include "em_cmu.h" + +/* Clock definitions */ +#define LFXO 0 +#define HFXO 1 +#define LFRCO 2 +#define HFRCO 3 +#if !defined(_EFM32_GECKO_FAMILY) +#define ULFRCO 4 +#endif + +/* Low Energy peripheral clock source. + * Options: + * * LFXO: external crystal, please define frequency. + * * LFRCO: internal RC oscillator (32.768kHz) + * * ULFRCO: internal ultra-low power RC oscillator (available down to EM3) (1kHz) + */ +#ifndef LOW_ENERGY_CLOCK_SOURCE +#define LOW_ENERGY_CLOCK_SOURCE LFXO +#endif + +/** Core clock source. + * Options: + * * HFXO: external crystal, please define frequency. + * * HFRCO: High-frequency internal RC oscillator. Please select band as well. + */ +#ifndef CORE_CLOCK_SOURCE +#define CORE_CLOCK_SOURCE HFRCO +#if defined(_CMU_HFRCOCTRL_BAND_MASK) +#define HFRCO_FREQUENCY_ENUM _CMU_HFRCOCTRL_BAND_21MHZ +#define HFRCO_FREQUENCY 21000000 +#elif defined(_CMU_HFRCOCTRL_FREQRANGE_MASK) +#define HFRCO_FREQUENCY_ENUM cmuHFRCOFreq_32M0Hz +#define HFRCO_FREQUENCY 32000000 +#endif +#endif // CORE_CLOCK_SOURCE + +#if !defined(LFXO_FREQUENCY) && (LOW_ENERGY_CLOCK_SOURCE == LFXO) +#error "LFXO frequency is undefined!" +#endif + +#if !defined(HFXO_FREQUENCY) && (CORE_CLOCK_SOURCE == HFXO) +#error "HFXO frequency is undefined!" +#endif + +#if (LOW_ENERGY_CLOCK_SOURCE == LFXO) +#define LOW_ENERGY_CLOCK_FREQUENCY LFXO_FREQUENCY +#elif (LOW_ENERGY_CLOCK_SOURCE == LFRCO) +#define LOW_ENERGY_CLOCK_FREQUENCY 32768 +#elif (LOW_ENERGY_CLOCK_SOURCE == ULFRCO) +#define LOW_ENERGY_CLOCK_FREQUENCY 1000 +#else +#error "Unknown Low Energy Clock selection" +#endif + +#if( CORE_CLOCK_SOURCE == HFXO) +# define REFERENCE_FREQUENCY HFXO_FREQUENCY +#elif( CORE_CLOCK_SOURCE == HFRCO) +#if !defined(HFRCO_FREQUENCY) +# error "HFRCO frequency is not defined!" +#else +# define REFERENCE_FREQUENCY HFRCO_FREQUENCY +#endif +#endif + +#if ( LOW_ENERGY_CLOCK_SOURCE == LFXO ) +# define LEUART_USING_LFXO +# if ( (defined(CMU_CTRL_HFLE) || defined(CMU_CTRL_WSHFLE) ) && (REFERENCE_FREQUENCY > 24000000) ) +# define LEUART_HF_REF_FREQ (REFERENCE_FREQUENCY / 4) +# else +# define LEUART_HF_REF_FREQ (REFERENCE_FREQUENCY / 2) +# endif +# define LEUART_LF_REF_FREQ LFXO_FREQUENCY +#else +# if ( (defined(CMU_CTRL_HFLE) || defined(CMU_CTRL_WSHFLE) ) && (REFERENCE_FREQUENCY > 24000000) ) +# define LEUART_REF_FREQ (REFERENCE_FREQUENCY / 4) +# else +# define LEUART_REF_FREQ (REFERENCE_FREQUENCY / 2) +# endif +#endif + +/* Adjust this to change speed of RTC and LP ticker ticks */ +#define RTC_CLOCKDIV cmuClkDiv_1 +/* Adjust this to match RTC_CLOCKDIV as integer value */ +#define RTC_CLOCKDIV_INT 1U +/* Adjust this to match RTC_CLOCKDIV as shift for 1 second worth of ticks. + * E.g. with 32768 Hz crystal and CLOCKDIV of 8, 1 second is 4096 ticks. + * 4096 equals 1 << 12, so RTC_FREQ_SHIFT needs to be 12. */ +#define RTC_FREQ_SHIFT 15U + +#endif