/* * API to initialize the CLOCK_XMC1 APP Interrupts */ CLOCK_XMC1_STATUS_t CLOCK_XMC1_Init(CLOCK_XMC1_t *handle) { CLOCK_XMC1_STATUS_t status = CLOCK_XMC1_STATUS_SUCCESS; CLOCK_XMC1_STATUS_t loci_event_status = CLOCK_XMC1_STATUS_SUCCESS; CLOCK_XMC1_STATUS_t stdbyclkfail_status = CLOCK_XMC1_STATUS_SUCCESS; CLOCK_XMC1_STATUS_t loss_ext_clock_event_status = CLOCK_XMC1_STATUS_SUCCESS; CLOCK_XMC1_STATUS_t dco1_out_sync_status = CLOCK_XMC1_STATUS_SUCCESS; if (handle->init_status == false) { #ifdef CLOCK_XMC1_INTERRUPT_ENABLED status = (CLOCK_XMC1_STATUS_t)GLOBAL_SCU_XMC1_Init(handle->global_scu_handleptr); if (CLOCK_XMC1_STATUS_SUCCESS == status) { #ifdef CLOCK_XMC1_LOCI_EVENT_ENABLED /* Initialization of CPU_CTRL_XMC1 APP */ loci_event_status = (CLOCK_XMC1_STATUS_t)GLOBAL_SCU_XMC1_RegisterCallback( GLOBAL_SCU_XMC1_EVENT_LOCI, handle->callback_function_loci); /* Enable Loss of DCO1 Clock Event */ XMC_SCU_INTERRUPT_EnableEvent(GLOBAL_SCU_XMC1_EVENT_LOCI); #endif #ifdef CLOCK_XMC1_STDBYCLKFAIL_EVENT_ENABLED /* Initialization of CPU_CTRL_XMC1 APP */ stdbyclkfail_status = (CLOCK_XMC1_STATUS_t)GLOBAL_SCU_XMC1_RegisterCallback( GLOBAL_SCU_XMC1_EVENT_STDBYCLKFAIL, handle->callback_function_stdbyclkfail); /* Enable Standby Clock Failure Event */ XMC_SCU_INTERRUPT_EnableEvent(GLOBAL_SCU_XMC1_EVENT_STDBYCLKFAIL); #endif #if (UC_SERIES == XMC14) #ifdef CLOCK_XMC1_LOSS_EXT_CLOCK_EVENT_ENABLED /* Initialization of CPU_CTRL_XMC1 APP */ loss_ext_clock_event_status = (CLOCK_XMC1_STATUS_t)GLOBAL_SCU_XMC1_RegisterCallback( GLOBAL_SCU_XMC1_EVENT_LOSS_EXT_CLOCK, handle->callback_function_loss_ext_clock); /* Enable Loss of external OSC_HP clock Event */ XMC_SCU_INTERRUPT_EnableEvent(GLOBAL_SCU_XMC1_EVENT_LOSS_EXT_CLOCK); #endif #ifdef CLOCK_XMC1_DCO1_OUT_SYNC_EVENT_ENABLED /* Initialization of CPU_CTRL_XMC1 APP */ dco1_out_sync_status = (CLOCK_XMC1_STATUS_t)GLOBAL_SCU_XMC1_RegisterCallback( GLOBAL_SCU_XMC1_EVENT_DCO1_OUT_SYNC, handle->callback_function_dco1_out_sync); /* Enable DCO1 Out of SYNC Event */ XMC_SCU_INTERRUPT_EnableEvent(GLOBAL_SCU_XMC1_EVENT_DCO1_OUT_SYNC); #endif #endif } #endif status = (CLOCK_XMC1_STATUS_t)(((uint32_t)loci_event_status) | ((uint32_t)stdbyclkfail_status) | ((uint32_t)loss_ext_clock_event_status) | ((uint32_t)dco1_out_sync_status)); if (CLOCK_XMC1_STATUS_SUCCESS == status) { handle->init_status = true; } } return (status); }
/* Initialization function for the APP. Configures the registers based on options selected in UI. */ RTC_STATUS_t RTC_Init(RTC_t *const handler) { XMC_RTC_STATUS_t status; RTC_STATUS_t rtc_initstatus; bool interrupt_configured; XMC_ASSERT("RTC_Init: NULL Handler", handler != NULL); status = XMC_RTC_STATUS_OK; rtc_initstatus = RTC_STATUS_FAILURE; #if (RTC_INTERRUPT_ENABLED == 1) #if (UC_FAMILY == XMC4) rtc_initstatus = (RTC_STATUS_t)GLOBAL_SCU_XMC4_Init(GLOBAL_SCU_HANDLE); #else rtc_initstatus = (RTC_STATUS_t)GLOBAL_SCU_XMC1_Init(GLOBAL_SCU_HANDLE); #endif if (rtc_initstatus == RTC_STATUS_SUCCESS) { #endif if (handler->initialized == false) { /* Initialize the clock source and pre-scalar */ status = XMC_RTC_Init(handler->time_alarm_config); if (status == XMC_RTC_STATUS_OK) { /* Configure periodic, alarm and hibernate periodic interrupts */ interrupt_configured = RTC_lConfigureInterrupts(handler); if (interrupt_configured == true) { status = RTC_lRegister_Callbacks(handler); } if (status == XMC_RTC_STATUS_OK) { /* Check RTC start during init is set or not in UI */ if (handler->config->start == RTC_START_ENABLE) { RTC_Start(); } handler->initialized = true; rtc_initstatus = RTC_STATUS_SUCCESS; } } else { rtc_initstatus = RTC_STATUS_FAILURE; } } else { rtc_initstatus = RTC_STATUS_SUCCESS; } #if (RTC_INTERRUPT_ENABLED == 1) } /* end of if(rtc_initstatus == GLOBAL_SCU_XMC4_STATUS_OK) */ #endif return (rtc_initstatus); }