]>
git.gir.st - tmk_keyboard.git/blob - pjrc/jump_bootloader.c
1 /* See http://www.pjrc.com/teensy/jump_to_bootloader.html */
3 #include <avr/interrupt.h>
4 #include <util/delay.h>
6 void jump_bootloader(void) {
8 // disable watchdog, if enabled
9 // disable all peripherals
11 USBCON
= (1<<FRZCLK
); // disable USB
14 #if defined(__AVR_AT90USB162__) // Teensy 1.0
15 EIMSK
= 0; PCICR
= 0; SPCR
= 0; ACSR
= 0; EECR
= 0;
16 TIMSK0
= 0; TIMSK1
= 0; UCSR1B
= 0;
17 DDRB
= 0; DDRC
= 0; DDRD
= 0;
18 PORTB
= 0; PORTC
= 0; PORTD
= 0;
19 asm volatile("jmp 0x3E00");
20 #elif defined(__AVR_ATmega32U4__) // Teensy 2.0
21 EIMSK
= 0; PCICR
= 0; SPCR
= 0; ACSR
= 0; EECR
= 0; ADCSRA
= 0;
22 TIMSK0
= 0; TIMSK1
= 0; TIMSK3
= 0; TIMSK4
= 0; UCSR1B
= 0; TWCR
= 0;
23 DDRB
= 0; DDRC
= 0; DDRD
= 0; DDRE
= 0; DDRF
= 0; TWCR
= 0;
24 PORTB
= 0; PORTC
= 0; PORTD
= 0; PORTE
= 0; PORTF
= 0;
25 asm volatile("jmp 0x7E00");
26 #elif defined(__AVR_AT90USB646__) // Teensy++ 1.0
27 EIMSK
= 0; PCICR
= 0; SPCR
= 0; ACSR
= 0; EECR
= 0; ADCSRA
= 0;
28 TIMSK0
= 0; TIMSK1
= 0; TIMSK2
= 0; TIMSK3
= 0; UCSR1B
= 0; TWCR
= 0;
29 DDRA
= 0; DDRB
= 0; DDRC
= 0; DDRD
= 0; DDRE
= 0; DDRF
= 0;
30 PORTA
= 0; PORTB
= 0; PORTC
= 0; PORTD
= 0; PORTE
= 0; PORTF
= 0;
31 asm volatile("jmp 0xFC00");
32 #elif defined(__AVR_AT90USB1286__) // Teensy++ 2.0
33 EIMSK
= 0; PCICR
= 0; SPCR
= 0; ACSR
= 0; EECR
= 0; ADCSRA
= 0;
34 TIMSK0
= 0; TIMSK1
= 0; TIMSK2
= 0; TIMSK3
= 0; UCSR1B
= 0; TWCR
= 0;
35 DDRA
= 0; DDRB
= 0; DDRC
= 0; DDRD
= 0; DDRE
= 0; DDRF
= 0;
36 PORTA
= 0; PORTB
= 0; PORTC
= 0; PORTD
= 0; PORTE
= 0; PORTF
= 0;
37 asm volatile("jmp 0x1FC00");