Ejemplo n.º 1
0
/*************************************************************************//**
*****************************************************************************/
void HAL_TimerInit(void)
{
	halTimerIrqCount = 0;

	PM->APBCMASK.reg					|= PM_APBCMASK_TC4;
	GCLK->CLKCTRL.reg					= GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_ID(0x15/*TC4,TC5*/) | GCLK_CLKCTRL_GEN(0);

	SYSTIMER.CTRLA.reg					= TC_CTRLA_MODE(TC_CTRLA_MODE_COUNT16_Val)
										| TC_CTRLA_WAVEGEN(TC_CTRLA_WAVEGEN_MFRQ_Val)
										| TC_CTRLA_PRESCALER(3 /*DIV8*/)
										| TC_CTRLA_PRESCSYNC(TC_CTRLA_PRESCSYNC_PRESC_Val);
	halTimerSync();

	SYSTIMER.COUNT.reg					= 0;
	halTimerSync();

	SYSTIMER.CC[0].reg					= TIMER_TOP;
	halTimerSync();

	SYSTIMER.CTRLA.reg					= TC_CTRLA_ENABLE;
	halTimerSync();

	SYSTIMER.INTENSET.reg				= TC_INTENSET_MC(0);
	NVIC_EnableIRQ(TC4_IRQn);
}
Ejemplo n.º 2
0
/*************************************************************************//**
*****************************************************************************/
void HAL_TimerDelay(uint16_t us)
{
  uint16_t target = TC4_16_COUNT + us;

  if (target > TIMER_TOP)
    target -= TIMER_TOP;

  TC4_16_CC1 = target;
  halTimerSync();

  halTimerDelayInt = 0;
  TC4_16_INTENSET = TC4_16_INTENSET_MC1;
  while (0 == halTimerDelayInt);
  TC4_16_INTENCLR = TC4_16_INTENCLR_MC1;
}
Ejemplo n.º 3
0
/*************************************************************************//**
*****************************************************************************/
void HAL_TimerInit(void)
{
  halTimerIrqCount = 0;

  PM_APBCMASK |= PM_APBCMASK_TC4;

  GCLK_CLKCTRL = GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_ID(0x15/*TC4,TC5*/) | GCLK_CLKCTRL_GEN(0);

  TC4_16_CTRLA = TC4_16_CTRLA_MODE(0/*16 bit*/) | TC4_16_CTRLA_WAVEGEN(1/*MFRQ*/) |
      TC4_16_CTRLA_PRESCALER(3/*DIV8*/) | TC4_16_CTRLA_PRESCSYNC(0x1/*PRESC*/);
  halTimerSync();

  TC4_16_COUNT = 0;
  halTimerSync();

  TC4_16_CC0 = TIMER_TOP;
  halTimerSync();

  TC4_16_CTRLA |= TC4_16_CTRLA_ENABLE;
  halTimerSync();

  TC4_16_INTENSET = TC4_16_INTENSET_MC0;
  NVIC_ISER = NVIC_ISER_TC4;
}
Ejemplo n.º 4
0
/*************************************************************************//**
*****************************************************************************/
void HAL_TimerDelay(uint16_t us)
{
	uint16_t			target			= SYSTIMER.COUNT.reg + us;

	if(target > TIMER_TOP)
		target							-= TIMER_TOP;

	SYSTIMER.CC[1].reg					= target;
	halTimerSync();

	halTimerDelayInt					= 0;
	SYSTIMER.INTENSET.reg				= TC_INTENSET_MC(1);
	while(0 == halTimerDelayInt);
	SYSTIMER.INTENCLR.reg				= TC_INTENCLR_MC(1);
}