void bootloader_jump(void) { | void bootloader_jump(void) { | ||||
cli(); | cli(); | ||||
// | |||||
//Teensy | |||||
// | |||||
#if defined(__AVR_AT90USB162__) || defined(__AVR_ATmega32U4__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) | |||||
// disable watchdog, if enabled | // disable watchdog, if enabled | ||||
// disable all peripherals | // disable all peripherals | ||||
UDCON = 1; | UDCON = 1; | ||||
USBCON = (1<<FRZCLK); // disable USB | USBCON = (1<<FRZCLK); // disable USB | ||||
UCSR1B = 0; | UCSR1B = 0; | ||||
_delay_ms(5); | _delay_ms(5); | ||||
#else | |||||
// This makes custom USBasploader come up. | |||||
MCUSR = 0; | |||||
#endif | |||||
#if defined(__AVR_AT90USB162__) | #if defined(__AVR_AT90USB162__) | ||||
EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; | EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; | ||||
TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0; | TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0; | ||||
PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; | PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0; | ||||
#endif | #endif | ||||
// | |||||
//USBasp | |||||
// | |||||
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega168P__) || defined(__AVR_ATmega328P) | |||||
// This makes custom USBasploader come up. | |||||
MCUSR = 0; | |||||
// initialize ports | |||||
PORTB = 0; PORTC= 0; PORTD = 0; | |||||
DDRB = 0; DDRC= 0; DDRD = 0; | |||||
// disable interrupts | |||||
EIMSK = 0; EECR = 0; SPCR = 0; | |||||
ACSR = 0; SPMCSR = 0; WDTCSR = 0; PCICR = 0; | |||||
TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; | |||||
ADCSRA = 0; TWCR = 0; UCSR0B = 0; | |||||
#endif | |||||
// start Bootloader | // start Bootloader | ||||
((void (*)(void))BOOTLOADER_START)(); | ((void (*)(void))BOOTLOADER_START)(); | ||||
} | } |
VUSB_DIR = protocol/vusb | |||||
OPT_DEFS += -DHOST_VUSB | OPT_DEFS += -DHOST_VUSB | ||||
SRC += vusb.c \ | |||||
usbdrv.c \ | |||||
usbdrvasm.S \ | |||||
oddebug.c \ | |||||
bootloader_usbasp.c \ | |||||
SRC += $(VUSB_DIR)/main.c \ | |||||
$(VUSB_DIR)/vusb.c \ | |||||
$(VUSB_DIR)/usbdrv/usbdrv.c \ | |||||
$(VUSB_DIR)/usbdrv/usbdrvasm.S \ | |||||
$(VUSB_DIR)/usbdrv/oddebug.c | |||||
ifdef NO_UART | ifdef NO_UART |
/* | |||||
Copyright 2011 Jun Wako <[email protected]> | |||||
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 "bootloader.h" | |||||
void bootloader_jump(void) { | |||||
cli(); | |||||
// This makes custom USBasploader come up. | |||||
MCUSR = 0; | |||||
// ATmega168PA | |||||
// initialize ports | |||||
PORTB = 0; PORTC= 0; PORTD = 0; | |||||
DDRB = 0; DDRC= 0; DDRD = 0; | |||||
// disable interrupts | |||||
EIMSK = 0; EECR = 0; SPCR = 0; | |||||
ACSR = 0; SPMCSR = 0; WDTCSR = 0; PCICR = 0; | |||||
TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; | |||||
ADCSRA = 0; TWCR = 0; UCSR0B = 0; | |||||
// Boot Loader Section Start Address: | |||||
// BOOTSZ Size Address | |||||
// (lock bit) (word) (word) (byte) | |||||
// '11' 128 0x1F80 0x3F00 | |||||
// '10' 256 0x1F00 0x3E00 | |||||
// '01' 512 0x1E00 0x3C00 | |||||
// '00' 1024 0x1C00 0x3800 | |||||
asm volatile("jmp 0x3800"); | |||||
} |