Keyboard firmwares for Atmel AVR and Cortex-M
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

bootloader_teensy.c 1.7KB

pirms 13 gadiem
pirms 13 gadiem
pirms 13 gadiem
pirms 13 gadiem
pirms 13 gadiem
pirms 13 gadiem
pirms 13 gadiem
pirms 13 gadiem
pirms 13 gadiem
pirms 13 gadiem
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. }