Keyboard firmwares for Atmel AVR and Cortex-M
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
преди 13 години
123456789101112131415161718192021222324252627282930313233343536373839
  1. /* See http://www.pjrc.com/teensy/jump_to_bootloader.html */
  2. #include <avr/io.h>
  3. #include <avr/interrupt.h>
  4. #include <util/delay.h>
  5. void jump_bootloader(void) {
  6. cli();
  7. // disable watchdog, if enabled
  8. // disable all peripherals
  9. UDCON = 1;
  10. USBCON = (1<<FRZCLK); // disable USB
  11. UCSR1B = 0;
  12. _delay_ms(5);
  13. #if defined(__AVR_AT90USB162__) // Teensy 1.0
  14. EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0;
  15. TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0;
  16. DDRB = 0; DDRC = 0; DDRD = 0;
  17. PORTB = 0; PORTC = 0; PORTD = 0;
  18. asm volatile("jmp 0x3E00");
  19. #elif defined(__AVR_ATmega32U4__) // Teensy 2.0
  20. EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
  21. TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0; UCSR1B = 0; TWCR = 0;
  22. DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; TWCR = 0;
  23. PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
  24. asm volatile("jmp 0x7E00");
  25. #elif defined(__AVR_AT90USB646__) // Teensy++ 1.0
  26. EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
  27. TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0;
  28. DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
  29. PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
  30. asm volatile("jmp 0xFC00");
  31. #elif defined(__AVR_AT90USB1286__) // Teensy++ 2.0
  32. EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
  33. TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0;
  34. DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
  35. PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
  36. asm volatile("jmp 0x1FC00");
  37. #endif
  38. }