Keyboard firmwares for Atmel AVR and Cortex-M
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

bootloader_teensy.c 1.7KB

13 лет назад
13 лет назад
13 лет назад
13 лет назад
13 лет назад
13 лет назад
13 лет назад
13 лет назад
13 лет назад
13 лет назад
12345678910111213141516171819202122232425262728293031323334353637383940
  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. #include "bootloader.h"
  6. void bootloader_jump(void) {
  7. cli();
  8. // disable watchdog, if enabled
  9. // disable all peripherals
  10. UDCON = 1;
  11. USBCON = (1<<FRZCLK); // disable USB
  12. UCSR1B = 0;
  13. _delay_ms(5);
  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");
  38. #endif
  39. }