コード例 #1
0
ファイル: rtimer-arch.c プロジェクト: Amwam/contiki
/*---------------------------------------------------------------------------*/
void
halTimer1Isr(void)
{
  if(INT_TIM1FLAG & INT_TIMUIF) {
    rtimer_clock_t now, clock_to_wait;
    /* Overflow event. */
    /* PRINTF("O %4x.\r\n", TIM1_CNT); */
    /* printf("OV "); */
    time_msb++;
    now = ((rtimer_clock_t) time_msb << 16) | TIM1_CNT;
    clock_to_wait = next_rtimer_time - now;

    if(clock_to_wait <= 0x10000 && clock_to_wait > 0) { 
      /* We must now set the Timer Compare Register. */
      TIM1_CCR1 = (uint16_t) clock_to_wait;
      INT_TIM1FLAG = INT_TIMCC1IF;
      INT_TIM1CFG |= INT_TIMCC1IF;      /* Compare 1 interrupt enable. */
    }
    INT_TIM1FLAG = INT_TIMUIF;
  } else {
    if(INT_TIM1FLAG & INT_TIMCC1IF) {
      /* Compare event. */
      INT_TIM1CFG &= ~INT_TIMCC1IF;       /* Disable the next compare interrupt */
      PRINTF("\nCompare event %4x\r\n", TIM1_CNT);
      PRINTF("INT_TIM1FLAG %2x\r\n", INT_TIM1FLAG);
      ENERGEST_ON(ENERGEST_TYPE_IRQ);
      rtimer_run_next();
      ENERGEST_OFF(ENERGEST_TYPE_IRQ);
      INT_TIM1FLAG = INT_TIMCC1IF;
    }
  }
}
コード例 #2
0
ファイル: rtimer-arch.c プロジェクト: EmuxEvans/calipso
void TC1_Handler(void)
{
	volatile uint32_t ul_dummy;
	/* Clear status bit to acknowledge interrupt */
	ul_dummy = tc_get_status(TC0,1);
	
	#if RTIMER_DEBUG
	if ((ul_dummy & TC_SR_CPCS) == TC_SR_CPCS) {
	#endif
		tc_stop(TC0,1);	// Crucial, since the execution may take long time
	#if RTIMER_DEBUG
		printf("Compare event %16x\r\n", ul_dummy);
	#endif
		tc_disable_interrupt(TC0,1,TC_IDR_CPCS);  // Disable the next compare interrupt XXX XXX
		ENERGEST_ON(ENERGEST_TYPE_IRQ);
		rtimer_run_next(); /* Run the posted task. */
		ENERGEST_OFF(ENERGEST_TYPE_IRQ);
		
	#if RTIMER_DEBUG
	}
	else {
		printf("Unknown interrupt.\n\n");
	}
	#endif
	
}
コード例 #3
0
ファイル: rtimer-arch.c プロジェクト: leoqin/Contiki-leo
void rtc_isr(void) {
	PRINTF("rtc_wu_irq\n\r");
	PRINTF("now is %u\n", rtimer_arch_now());
	disable_rtc_wu();
	disable_rtc_wu_irq();
	rtimer_run_next();
	clear_rtc_wu_evt();
}
コード例 #4
0
ファイル: rtimer-arch.c プロジェクト: 1uk3/contiki
/*---------------------------------------------------------------------------*/
void
rtimer_callback(void)
{
  pic32_timer23_disable_irq();
  TMR2 = schedule;

  rtimer_run_next();
}
コード例 #5
0
ファイル: rtimer-arch.c プロジェクト: soohyunc/contiki-2.x
/*---------------------------------------------------------------------------*/
interrupt(TIMERA0_VECTOR) timera0 (void) {
  ENERGEST_ON(ENERGEST_TYPE_IRQ);
  rtimer_run_next();
  if(process_nevents() > 0) {
    LPM4_EXIT;
  }
  ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
コード例 #6
0
ファイル: rtimer-arch.c プロジェクト: jiandeng/contiki
/*---------------------------------------------------------------------------*/
void
RTC_IRQHandler(void)
{
    RTC->IFC = RTC_IFC_COMP0;
    RTC->IEN = 0x0000;
    ENERGEST_ON(ENERGEST_TYPE_IRQ);
    rtimer_run_next();
    ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
コード例 #7
0
ファイル: rtimer-arch.c プロジェクト: EasyRF/contiki
/*---------------------------------------------------------------------------*/
static void
rtc_compare_callback(void)
{
  ENERGEST_ON(ENERGEST_TYPE_IRQ);

  rtc_count_disable_callback(&rtc_instance, RTC_COUNT_CALLBACK_COMPARE_0);

  rtimer_run_next();

  ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
コード例 #8
0
void
OSTIMER_IRQHandler(void)
{
  ENERGEST_ON(ENERGEST_TYPE_IRQ);

  //clear RIT interrupt
  LPC_RITIMER->CTRL |= 1;
  NVIC_DisableIRQ(RIT_IRQn);

  rtimer_run_next();

  ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
コード例 #9
0
/*--------------------------------------------------------------------------*/
ISR(TIMER0_A1, rtimer_a01_isr)
{
  /* store the IV register as any read/write resets interrupt flags */
  uint16_t ivreg = TA0IV;

  if(ivreg & TA0IV_TACCR1) {
    /* rtimer interrupt */
    TA0CCTL1 &= ~CCIFG;
    watchdog_start();

    /* check for and run any pending rtimers */
    rtimer_run_next();

    /* also check for any pending events and wake up if needed */
    if(process_nevents() > 0) {
      LPM4_EXIT;
    }
    watchdog_stop();




  } else if(ivreg & TA0IV_TACCR2) {
    /* simple pwm interrupt */
    TA0CCTL2 &= ~CCIFG;

    if(spwm.on_time > 0) {
      if(spwm.on_time == period) {
        TA0CCTL2 &= ~CCIE;  /* no need for interrupt, is at 100% DC */
/*        SIMPLE_PWM_PORT(OUT) |= (1 << spwm.pin);*/
        pwm_on_cb();

      } else {
        /* normal on-case */
        if(period_end) {
          period_end = 0;
          TA0CCR2 = TAR + spwm.on_time;
/*          SIMPLE_PWM_PORT(OUT) |= (1 << spwm.pin);*/
          pwm_off_cb();

        } else {
          period_end = 1;
          TA0CCR2 = TAR + (period - spwm.on_time);
/*          SIMPLE_PWM_PORT(OUT) &= ~(1 << spwm.pin);*/
          pwm_on_cb();
        }
      }
    }
  }
}
コード例 #10
0
ファイル: rtimer-arch.c プロジェクト: chanhemow/contiki-fork
 timera0 (void) {
  ENERGEST_ON(ENERGEST_TYPE_IRQ);

  watchdog_start();

  rtimer_run_next();

  if(process_nevents() > 0) {
    LPM4_EXIT;
  }

  watchdog_stop();

  ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
コード例 #11
0
/* The AON RTC interrupt handler */
void
cc26xx_rtc_isr(void)
{
  ENERGEST_ON(ENERGEST_TYPE_IRQ);

  if(ti_lib_aon_rtc_event_get(AON_RTC_CH0)) {
    ti_lib_aon_rtc_event_clear(AON_RTC_CH0);
    rtimer_run_next();
  }

  if(ti_lib_aon_rtc_event_get(AON_RTC_CH2)) {
    ti_lib_aon_rtc_event_clear(AON_RTC_CH2);
    clock_update();
  }

  ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
コード例 #12
0
ファイル: rtimer-arch.c プロジェクト: gnkarn/Contiki
/** \brief Function for handling the TIMER1 interrupt.
 * TIMER1 interrupt is triggered on COMPARE[0]. \n
 * In this interrupt routine the rtimer count is incremented.
 * If an rtimer task is scheduled then the interrupt is disabled and
 * rtimer's next run function is called.
 */
void
TIMER0_IRQHandler ()
{
  /* Check if this is a compare event and not an overflow */
  if (NRF_TIMER0->EVENTS_COMPARE[0] == 1)
    {
      /* Reset the compare event */
      NRF_TIMER0->EVENTS_COMPARE[0] = 0;
      if (rtimer_scheduled)
	{
	  NVIC_DisableIRQ (TIMER0_IRQn);
	  rtimer_scheduled = false;
	  rtimer_run_next ();
	}
    } /* else it is overflow */
  else
    printf("OVERFLOW\n\r");
}
コード例 #13
0
ファイル: rtimer-arch.c プロジェクト: aiss83/nucbit
/*---------------------------------------------------------------------------*/
void halTimer1Isr(void)
{


    if(INT_TIM1FLAG & INT_TIMUIF)   // Overflow event.
    {

        //PRINTF("O %4x.\r\n", TIM1_CNT);
        //printf("OV ");

        time_msb++;
        rtimer_clock_t now =  ((rtimer_clock_t)time_msb << 16)|TIM1_CNT;

        rtimer_clock_t clock_to_wait = next_rtimer_time - now;

        if(clock_to_wait <= 0x10000 && clock_to_wait > 0)  // We must set now the Timer Compare Register.
        {

            TIM1_CCR1 = (int16u)clock_to_wait;
            INT_TIM1FLAG = INT_TIMCC1IF;
            INT_TIM1CFG |= INT_TIMCC1IF; // Compare 1 interrupt enable.
        }

        INT_TIM1FLAG = INT_TIMUIF;

    }

    else if(INT_TIM1FLAG & INT_TIMCC1IF)   // Compare event.
    {

        INT_TIM1CFG &= ~INT_TIMCC1IF;  // Disable the next compare interrupt

        PRINTF("\nCompare event %4x\r\n", TIM1_CNT);
        PRINTF("INT_TIM1FLAG %2x\r\n", INT_TIM1FLAG);
        ENERGEST_ON(ENERGEST_TYPE_IRQ);
        rtimer_run_next();
        ENERGEST_OFF(ENERGEST_TYPE_IRQ);
        INT_TIM1FLAG = INT_TIMCC1IF;

    }

}
コード例 #14
0
/*---------------------------------------------------------------------------*/
void
LPTMR_IRQHandler(void)
  {
    ENERGEST_ON(ENERGEST_TYPE_IRQ);

    watchdog_start();
    
    PRINTF("rtimer_arch_init compare event at 0x%4x.\n", rtimer_arch_now());

    LPTMR0_CMR = LPTMR_CMR_COMPARE(LPTMR_CMR_COMPARE_MASK);
    LPTMR0_CSR = (uint32_t) ((LPTMR0_CSR
        & (uint32_t) ~(uint32_t) (LPTMR_CSR_TIE_MASK))
    | (uint32_t) (LPTMR_CSR_TCF_MASK)); // Clear interrupt flag and disable interrupt

    rtimer_run_next();

    watchdog_stop();

    ENERGEST_OFF(ENERGEST_TYPE_IRQ);
  }
コード例 #15
0
void
TPM0_IRQHandler(void)
{
  ENERGEST_ON(ENERGEST_TYPE_IRQ);

  if (TPM_STATUS_CH0F_MASK & TPM0_STATUS)
    {
      /* disable tmp0 channel 0 interrupts */
      TPM0_C0SC &= ~TPM_CnSC_CHIE_MASK;
    }

  /* Clear interrupt flags */
  TPM0_STATUS = (TPM_STATUS_CH0F_MASK | TPM_STATUS_CH1F_MASK
      | TPM_STATUS_CH2F_MASK | TPM_STATUS_CH3F_MASK | TPM_STATUS_CH4F_MASK
      | TPM_STATUS_CH5F_MASK | TPM_STATUS_TOF_MASK);
    
  rtimer_run_next();

  ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
コード例 #16
0
ファイル: rtimer-arch.c プロジェクト: Spike0/Contiki_my
void RTC_IRQHandler(void)
{
  ENERGEST_ON(ENERGEST_TYPE_IRQ);
  // Find reason of IRQ

  if(RTC_IntGet() & RTC_IF_COMP0)
  {
    watchdog_start();
    rtimer_run_next();
    watchdog_stop();
    // disable interrupt
    RTC_IntDisable(RTC_IF_COMP0);
  }
  else
  {
    PRINTF("%s: unknown reason for RTC interrupt\r\n",__func__);
  }

  // Clear interrupts
  RTC_IntClear(_RTC_IF_MASK);

  ENERGEST_OFF(ENERGEST_TYPE_IRQ);
}
コード例 #17
0
ファイル: rtimer-arch.c プロジェクト: AWRyder/contiki
/*---------------------------------------------------------------------------*/
static void
interrupt(int sig)
{
  signal(sig, interrupt);
  rtimer_run_next();
}