示例#1
0
文件: hal.c 项目: alesuarez/PF
/*************************************************************************//**
*****************************************************************************/
void HAL_Init(void)
{
  // Switch to 8MHz clock (disable prescaler)
  SYSCTRL_OSC8M = (SYSCTRL_OSC8M & ~SYSCTRL_OSC8M_PRESC_MSK) | SYSCTRL_OSC8M_PRESC(0);

  SYS_EnableInterrupts();

  HAL_TimerInit();
  halPhyInit();
}
示例#2
0
/**
 * \brief Initializes clock generators
 *
 * All GCLK generators are running when this function returns.
 */
void _sysctrl_init_sources(void)
{
	void *hw = (void *)SYSCTRL;
	uint16_t calib;

#if CONF_XOSC32K_CONFIG == 1
		hri_sysctrl_write_XOSC32K_reg(hw,
			( CONF_XOSC32K_WRTLOCK << SYSCTRL_XOSC32K_WRTLOCK_Pos ) |
			SYSCTRL_XOSC32K_STARTUP(CONF_XOSC32K_STARTUP) |
			( CONF_XOSC32K_RUNSTDBY << SYSCTRL_XOSC32K_RUNSTDBY_Pos ) |
			( CONF_XOSC32K_AAMPEN << SYSCTRL_XOSC32K_AAMPEN_Pos ) |
			( CONF_XOSC32K_EN1K << SYSCTRL_XOSC32K_EN1K_Pos ) |
			( CONF_XOSC32K_EN32K << SYSCTRL_XOSC32K_EN32K_Pos ) |
			( CONF_XOSC32K_XTALEN << SYSCTRL_XOSC32K_XTALEN_Pos ) |
			( CONF_XOSC32K_ENABLE << SYSCTRL_XOSC32K_ENABLE_Pos ));
#endif

#if CONF_XOSC_CONFIG == 1
		hri_sysctrl_write_XOSC_reg(hw, SYSCTRL_XOSC_STARTUP(
				CONF_XOSC_STARTUP) |
			( CONF_XOSC_AMPGC << SYSCTRL_XOSC_AMPGC_Pos ) |
			SYSCTRL_XOSC_GAIN(CONF_XOSC_GAIN) |
			( CONF_XOSC_RUNSTDBY << SYSCTRL_XOSC_RUNSTDBY_Pos ) |
			( CONF_XOSC_XTALEN << SYSCTRL_XOSC_XTALEN_Pos ) |
			( CONF_XOSC_ENABLE << SYSCTRL_XOSC_ENABLE_Pos ));
#endif

#if CONF_OSC8M_CONFIG == 1
		calib = hri_sysctrl_read_OSC8M_CALIB_bf(hw);

		hri_sysctrl_write_OSC8M_reg(hw,
			SYSCTRL_OSC8M_FRANGE(hri_sysctrl_read_OSC8M_FRANGE_bf(hw)) |
#    if CONF_OSC8M_OVERWRITE_CALIBRATION == 1
				SYSCTRL_OSC8M_CALIB(CONF_OSC8M_CALIB) |
#    else
					SYSCTRL_OSC8M_CALIB(calib) |
#    endif
				SYSCTRL_OSC8M_PRESC(CONF_OSC8M_PRESC) |
				( CONF_OSC8M_RUNSTDBY << SYSCTRL_OSC8M_RUNSTDBY_Pos ) |
				( CONF_OSC8M_ENABLE << SYSCTRL_OSC8M_ENABLE_Pos ));
#endif

#if CONF_OSC32K_CONFIG == 1
				calib = SYSCTRL->OSC32K.bit.CALIB;

				hri_sysctrl_write_OSC32K_reg(hw,
#    if CONF_OSC32K_OVERWRITE_CALIBRATION == 1
				SYSCTRL_OSC32K_CALIB(CONF_OSC32K_CALIB) |
#    else
					SYSCTRL_OSC32K_CALIB(calib) |
#    endif
				( CONF_OSC32K_WRTLOCK << SYSCTRL_OSC32K_WRTLOCK_Pos ) |
				SYSCTRL_OSC32K_STARTUP(CONF_OSC32K_STARTUP) |
				( CONF_OSC32K_RUNSTDBY << SYSCTRL_OSC32K_RUNSTDBY_Pos ) |
				( CONF_OSC32K_EN1K << SYSCTRL_OSC32K_EN1K_Pos ) |
				( CONF_OSC32K_EN32K << SYSCTRL_OSC32K_EN32K_Pos ) |
				( 1 << SYSCTRL_OSC32K_ENABLE_Pos ));
#else
				    /* Enable OSC32K anyway since GCLK configuration may need it to sync */
					hri_sysctrl_set_OSC32K_ENABLE_bit(hw);
#endif

#if CONF_OSCULP32K_CONFIG == 1
					hri_sysctrl_write_OSCULP32K_reg(hw,
#    if OSC32K_OVERWRITE_CALIBRATION == 1
				SYSCTRL_OSCULP32K_CALIB(OSCULP32K_CALIB) |
#    else
					SYSCTRL_OSCULP32K_CALIB(calib) |
#    endif
				( CONF_OSC32K_WRTLOCK << SYSCTRL_OSCULP32K_WRTLOCK_Pos ));
#endif

#if CONF_XOSC32K_CONFIG == 1
#    if CONF_XOSC32K_ENABLE == 1
					while (!hri_sysctrl_get_PCLKSR_XOSC32KRDY_bit(hw)) {;
					}
#    endif
#    if CONF_XOSC32K_ONDEMAND == 1
					hri_sysctrl_set_XOSC32K_ONDEMAND_bit(hw);
#    endif
#endif

#if CONF_XOSC_CONFIG == 1
#    if CONF_XOSC_ENABLE == 1
					while (!hri_sysctrl_get_PCLKSR_XOSCRDY_bit(hw)) {;
					}
#    endif
#    if CONF_XOSC_ONDEMAND == 1
					hri_sysctrl_set_XOSC_ONDEMAND_bit(hw);
#    endif
#endif

#if CONF_OSC32K_CONFIG == 1
#    if CONF_OSC32K_ENABLE == 1
					while (!hri_sysctrl_get_PCLKSR_OSC32KRDY_bit(hw)) {;
					}
#    endif
#    if CONF_OSC32K_ONDEMAND == 1
					hri_sysctrl_set_OSC32K_ONDEMAND_bit(hw);
#    endif
#endif

#if CONF_OSC8M_CONFIG == 1
#    if CONF_OSC8M_ENABLE == 1
					while (!hri_sysctrl_get_PCLKSR_OSC8MRDY_bit(hw)) {;
					}
#    endif
#    if CONF_OSC8M_ONDEMAND == 1
					hri_sysctrl_set_OSC8M_ONDEMAND_bit(hw);
#    endif
#endif

			(void)calib, (void)hw;
}