Keyboard firmwares for Atmel AVR and Cortex-M
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

bootloader_teensy.c 1.7KB

13 anos atrás
13 anos atrás
13 anos atrás
13 anos atrás
13 anos atrás
13 anos atrás
13 anos atrás
13 anos atrás
13 anos atrás
13 anos atrás
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. }