示例#1
0
/*
 * 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);
}
示例#2
0
文件: rtc.c 项目: Lasitha78/elua
/*
  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);
}