add jump_bootloader.
This commit is contained in:
		
							
								
								
									
										3
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Makefile
									
									
									
									
									
								
							| @@ -51,7 +51,8 @@ SRC =	$(TARGET).c \ | ||||
| 	usb_device.c \ | ||||
| 	usb_keyboard.c \ | ||||
| 	usb_debug.c \ | ||||
| 	print.c | ||||
| 	print.c \ | ||||
| 	jump_bootloader.c | ||||
|  | ||||
|  | ||||
| # MCU name, you MUST set this to match the board you are using | ||||
|   | ||||
							
								
								
									
										35
									
								
								jump_bootloader.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								jump_bootloader.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| // this code from: | ||||
| // http://www.pjrc.com/teensy/jump_to_bootloader.html | ||||
| #include <avr/io.h> | ||||
| #include <avr/interrupt.h> | ||||
| #include <util/delay.h> | ||||
|  | ||||
| void jump_bootloader() { | ||||
|     cli(); | ||||
|     // disable watchdog, if enabled | ||||
|     // disable all peripherals | ||||
|     UDCON = 1; | ||||
|     USBCON = (1<<FRZCLK);  // disable USB | ||||
|     UCSR1B = 0; | ||||
|     _delay_ms(5); | ||||
| #if defined(__AVR_AT90USB162__)                // Teensy 1.0 | ||||
|     DDRB = 0; DDRC = 0; DDRD = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; | ||||
|     asm volatile("jmp 0x1F00"); | ||||
| #elif defined(__AVR_ATmega32U4__)              // Teensy 2.0 | ||||
|     DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0; | ||||
|     ADCSRA = 0; | ||||
|     asm volatile("jmp 0x3F00"); | ||||
| #elif defined(__AVR_AT90USB646__)              // Teensy++ 1.0 | ||||
|     DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; | ||||
|     ADCSRA = 0; | ||||
|     asm volatile("jmp 0x7E00"); | ||||
| #elif defined(__AVR_AT90USB1286__)             // Teensy++ 2.0 | ||||
|     DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; | ||||
|     ADCSRA = 0; | ||||
|     asm volatile("jmp 0xFE00"); | ||||
| #endif  | ||||
| } | ||||
							
								
								
									
										6
									
								
								jump_bootloader.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								jump_bootloader.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| #ifndef JUMP_BOOTLOADER_H | ||||
| #define JUMP_BOOTLOADER_H 1 | ||||
|  | ||||
| void jump_bootloader(void); | ||||
|  | ||||
| #endif | ||||
							
								
								
									
										12
									
								
								mykey.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								mykey.c
									
									
									
									
									
								
							| @@ -34,6 +34,7 @@ | ||||
| #include "print.h" | ||||
| #include "matrix.h" | ||||
| #include "keymap.h" | ||||
| #include "jump_bootloader.h" | ||||
|  | ||||
| #define LED_CONFIG    (DDRD |= (1<<6)) | ||||
| #define LED_ON        (PORTD &= ~(1<<6)) | ||||
| @@ -111,6 +112,13 @@ int main(void) | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // run bootloader when 4 left modifier keys down | ||||
|             if (keyboard_modifier_keys == (MOD_LCTRL | MOD_LSHIFT | MOD_LALT | MOD_LGUI)) { | ||||
|                 print("jump to bootloader...\n"); | ||||
|                 _delay_ms(1000); | ||||
|                 jump_bootloader(); | ||||
|             } | ||||
|  | ||||
|             if (key_index > 6) { | ||||
|                 //Rollover | ||||
|             } | ||||
| @@ -128,7 +136,7 @@ int main(void) | ||||
|  | ||||
|         // print matrix state for debug | ||||
|         if (modified) { | ||||
|             print("r/c 01234567\n"); | ||||
|             print("\nr/c 01234567\n"); | ||||
|             for (row = 0; row < MATRIX_ROWS; row++) { | ||||
|                 phex(row); print(": "); | ||||
|                 pbin_reverse(matrix[row]); | ||||
| @@ -159,6 +167,6 @@ ISR(TIMER0_OVF_vect) | ||||
|     idle_count++; | ||||
|     if (idle_count > 61 * 8) { | ||||
|         idle_count = 0; | ||||
|         //print("Timer Event :)\n"); | ||||
|         print("."); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -10,6 +10,16 @@ | ||||
| #define KEYBOARD_SIZE		8 | ||||
| #define KEYBOARD_BUFFER		EP_DOUBLE_BUFFER | ||||
|  | ||||
| // modifier bits | ||||
| #define MOD_LCTRL   (1<<0) | ||||
| #define MOD_LSHIFT  (1<<1) | ||||
| #define MOD_LALT    (1<<2) | ||||
| #define MOD_LGUI    (1<<3) | ||||
| #define MOD_RCTRL   (1<<4) | ||||
| #define MOD_RSHIFT  (1<<5) | ||||
| #define MOD_RALT    (1<<6) | ||||
| #define MOD_RGUI    (1<<7) | ||||
|  | ||||
|  | ||||
| extern uint8_t keyboard_modifier_keys; | ||||
| extern uint8_t keyboard_keys[6]; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user