; ; AVR Bootloader ; .org 0xF000 ;****************************************************************************** ; Code Begins at 0xF000 ; System IRQ jump table from 0xF000 - 0xF045 ;****************************************************************************** jmp RESET ; External Reset ldi irv, 0x02 rjmp INT0V ; External Interrupt Request 0 ldi irv, 0x04 rjmp INT1V ; External Interrupt Request 1 ldi irv, 0x06 rjmp INT2V ; External Interrupt Request 2 ldi irv, 0x08 rjmp PCINT0V ; Pin Change Interrupt Request 0 ldi irv, 0x0a rjmp PCINT1V ; Pin Change Interrupt Request 1 ldi irv, 0x0c rjmp PCINT2V ; Pin Change Interrupt Request 2 ldi irv, 0x0e rjmp PCINT3V ; Pin Change Interrupt Request 3 ldi irv, 0x10 rjmp WDT ; Watchdog Time-out Interrupt ldi irv, 0x12 rjmp TIMER2_COMPA ; Timer/Counter2 Compare Match A ldi irv, 0x14 rjmp TIMER2_COMPB ; Timer/Counter2 Compare Match B ldi irv, 0x16 rjmp TIMER2_OVF ; Timer/Counter2 Overflow ldi irv, 0x18 rjmp TIMER1_CAPT ; Timer/Counter1 Capture Event ldi irv, 0x1a rjmp TIMER1_COMPA ; Timer/Counter1 Compare Match A ldi irv, 0x1c rjmp TIMER1_COMPB ; Timer/Counter1 Compare Match B ldi irv, 0x1e rjmp TIMER1_OVF ; Timer/Counter1 Overflow ldi irv, 0x20 rjmp TIMER0_COMPA ; Timer/Counter0 Compare Match A ldi irv, 0x22 rjmp TIMER0_COMPB ; Timer/Counter0 Compare match B ldi irv, 0x24 rjmp TIMER0_OVF ; Timer/Counter0 Overflow ldi irv, 0x26 rjmp SPI_STC ; SPI Serial Transfer Complete ldi irv, 0x28 rjmp USART0_RX ; USART0 Rx Complete ldi irv, 0x2a rjmp USART0_UDRE ; USART0 Data Register Empty ldi irv, 0x2c rjmp USART0_TX ; USART0 Tx Complete ldi irv, 0x2e rjmp ANALOG_COMP ; Analog Comparator ldi irv, 0x01 ldi irv, 0x30 rjmp ADCC ; ADC Conversion Complete ldi irv, 0x32 rjmp EE_READY ; EEPROM Ready ldi irv, 0x34 rjmp TWI ; 2-wire Serial Interface ldi irv, 0x36 rjmp SPM_READY ; Store Program Memory Ready ldi irv, 0x38 rjmp USART1_RX ; USART1 Rx Complete ldi irv, 0x3a rjmp USART1_UDRE ; USART1 Data Register Empty ldi irv, 0x3c rjmp USART1_TX ; USART1 Tx Complete ldi irv, 0x3e rjmp TIMER3_CAPT ; Timer/Counter3 Capture Event ldi irv, 0x40 rjmp TIMER3_COMPA ; Timer/Counter3 Compare Match A ldi irv, 0x42 rjmp TIMER3_COMPB ; Timer/Counter3 Compare Match B ldi irv, 0x44 rjmp TIMER3_OVF ; Timer/Counter3 Overflow ;****************************************************************************** ; unused IRQ vector's point to software reset code ;****************************************************************************** INT0V: ; External Interrupt Request 0 INT1V: ; External Interrupt Request 1 INT2V: ; External Interrupt Request 2 PCINT0V: ; Pin Change Interrupt Request 0 PCINT1V: ; Pin Change Interrupt Request 1 PCINT2V: ; Pin Change Interrupt Request 2 PCINT3V: ; Pin Change Interrupt Request 3 WDT: ; Watchdog Time-out Interrupt TIMER2_COMPA: ; Timer/Counter2 Compare Match A TIMER2_COMPB: ; Timer/Counter2 Compare Match B TIMER2_OVF: ; Timer/Counter2 Overflow TIMER1_CAPT: ; Timer/Counter1 Capture Event TIMER1_COMPA: ; Timer/Counter1 Compare Match A TIMER1_COMPB: ; Timer/Counter1 Compare Match B TIMER1_OVF: ; Timer/Counter1 Overflow TIMER0_COMPA: ; Timer/Counter0 Compare Match A TIMER0_COMPB: ; Timer/Counter0 Compare match B TIMER0_OVF: ; Timer/Counter0 Overflow SPI_STC: ; SPI Serial Transfer Complete USART0_RX: ; USART0 Rx Complete USART0_UDRE: ; USART0 Data Register Empty USART0_TX: ; USART0 Tx Complete ANALOG_COMP: ; Analog Comparator ADCC: ; ADC Conversion Complete EE_READY: ; EEPROM Ready TWI: ; 2-wire Serial Interface SPM_READY: ; Store Program Memory Ready USART1_RX: ; USART1 Rx Complete USART1_UDRE: ; USART1 Data Register Empty USART1_TX: ; USART1 Tx Complete TIMER3_CAPT: ; Timer/Counter3 Capture Event TIMER3_COMPA: ; Timer/Counter3 Compare Match A TIMER3_COMPB: ; Timer/Counter3 Compare Match B TIMER3_OVF: ; Timer/Counter3 Overflow ; master IRQ handler or IFLAG, one ; IRQ trigger flag, bit 0 ret ; do not set I flag here ;****************************************************************************** ; Program Starts here on Reset ;****************************************************************************** RESET: ; first line executed after reset CLI ; disable interupts ; move IRQ table to bootloader in i, mcucr andi i, 0xfc mov j, i ori i, 0x01 ori j, 0x02 out mcucr, i out mcucr, j ; IRQ jump table in bootloader ;****************************************************************************** ; Initialize the I/O Ports ;****************************************************************************** ; port A pins ldi i, 0xff ; out porta, i ; LDI i, 0x00 ; out ddra, i ; ; port B pins LDI i, 0xff ; out portb, i ; LDI i, 0x00 ; out ddrb, i ; ; port C pins ldi i, 0xff ; out portc, i ; LDI i, 0x00 ; out ddrc, i ; ; port D pins ldi i, 0xff ; out portd, i ; LDI i, 0x00 ; out ddrd, i ; ;****************************************************************************** ; Init other CPU I/O registers ;****************************************************************************** ldi i, 0x80 out ACSR, i ; turn off comparator ldi i, 0x40 ; set stack pointer to top of SRAM out SPH, i ; ldi i, 0xff ; out SPL, i ; ;****************************************************************************** ; Init RS-232 port ;****************************************************************************** ; set baud rate ldi i, 0x0C ; ; 16MHZ 20MHZ 24MHz ldi j, 0x00 ; 115200 xxxx 000A 000C sts UBRR0H, j ; 19200 0033 0040 004D sts UBRR0L, i ; 9600 0067 0081 009B ; 4800 00CF 0103 0137 ; 2400 019F 0208 0270 ; Enable receiver and transmitter ldi i, (1<