forked from mirrors/qmk_userspace
		
	add jump_bootloader.
This commit is contained in:
		
					parent
					
						
							
								7fd9003f59
							
						
					
				
			
			
				commit
				
					
						1de02c1f15
					
				
			
		
					 5 changed files with 63 additions and 3 deletions
				
			
		
							
								
								
									
										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];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue