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