Example #1
0
/***************************************************************************//**
 * @brief
 *   Get clock frequency of the BURTC.
 *
 * @return
 *   The current frequency in Hz.
 ******************************************************************************/
uint32_t BURTC_ClockFreqGet(void)
{
  uint32_t clkSel;
  uint32_t clkDiv;
  uint32_t frequency;

  clkSel = BURTC->CTRL & _BURTC_CTRL_CLKSEL_MASK;
  clkDiv = (BURTC->CTRL & _BURTC_CTRL_PRESC_MASK) >> _BURTC_CTRL_PRESC_SHIFT;

  switch (clkSel)
  {
  /** Ultra low frequency (1 kHz) clock */
  case BURTC_CTRL_CLKSEL_ULFRCO:
    if (_BURTC_CTRL_PRESC_DIV1 == clkDiv)
    {
      frequency = 2000;     /* 2KHz when clock divisor is 1. */
    }
    else
    {
      frequency = SystemULFRCOClockGet();  /* 1KHz when divisor is different
                                              from 1. */
    }
    break;

  /** Low frequency RC oscillator */
  case BURTC_CTRL_CLKSEL_LFRCO:
    frequency = SystemLFRCOClockGet() / (1 << clkDiv); /* freq=32768/2^clkDiv */
    break;

  /** Low frequency crystal osciallator */
  case BURTC_CTRL_CLKSEL_LFXO:
    frequency = SystemLFXOClockGet() / (1 << clkDiv); /* freq=32768/2^clkDiv */
    break;

  default:
    /* No clock selected for BURTC. */
    frequency = 0;
  }

  return frequency;
}
Example #2
0
/**************************************************************************//**
 * Initialize and start RTC.
 *****************************************************************************/
static void StartRTC( void )
{
  /* Enable LE */
  CMU->HFCORECLKEN0 |= CMU_HFCORECLKEN0_LE;

  /* Enable LFRCO for RTC */
  CMU->OSCENCMD = CMU_OSCENCMD_LFRCOEN;
  /* Setup LFA to use LFRCRO */
  CMU->LFCLKSEL = CMU_LFCLKSEL_LFA_LFRCO;
  /* Enable RTC */
  CMU->LFACLKEN0 = CMU_LFACLKEN0_RTC;

  /* Clear interrupt flags */
  RTC->IFC = RTC_IFC_COMP1 | RTC_IFC_COMP0 | RTC_IFC_OF;
  /* 250 ms wakeup time */
  RTC->COMP0 = ( PIN_LOOP_INTERVAL * SystemLFRCOClockGet() ) / 1000;
  /* Enable Interrupts on COMP0 */
  RTC->IEN = RTC_IEN_COMP0;
  /* Enable RTC interrupts */
  NVIC_EnableIRQ(RTC_IRQn);
  /* Enable RTC */
  RTC->CTRL = RTC_CTRL_COMP0TOP | RTC_CTRL_DEBUGRUN | RTC_CTRL_EN;
}