Fix bootloader.c
This commit is contained in:
		
							parent
							
								
									a112f3614e
								
							
						
					
					
						commit
						f427529a30
					
				@ -1,22 +1,56 @@
 | 
				
			|||||||
/*
 | 
					#include <avr/io.h>
 | 
				
			||||||
Copyright 2011 Jun Wako <wakojun@gmail.com>
 | 
					#include <avr/interrupt.h>
 | 
				
			||||||
 | 
					#include <util/delay.h>
 | 
				
			||||||
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 "bootloader.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));
 | 
					/* Boot Section Size in bytes
 | 
				
			||||||
void bootloader_jump(void) {}
 | 
					 * 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.)
 | 
					# List C source files here. (C dependencies are automatically generated.)
 | 
				
			||||||
SRC +=	keymap.c \
 | 
					SRC +=	keymap.c \
 | 
				
			||||||
	matrix.c \
 | 
						matrix.c \
 | 
				
			||||||
	led.c \
 | 
						led.c
 | 
				
			||||||
	protocol/pjrc/bootloader_teensy.c
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG_H = config.h
 | 
					CONFIG_H = config.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -95,7 +94,6 @@ ARCH = AVR8
 | 
				
			|||||||
F_USB = $(F_CPU)
 | 
					F_USB = $(F_CPU)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
# Build Options
 | 
					# Build Options
 | 
				
			||||||
#   comment out to disable the 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
 | 
					#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
 | 
					# Search Path
 | 
				
			||||||
VPATH += $(TARGET_DIR)
 | 
					VPATH += $(TARGET_DIR)
 | 
				
			||||||
VPATH += $(TOP_DIR)
 | 
					VPATH += $(TOP_DIR)
 | 
				
			||||||
 | 
				
			|||||||
@ -5,8 +5,7 @@ OPT_DEFS += -DHOST_PJRC
 | 
				
			|||||||
SRC +=	$(PJRC_DIR)/pjrc.c \
 | 
					SRC +=	$(PJRC_DIR)/pjrc.c \
 | 
				
			||||||
	$(PJRC_DIR)/usb_keyboard.c \
 | 
						$(PJRC_DIR)/usb_keyboard.c \
 | 
				
			||||||
	$(PJRC_DIR)/usb_debug.c \
 | 
						$(PJRC_DIR)/usb_debug.c \
 | 
				
			||||||
	$(PJRC_DIR)/usb.c \
 | 
						$(PJRC_DIR)/usb.c
 | 
				
			||||||
	$(PJRC_DIR)/bootloader_teensy.c
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Option modules
 | 
					# Option modules
 | 
				
			||||||
ifdef $(or MOUSEKEY_ENABLE, PS2_MOUSE_ENABLE)
 | 
					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