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

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. }