void PWM_ISR ( void ) {
  ISR_ENTRY();
  //  LED_TOGGLE(2);
  if (servos_idx == 0) {
    IO1CLR = _BV(SERV1_RESET_PIN);
    IO1SET = _BV(SERV1_DATA_PIN);
    PWMMR0 = servos_values[servos_idx];
    servos_delay = SERVO_REFRESH_TICS - servos_values[servos_idx];
    PWMLER = PWMLER_LATCH0;
    servos_idx++;
  }
  else if (servos_idx < _4015_NB_CHANNELS) {
    IO1CLR = _BV(SERV1_DATA_PIN);
    PWMMR0 = servos_values[servos_idx];
    servos_delay -= servos_values[servos_idx];
    PWMLER = PWMLER_LATCH0;
    servos_idx++;
  }
  else {
    IO1SET = _BV(SERV1_RESET_PIN);
    PWMMR0 = servos_delay;
    PWMLER = PWMLER_LATCH0;
    servos_idx = 0;
  }
  /* clear the interrupt */
  PWMIR = PWMIR_MRI_SERV1;
  VICVectAddr = 0x00000000;
  ISR_EXIT();  
}
Exemple #2
0
static void SSP_ISR(void) {
 ISR_ENTRY();

 MmOnSpiIt();

 VICVectAddr = 0x00000000; /* clear this interrupt from the VIC */
 ISR_EXIT();
}
Exemple #3
0
__attribute__ ((naked)) void TIMER_0_ISR_0(void)
{
    ISR_ENTER();
    DEBUG("\nenter ISR\n");
    irq_handler(TIMER_0, TIMER_0_DEV_0, TIMER_0_DEV_1);
    DEBUG("leave ISR\n\n");
    ISR_EXIT();
}
/**
	Interrupt handler

	Simply calls the USB ISR, then signals end of interrupt to VIC
 */
void USBIntHandler(void)
{
    ISR_ENTRY();
    USBHwISR();

    VICVectAddr = 0x00;    // dummy write to VIC to signal end of ISR
    ISR_EXIT();
}
static void NACKEDFUNC ATTR
ws2812_int (void) /* SSC Interrupt Handler */ 
{
  ISR_ENTRY();
  ws2812_int_safe();
  *AT91C_AIC_EOICR = 0;                   /* End of Interrupt */
  ISR_EXIT();
}
Exemple #6
0
void EXTINT_ISR(void) {
  ISR_ENTRY();
  /* no, we won't do anything asynchronously, so just notify */
  ms2001_status = MS2001_GOT_EOC;
  /* clear EINT */
  EXTINT = (1<<MS2001_DRDY_EINT);
  VICVectAddr = 0x00000000;    /* clear this interrupt from the VIC */
  ISR_EXIT();
}
Exemple #7
0
void uart1_ISR(void) {
  // perform proper ISR entry so thumb-interwork works properly
  ISR_ENTRY();

  uart_ISR(&uart1);

  VICVectAddr = 0x00000000;             // clear this interrupt from the VIC
  ISR_EXIT();                           // recover registers and return
}
Exemple #8
0
void EXTINT_ISR(void)
{
  ISR_ENTRY();
  baro_scp_read();

  SetBit(EXTINT, SPI1_DRDY_EINT); /* clear EINT2 */
  VICVectAddr = 0x00000000; /* clear this interrupt from the VIC */
  ISR_EXIT();
}
Exemple #9
0
/**
	Interrupt handler
	
	Simply calls the USB ISR, then signals end of interrupt to VIC
 */
void USBIntHandler(void) 
{
    // do we really need this entry/exit stuff?
	 ISR_ENTRY(); 
	USBHwISR();
	
	VICVectAddr = 0x00;    // dummy write to VIC to signal end of ISR
	ISR_EXIT();
}
Exemple #10
0
/******* External interrupt: Data input available ***********/
void EXTINT_ISR(void) {
    ISR_ENTRY();

    max3100_data_available = true;

    SetBit(EXTINT, MAX3100_IRQ_EINT);   /* clear extint */
    VICVectAddr = 0x00000000; /* clear this interrupt from the VIC */

    ISR_EXIT();
}
Exemple #11
0
void i2c1_ISR(void) {
  ISR_ENTRY();

  uint32_t state = I2C1STAT;
  I2cAutomaton(state,&i2c1);
  I2cClearIT(i2c1.reg_addr);

  VICVectAddr = 0x00000000;             // clear this interrupt from the VIC
  ISR_EXIT();                           // recover registers and return
}
Exemple #12
0
void EXTINT_ISR(void) {
    ISR_ENTRY();

    /* scp1000 has measured new data, now it's time to read it from spi */
    scp1000_read();

    EXTINT |= 1 << SCP_DRDY_EINT; /* clear EINT */
    VICVectAddr = 0x00000000; /* clear this interrupt from the VIC */
    ISR_EXIT();
}
Exemple #13
0
/**
   Interrupt handler
        
   Simply calls the USB ISR, then signals end of interrupt to VIC
*/
void USBIntHandler(void) 
{
    ISR_ENTRY(); 
    //DBG("Z");
    USBHwISR();
    //DBG("z");
    VICVectAddr = 0x00;    // dummy write to VIC to signal end of ISR
    //DBG("Exit int\n");
    ISR_EXIT();
}
Exemple #14
0
void EXTINT0_ISR(void) {
  ISR_ENTRY();
  //ASSERT((max1168_status == MAX1168_SENDING_REQ),	DEBUG_MAX_1168, MAX1168_ERR_SPURIOUS_EOC);

  max1168_status = MAX1168_GOT_EOC;

  //SetBit(EXTINT, MAX1168_EOC_EINT);   /* clear extint0 */
  EXTINT = (1<<MAX1168_EOC_EINT);
  VICVectAddr = 0x00000000;             /* clear this interrupt from the VIC */

  ISR_EXIT();
}
Exemple #15
0
void i2c1_ISR(void)
{
    ISR_ENTRY();

    uint32_t state = I2C1_STATUS_REG;

    i2c1_automaton(state);
    I2c1ClearIT();

    VICVectAddr = 0x00000000;             // clear this interrupt from the VIC
    ISR_EXIT();                           // recover registers and return
}
Exemple #16
0
void EXTINT_ISR(void) {
  ISR_ENTRY();
//LED_TOGGLE(3);

  /* no, we won't do anything asynchronously, so just notify */
  micromag_status = MM_GOT_EOC;
  /* clear EINT */
  SetBit(EXTINT,MM_DRDY_EINT);
//  EXTINT = (1<<MM_DRDY_EINT);
  VICVectAddr = 0x00000000;    /* clear this interrupt from the VIC */
  ISR_EXIT();
}
Exemple #17
0
void ADC0_ISR ( void ) {
  ISR_ENTRY();
  uint32_t tmp = AD0GDR;
  uint16_t tmp2 = (uint16_t)(tmp >> 6) & 0x03FF;
  BatteryISRHandler(tmp2);
  /* trigger next convertion */
  T0MR1 += BOOZ2_ANALOG_BATTERY_PERIOD;
  /* lower clock         */
  T0EMR &= ~TEMR_EM1;
  VICVectAddr = 0x00000000;                 // clear this interrupt from the VIC
  ISR_EXIT();                               // recover registers and return
}
Exemple #18
0
__attribute__((naked)) void isr_exti4_15(void)
{
    ISR_ENTER();
    if (EXTI->PR & EXTI_PR_PR4) {
        EXTI->PR |= EXTI_PR_PR4;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_4].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR5) {
        EXTI->PR |= EXTI_PR_PR5;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_5].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR6) {
        EXTI->PR |= EXTI_PR_PR6;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_6].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR7) {
        EXTI->PR |= EXTI_PR_PR7;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_7].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR8) {
        EXTI->PR |= EXTI_PR_PR8;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_8].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR9) {
        EXTI->PR |= EXTI_PR_PR9;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_9].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR10) {
        EXTI->PR |= EXTI_PR_PR10;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_10].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR11) {
        EXTI->PR |= EXTI_PR_PR11;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_11].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR12) {
        EXTI->PR |= EXTI_PR_PR12;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_12].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR13) {
        EXTI->PR |= EXTI_PR_PR13;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_13].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR14) {
        EXTI->PR |= EXTI_PR_PR14;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_14].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR15) {
        EXTI->PR |= EXTI_PR_PR15;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_15].cb();
    }
    ISR_EXIT();
}
Exemple #19
0
__attribute__((naked)) void isr_exti4(void)
{
    ISR_ENTER();
    if (EXTI->PR & EXTI_PR_PR4) {
        EXTI->PR |= EXTI_PR_PR4;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_4].cb(config[GPIO_IRQ_4].arg);
    }

    if (sched_context_switch_request) {
        thread_yield();
    }
    ISR_EXIT();
}
Exemple #20
0
__attribute__((naked)) void isr_exti0_1(void)
{
    ISR_ENTER();
    if (EXTI->PR & EXTI_PR_PR0) {
        EXTI->PR |= EXTI_PR_PR0;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_0].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR1) {
        EXTI->PR |= EXTI_PR_PR1;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_1].cb();
    }
    ISR_EXIT();
}
Exemple #21
0
__attribute__((naked)) void isr_exti2_3(void)
{
    ISR_ENTER();
    if (EXTI->PR & EXTI_PR_PR2) {
        EXTI->PR |= EXTI_PR_PR2;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_2].cb();
    }
    else if (EXTI->PR & EXTI_PR_PR3) {
        EXTI->PR |= EXTI_PR_PR3;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_3].cb();
    }
    ISR_EXIT();
}
Exemple #22
0
__attribute__((naked)) void RTT_ISR(void)
{
    ISR_ENTER();

    if (RTT_DEV->CRL & RTC_CRL_ALRF) {
        RTT_DEV->CRL &= ~(RTC_CRL_ALRF);
        alarm_cb(alarm_arg);
    }
    if (sched_context_switch_request) {
        thread_yield();
    }
    ISR_EXIT();
}
Exemple #23
0
void  NACKEDFUNC ATTR system_int (void) {        /* System Interrupt Handler */
    volatile AT91S_PITC * pPIT = AT91C_BASE_PITC;

    ISR_ENTRY();

    if (pPIT->PITC_PISR & AT91C_PITC_PITS) {  /* Check PIT Interrupt */
        *AT91C_AIC_EOICR = pPIT->PITC_PIVR;     /* Ack & End of Interrupt */
        timeval++;                              /* Increment Time Tick */
    } else {
        *AT91C_AIC_EOICR = 0;                   /* End of Interrupt */
    }

    ISR_EXIT();
}
void EXTINT2_ISR(void) {
  ISR_ENTRY();
  /* read dummy control byte reply */
  uint8_t foo __attribute__ ((unused)) = SSPDR;
  /* trigger 2 bytes read */
  SSPDR = 0;
  SSPDR = 0;
  /* enable timeout interrupt */
  SpiEnableRti();
  /* clear EINT2 */
  SetBit(EXTINT,MM_DRDY_EINT); /* clear EINT2 */

  VICVectAddr = 0x00000000;    /* clear this interrupt from the VIC */
  ISR_EXIT();
}
Exemple #25
0
void  NACKEDFUNC ATTR system_int (void) {        /* System Interrupt Handler */
  volatile AT91S_PITC * pPIT = AT91C_BASE_PITC;

  ISR_ENTRY();

  if (pPIT->PITC_PISR & AT91C_PITC_PITS) {  /* Check PIT Interrupt */
    timeval++;                              /* Increment Time Tick */
    if ((timeval % 500) == 0) {             /* 500ms Elapsed ? */
      *AT91C_PIOA_ODSR ^= LED4;             /* Toggle LED4 */
    }
    *AT91C_AIC_EOICR = pPIT->PITC_PIVR;     /* Ack & End of Interrupt */
  } else {
    *AT91C_AIC_EOICR = 0;                   /* End of Interrupt */
  }
  
  ISR_EXIT();
}
Exemple #26
0
void TIMER_1_ISR1(void)
{
    ISR_ENTER();
    uint32_t status = TIMER_1_DEV->TC_CHANNEL[0].TC_SR;
    if (status & TC_SR_CPAS) {
        TIMER_1_DEV->TC_CHANNEL[0].TC_IDR = TC_IDR_CPAS;
        config[TIMER_1].cb(0);
    } 
    if (status & TC_SR_CPBS) {
        TIMER_1_DEV->TC_CHANNEL[0].TC_IDR = TC_IDR_CPBS;
        config[TIMER_1].cb(1);
    } 
    if (status & TC_SR_CPCS) {
        TIMER_1_DEV->TC_CHANNEL[0].TC_IDR = TC_IDR_CPCS;
        config[TIMER_1].cb(2);
    }
    ISR_EXIT();
}
Exemple #27
0
void TIMER_2_ISR2(void)
{
    ISR_ENTER();
    uint32_t status = TIMER_2_DEV->TC_CHANNEL[1].TC_SR;
    if (status & TC_SR_CPAS) {
        TIMER_2_DEV->TC_CHANNEL[1].TC_IDR = TC_IDR_CPAS;
        config[TIMER_2].cb(3);
    } 
    else if (status & TC_SR_CPBS) {
        TIMER_2_DEV->TC_CHANNEL[1].TC_IDR = TC_IDR_CPBS;
        config[TIMER_2].cb(4);
    } 
    else if (status & TC_SR_CPCS) {
        TIMER_2_DEV->TC_CHANNEL[1].TC_IDR = TC_IDR_CPCS;
        config[TIMER_2].cb(5);
    }
    ISR_EXIT();
}
Exemple #28
0
__attribute__((naked)) void isr_exti15_10(void)
{
    ISR_ENTER();
#ifdef GPIO_IRQ_10
    if (EXTI->PR & EXTI_PR_PR10) {
        EXTI->PR |= EXTI_PR_PR10;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_10].cb(config[GPIO_IRQ_10].arg);
    }
#endif
#ifdef GPIO_IRQ_11
    if (EXTI->PR & EXTI_PR_PR11) {
        EXTI->PR |= EXTI_PR_PR11;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_11].cb(config[GPIO_IRQ_11].arg);
    }
#endif
#ifdef GPIO_IRQ_12
    if (EXTI->PR & EXTI_PR_PR12) {
        EXTI->PR |= EXTI_PR_PR12;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_12].cb(config[GPIO_IRQ_12].arg);
    }
#endif
#ifdef GPIO_IRQ_13
    if (EXTI->PR & EXTI_PR_PR13) {
        EXTI->PR |= EXTI_PR_PR13;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_13].cb(config[GPIO_IRQ_13].arg);
    }
#endif
#ifdef GPIO_IRQ_14
    if (EXTI->PR & EXTI_PR_PR14) {
        EXTI->PR |= EXTI_PR_PR14;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_14].cb(config[GPIO_IRQ_14].arg);
    }
#endif
#ifdef GPIO_IRQ_15
    if (EXTI->PR & EXTI_PR_PR15) {
        EXTI->PR |= EXTI_PR_PR15;        /* clear status bit by writing a 1 to it */
        config[GPIO_IRQ_15].cb(config[GPIO_IRQ_15].arg);
    }
#endif
    if (sched_context_switch_request) {
        thread_yield();
    }
    ISR_EXIT();
}
Exemple #29
0
static void SSP_ISR(void) {
    ISR_ENTRY();

    switch (imu_spi_selected) 
    {
        case SPI_SLAVE_MAX1168:
            max1168_got_interrupt_retrieve_values();
            imu_spi_selected = SPI_NONE;
            break;
        case SPI_SLAVE_MM:
            micromag_got_interrupt_retrieve_values();
            if (micromag_status == MM_DATA_AVAILABLE)
                imu_spi_selected = SPI_NONE;
            break;
    }

    VICVectAddr = 0x00000000; /* clear this interrupt from the VIC */
    ISR_EXIT();
}
Exemple #30
0
static void SPI0_ISR(void) {
 ISR_ENTRY();

 static uint8_t cnt = 0;
 LED_TOGGLE(1);

 if ( bit_is_set(S0SPSR, SPIF)) { /* transfer complete  */
   uint8_t foo = S0SPDR;
   S0SPDR = cnt;
   cnt++;
 }

 /* clear_it */
 S0SPINT = 1<<SPI0IF;


 VICVectAddr = 0x00000000; /* clear this interrupt from the VIC */
 ISR_EXIT();
}