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

13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
13 роки тому
12345678910111213141516171819202122232425262728293031323334353637383940
  1. // this code from:
  2. // http://www.pjrc.com/teensy/jump_to_bootloader.html
  3. #include <avr/io.h>
  4. #include <avr/interrupt.h>
  5. #include <util/delay.h>
  6. void jump_bootloader(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. }