Atmega328 ISR vector names [TIM1_COMPA_vect]

February 18, 2012

I recently spent a lot of time trying to get a simple 1ms tick working on an Atmega328p. I was trying to use the timers and an ISR, the datasheet does not give the names of the ISR vectors but after checking online I found that in my case I needed ISR( TIM1_COMPA_vect ).

With this i got this error:

Warning 1 ‘TIM1_COMPA_vect’ appears to be a misspelled signal handler

It seems that with AVR Studio you have to use new vector names, look here nongnu.org/avr-libc/user-manual/group__avr__interrupts.html#avr_signames and search by the device you are using to find the correct names. After changing the vector name for the correct one the code works perfectly.

uint16_t tick_counter = 0;
//ISR for an output compare match on the A compare register in timer 1
ISR(TIMER1_COMPA_vect)
{

  tick_counter++;

  if (tick_counter >= 1000){
    PORTB ^= (1 << PORTB5);
    tick_counter = 0;
  }

  return;
}

The full vector name list is below:

/* Interrupt Vectors */
/* Interrupt Vector 0 is the reset vector. */
#define INT0_vect _VECTOR(1) /* External Interrupt Request 0 */
#define INT1_vect _VECTOR(2) /* External Interrupt Request 1 */
#define PCINT0_vect _VECTOR(3) /* Pin Change Interrupt Request 0 */
#define PCINT1_vect _VECTOR(4) /* Pin Change Interrupt Request 0 */
#define PCINT2_vect _VECTOR(5) /* Pin Change Interrupt Request 1 */
#define WDT_vect _VECTOR(6) /* Watchdog Time-out Interrupt */
#define TIMER2_COMPA_vect _VECTOR(7) /* Timer/Counter2 Compare Match A */
#define TIMER2_COMPB_vect _VECTOR(8) /* Timer/Counter2 Compare Match A */
#define TIMER2_OVF_vect _VECTOR(9) /* Timer/Counter2 Overflow */
#define TIMER1_CAPT_vect _VECTOR(10) /* Timer/Counter1 Capture Event */
#define TIMER1_COMPA_vect _VECTOR(11) /* Timer/Counter1 Compare Match A */
#define TIMER1_COMPB_vect _VECTOR(12) /* Timer/Counter1 Compare Match B */
#define TIMER1_OVF_vect _VECTOR(13) /* Timer/Counter1 Overflow */
#define TIMER0_COMPA_vect _VECTOR(14) /* TimerCounter0 Compare Match A */
#define TIMER0_COMPB_vect _VECTOR(15) /* TimerCounter0 Compare Match B */
#define TIMER0_OVF_vect _VECTOR(16) /* Timer/Couner0 Overflow */
#define SPI_STC_vect _VECTOR(17) /* SPI Serial Transfer Complete */
#define USART_RX_vect _VECTOR(18) /* USART Rx Complete */
#define USART_UDRE_vect _VECTOR(19) /* USART, Data Register Empty */
#define USART_TX_vect _VECTOR(20) /* USART Tx Complete */
#define ADC_vect _VECTOR(21) /* ADC Conversion Complete */
#define EE_READY_vect _VECTOR(22) /* EEPROM Ready */
#define ANALOG_COMP_vect _VECTOR(23) /* Analog Comparator */
#define TWI_vect _VECTOR(24) /* Two-wire Serial Interface */
#define SPM_READY_vect _VECTOR(25) /* Store Program Memory Read */

Tags: ,

Leave a Comment