/***************************************************************************//**\r
* @file system_efm32gg.c\r
* @brief CMSIS Cortex-M3 System Layer for EFM32GG devices.\r
- * @version 4.0.0\r
+ * @version 4.2.1\r
******************************************************************************\r
* @section License\r
- * <b>(C) Copyright 2015 Silicon Laboratories, Inc. http://www.silabs.com</b>\r
+ * <b>Copyright 2015 Silicon Laboratories, Inc. http://www.silabs.com</b>\r
******************************************************************************\r
*\r
* Permission is granted to anyone to use this software for any purpose,\r
/* SW footprint. */\r
\r
#ifndef EFM32_HFXO_FREQ\r
-#ifdef _EFM32_GIANT_FAMILY\r
#define EFM32_HFXO_FREQ (48000000UL)\r
-#else\r
-#define EFM32_HFXO_FREQ (32000000UL)\r
-#endif\r
#endif\r
+\r
+#define EFM32_HFRCO_MAX_FREQ (28000000UL)\r
+\r
/* Do not define variable if HF crystal oscillator not present */\r
#if (EFM32_HFXO_FREQ > 0)\r
/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */\r
-/** System HFXO clock. */ \r
+/** System HFXO clock. */\r
static uint32_t SystemHFXOClock = EFM32_HFXO_FREQ;\r
/** @endcond (DO_NOT_INCLUDE_WITH_DOXYGEN) */\r
#endif\r
\r
-#ifndef EFM32_LFXO_FREQ \r
+#ifndef EFM32_LFXO_FREQ\r
#define EFM32_LFXO_FREQ (EFM32_LFRCO_FREQ)\r
#endif\r
+\r
/* Do not define variable if LF crystal oscillator not present */\r
#if (EFM32_LFXO_FREQ > 0)\r
/** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */\r
-/** System LFXO clock. */ \r
+/** System LFXO clock. */\r
static uint32_t SystemLFXOClock = EFM32_LFXO_FREQ;\r
/** @endcond (DO_NOT_INCLUDE_WITH_DOXYGEN) */\r
#endif\r
uint32_t SystemCoreClockGet(void)\r
{\r
uint32_t ret;\r
- \r
+\r
ret = SystemHFClockGet();\r
-#if defined (_EFM32_GIANT_FAMILY)\r
/* Leopard/Giant Gecko has an additional divider */\r
ret = ret / (1 + ((CMU->CTRL & _CMU_CTRL_HFCLKDIV_MASK)>>_CMU_CTRL_HFCLKDIV_SHIFT));\r
-#endif\r
- ret >>= (CMU->HFCORECLKDIV & _CMU_HFCORECLKDIV_HFCORECLKDIV_MASK) >> \r
+ ret >>= (CMU->HFCORECLKDIV & _CMU_HFCORECLKDIV_HFCORECLKDIV_MASK) >>\r
_CMU_HFCORECLKDIV_HFCORECLKDIV_SHIFT;\r
\r
/* Keep CMSIS variable up-to-date just in case */\r
}\r
\r
\r
+/***************************************************************************//**\r
+ * @brief\r
+ * Get the maximum core clock frequency.\r
+ *\r
+ * @note\r
+ * This is an EFR32 proprietary function, not part of the CMSIS definition.\r
+ *\r
+ * @return\r
+ * The maximum core clock frequency in Hz.\r
+ ******************************************************************************/\r
+uint32_t SystemMaxCoreClockGet(void)\r
+{\r
+ return (EFM32_HFRCO_MAX_FREQ > EFM32_HFXO_FREQ ? \\r
+ EFM32_HFRCO_MAX_FREQ : EFM32_HFXO_FREQ);\r
+}\r
+\r
+\r
/***************************************************************************//**\r
* @brief\r
* Get the current HFCLK frequency.\r
uint32_t SystemHFClockGet(void)\r
{\r
uint32_t ret;\r
- \r
+\r
switch (CMU->STATUS & (CMU_STATUS_HFRCOSEL | CMU_STATUS_HFXOSEL |\r
CMU_STATUS_LFRCOSEL | CMU_STATUS_LFXOSEL))\r
{\r
ret = 0;\r
#endif\r
break;\r
- \r
+\r
case CMU_STATUS_LFRCOSEL:\r
ret = EFM32_LFRCO_FREQ;\r
break;\r
- \r
+\r
case CMU_STATUS_HFXOSEL:\r
#if (EFM32_HFXO_FREQ > 0)\r
ret = SystemHFXOClock;\r
ret = 0;\r
#endif\r
break;\r
- \r
+\r
default: /* CMU_STATUS_HFRCOSEL */\r
switch (CMU->HFRCOCTRL & _CMU_HFRCOCTRL_BAND_MASK)\r
{\r