CLOCK_XMC1: CLOCK_XMC1.c Source File

CLOCK XMC1

CLOCK_XMC1
CLOCK_XMC1.c
Go to the documentation of this file.
00001 
00054 /***********************************************************************************************************************
00055  * HEADER FILES                                                                                                      
00056  **********************************************************************************************************************/
00057 #include "clock_xmc1.h"
00058 
00059 /***********************************************************************************************************************
00060  * MACROS
00061  **********************************************************************************************************************/
00062 
00063 /***********************************************************************************************************************
00064  * LOCAL DATA
00065  **********************************************************************************************************************/
00066 
00067 /***********************************************************************************************************************
00068  * LOCAL ROUTINES
00069  **********************************************************************************************************************/
00070 
00071 /***********************************************************************************************************************
00072 * API IMPLEMENTATION
00073 ***********************************************************************************************************************/
00074 /*  API to retrieve version of the APP */
00075 DAVE_APP_VERSION_t CLOCK_XMC1_GetAppVersion(void)
00076 {
00077   DAVE_APP_VERSION_t version;
00078   version.major = (uint8_t)CLOCK_XMC1_MAJOR_VERSION;
00079   version.minor = (uint8_t)CLOCK_XMC1_MINOR_VERSION;
00080   version.patch = (uint8_t)CLOCK_XMC1_PATCH_VERSION;
00081 
00082   return (version);
00083 }
00084 
00085 /*
00086  * API to initialize the CLOCK_XMC1 APP Interrupts
00087  */
00088 CLOCK_XMC1_STATUS_t CLOCK_XMC1_Init(CLOCK_XMC1_t *handle)
00089 {
00090   CLOCK_XMC1_STATUS_t status = CLOCK_XMC1_STATUS_SUCCESS;
00091   CLOCK_XMC1_STATUS_t loci_event_status = CLOCK_XMC1_STATUS_SUCCESS;
00092   CLOCK_XMC1_STATUS_t stdbyclkfail_status = CLOCK_XMC1_STATUS_SUCCESS;
00093   CLOCK_XMC1_STATUS_t loss_ext_clock_event_status = CLOCK_XMC1_STATUS_SUCCESS;
00094   CLOCK_XMC1_STATUS_t dco1_out_sync_status = CLOCK_XMC1_STATUS_SUCCESS;
00095   if (handle->init_status == false)
00096   {
00097 #ifdef CLOCK_XMC1_INTERRUPT_ENABLED
00098 
00099     status = (CLOCK_XMC1_STATUS_t)GLOBAL_SCU_XMC1_Init(handle->global_scu_handleptr);
00100     if (CLOCK_XMC1_STATUS_SUCCESS == status)
00101     {
00102 #ifdef CLOCK_XMC1_LOCI_EVENT_ENABLED
00103       /* Initialization of CPU_CTRL_XMC1 APP */
00104       loci_event_status = (CLOCK_XMC1_STATUS_t)GLOBAL_SCU_XMC1_RegisterCallback(
00105                            GLOBAL_SCU_XMC1_EVENT_LOCI, handle->callback_function_loci);
00106       /* Enable Loss of DCO1 Clock Event */
00107       XMC_SCU_INTERRUPT_EnableEvent(GLOBAL_SCU_XMC1_EVENT_LOCI);
00108 #endif
00109 #ifdef CLOCK_XMC1_STDBYCLKFAIL_EVENT_ENABLED
00110       /* Initialization of CPU_CTRL_XMC1 APP */
00111       stdbyclkfail_status = (CLOCK_XMC1_STATUS_t)GLOBAL_SCU_XMC1_RegisterCallback(
00112                              GLOBAL_SCU_XMC1_EVENT_STDBYCLKFAIL, handle->callback_function_stdbyclkfail);
00113       /* Enable Standby Clock Failure Event */
00114       XMC_SCU_INTERRUPT_EnableEvent(GLOBAL_SCU_XMC1_EVENT_STDBYCLKFAIL);
00115 #endif
00116 
00117 #if (UC_SERIES == XMC14)
00118 
00119 #ifdef CLOCK_XMC1_LOSS_EXT_CLOCK_EVENT_ENABLED
00120       /* Initialization of CPU_CTRL_XMC1 APP */
00121       loss_ext_clock_event_status = (CLOCK_XMC1_STATUS_t)GLOBAL_SCU_XMC1_RegisterCallback(
00122                                      GLOBAL_SCU_XMC1_EVENT_LOSS_EXT_CLOCK, handle->callback_function_loss_ext_clock);
00123       /* Enable Loss of external OSC_HP clock Event */
00124       XMC_SCU_INTERRUPT_EnableEvent(GLOBAL_SCU_XMC1_EVENT_LOSS_EXT_CLOCK);
00125 #endif
00126 #ifdef CLOCK_XMC1_DCO1_OUT_SYNC_EVENT_ENABLED
00127       /* Initialization of CPU_CTRL_XMC1 APP */
00128       dco1_out_sync_status = (CLOCK_XMC1_STATUS_t)GLOBAL_SCU_XMC1_RegisterCallback(
00129                               GLOBAL_SCU_XMC1_EVENT_DCO1_OUT_SYNC, handle->callback_function_dco1_out_sync);
00130       /* Enable  DCO1 Out of SYNC Event */
00131       XMC_SCU_INTERRUPT_EnableEvent(GLOBAL_SCU_XMC1_EVENT_DCO1_OUT_SYNC);
00132 #endif
00133 
00134 #endif
00135     }
00136 
00137 #endif
00138     status = (CLOCK_XMC1_STATUS_t)(((uint32_t)loci_event_status) | ((uint32_t)stdbyclkfail_status) |
00139                                        ((uint32_t)loss_ext_clock_event_status) | ((uint32_t)dco1_out_sync_status));
00140     if (CLOCK_XMC1_STATUS_SUCCESS == status)
00141     {
00142       handle->init_status = true;
00143     }
00144   }
00145   return (status);
00146 }
00147 
00148 /*  API for ramping up/down the system clock frequency  */
00149 void CLOCK_XMC1_SetMCLKFrequency(uint32_t freq_khz)
00150 {
00151   XMC_SCU_CLOCK_SetMCLKFrequency(freq_khz);
00152 }
00153 
00154 #if (CLOCK_XMC1_OSCHP_ENABLED)
00155 /*  API to retrieve high precision external oscillator frequency */
00156 uint32_t OSCHP_GetFrequency(void)
00157 {
00158   return (CLOCK_XMC1_OSCHP_FREQUENCY);
00159 }
00160 #endif
00161 
00162 #if (CLOCK_XMC1_DCO1_CALIBRATION_ENABLED)
00163 /*  API to check whether DCO1 is synchronized to the XTAL frequency */
00164 bool CLOCK_XMC1_IsDCO1ExtRefCalibrationReady(void)
00165 {
00166   return (XMC_SCU_CLOCK_IsDCO1ExtRefCalibrationReady());
00167 }
00168 #endif