mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 13:22:31 +01:00 
			
		
		
		
	Fix bootloader.c
This commit is contained in:
		
							parent
							
								
									a112f3614e
								
							
						
					
					
						commit
						f427529a30
					
				| @ -1,22 +1,56 @@ | ||||
| /*
 | ||||
| Copyright 2011 Jun Wako <wakojun@gmail.com> | ||||
| 
 | ||||
| This program is free software: you can redistribute it and/or modify | ||||
| it under the terms of the GNU General Public License as published by | ||||
| the Free Software Foundation, either version 2 of the License, or | ||||
| (at your option) any later version. | ||||
| 
 | ||||
| This program is distributed in the hope that it will be useful, | ||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| GNU General Public License for more details. | ||||
| 
 | ||||
| You should have received a copy of the GNU General Public License | ||||
| along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| */ | ||||
| 
 | ||||
| #include <avr/io.h> | ||||
| #include <avr/interrupt.h> | ||||
| #include <util/delay.h> | ||||
| #include "bootloader.h" | ||||
| 
 | ||||
| /* Start Bootloader from Application
 | ||||
|  * See  | ||||
|  * http://www.pjrc.com/teensy/jump_to_bootloader.html
 | ||||
|  * http://www.fourwalledcubicle.com/files/LUFA/Doc/120219/html/_page__software_bootloader_start.html
 | ||||
|  */ | ||||
| 
 | ||||
| void bootloader_jump(void) __attribute__ ((weak)); | ||||
| void bootloader_jump(void) {} | ||||
| /* Boot Section Size in bytes
 | ||||
|  * Teensy halfKay   512 | ||||
|  * Atmel DFU loader 4096 | ||||
|  * LUFA bootloader  4096 | ||||
|  */ | ||||
| #ifndef BOOT_SIZE | ||||
| #define BOOT_SIZE 512 | ||||
| #endif | ||||
| 
 | ||||
| #define FLASH_SIZE          (FLASHEND + 1) | ||||
| #define BOOTLOADER_START    (FLASHEND - BOOT_SIZE) | ||||
| 
 | ||||
| void bootloader_jump(void) { | ||||
|     cli(); | ||||
|     // disable watchdog, if enabled
 | ||||
|     // disable all peripherals
 | ||||
|     UDCON = 1; | ||||
|     USBCON = (1<<FRZCLK);  // disable USB
 | ||||
|     UCSR1B = 0; | ||||
|     _delay_ms(5); | ||||
| #if defined(__AVR_AT90USB162__) | ||||
|     EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0; | ||||
|     DDRB = 0; DDRC = 0; DDRD = 0; | ||||
|     PORTB = 0; PORTC = 0; PORTD = 0; | ||||
| #elif defined(__AVR_ATmega32U4__) | ||||
|     EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0; UCSR1B = 0; TWCR = 0; | ||||
|     DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; TWCR = 0; | ||||
|     PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; | ||||
| #elif defined(__AVR_AT90USB646__) | ||||
|     EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0; | ||||
|     DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; | ||||
|     PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; | ||||
| #elif defined(__AVR_AT90USB1286__) | ||||
|     EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0; | ||||
|     DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; | ||||
|     PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; | ||||
| #endif | ||||
| 
 | ||||
|     // start Bootloader
 | ||||
|     ((void (*)(void))BOOTLOADER_START)(); | ||||
| } | ||||
|  | ||||
| @ -51,8 +51,7 @@ TARGET_DIR = . | ||||
| # List C source files here. (C dependencies are automatically generated.)
 | ||||
| SRC +=	keymap.c \
 | ||||
| 	matrix.c \
 | ||||
| 	led.c \
 | ||||
| 	protocol/pjrc/bootloader_teensy.c | ||||
| 	led.c | ||||
| 
 | ||||
| CONFIG_H = config.h | ||||
| 
 | ||||
| @ -95,7 +94,6 @@ ARCH = AVR8 | ||||
| F_USB = $(F_CPU) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| # Build Options
 | ||||
| #   comment out to disable the options.
 | ||||
| #
 | ||||
| @ -105,6 +103,15 @@ EXTRAKEY_ENABLE = yes	# Audio control and System control | ||||
| #PS2_MOUSE_ENABLE = yes	# PS/2 mouse(TrackPoint) support
 | ||||
| 
 | ||||
| 
 | ||||
| # Boot Section Size in bytes
 | ||||
| #   Teensy halfKay   512
 | ||||
| #   Atmel DFU loader 4096
 | ||||
| #   LUFA bootloader  4096
 | ||||
| #ifndef BOOT_SIZE
 | ||||
| #define BOOT_SIZE 512
 | ||||
| #endif
 | ||||
| 
 | ||||
| 
 | ||||
| # Search Path
 | ||||
| VPATH += $(TARGET_DIR) | ||||
| VPATH += $(TOP_DIR) | ||||
|  | ||||
| @ -5,8 +5,7 @@ OPT_DEFS += -DHOST_PJRC | ||||
| SRC +=	$(PJRC_DIR)/pjrc.c \
 | ||||
| 	$(PJRC_DIR)/usb_keyboard.c \
 | ||||
| 	$(PJRC_DIR)/usb_debug.c \
 | ||||
| 	$(PJRC_DIR)/usb.c \
 | ||||
| 	$(PJRC_DIR)/bootloader_teensy.c | ||||
| 	$(PJRC_DIR)/usb.c | ||||
| 
 | ||||
| # Option modules
 | ||||
| ifdef $(or MOUSEKEY_ENABLE, PS2_MOUSE_ENABLE) | ||||
|  | ||||
| @ -1,40 +0,0 @@ | ||||
| /* See  http://www.pjrc.com/teensy/jump_to_bootloader.html */ | ||||
| #include <avr/io.h> | ||||
| #include <avr/interrupt.h> | ||||
| #include <util/delay.h> | ||||
| #include "bootloader.h" | ||||
| 
 | ||||
| void bootloader_jump(void) { | ||||
|     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
 | ||||
|     EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0; | ||||
|     DDRB = 0; DDRC = 0; DDRD = 0; | ||||
|     PORTB = 0; PORTC = 0; PORTD = 0; | ||||
|     asm volatile("jmp 0x3E00"); | ||||
| #elif defined(__AVR_ATmega32U4__)              // Teensy 2.0
 | ||||
|     EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0; UCSR1B = 0; TWCR = 0; | ||||
|     DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; TWCR = 0; | ||||
|     PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; | ||||
|     asm volatile("jmp 0x7E00"); | ||||
| #elif defined(__AVR_AT90USB646__)              // Teensy++ 1.0
 | ||||
|     EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0; | ||||
|     DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; | ||||
|     PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; | ||||
|     asm volatile("jmp 0xFC00"); | ||||
| #elif defined(__AVR_AT90USB1286__)             // Teensy++ 2.0
 | ||||
|     EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0; | ||||
|     TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0; | ||||
|     DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; | ||||
|     PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; | ||||
|     asm volatile("jmp 0x1FC00"); | ||||
| #endif | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 tmk
						tmk