diff options
| author | tmk <nobody@nowhere> | 2011-09-22 16:56:36 +0900 | 
|---|---|---|
| committer | tmk <nobody@nowhere> | 2011-09-22 16:56:36 +0900 | 
| commit | e65575d4a5f03a90adfa9850cb71a5d0448098cd (patch) | |
| tree | ea5cea3c3985fb3056233f6b08fa76bf409c1f57 | |
| parent | e67c988824f5ec0c965beb412f8ee5953dfd3c8c (diff) | |
Refactored bootloader jumping. Added USBaspLoader support.
| -rw-r--r-- | bootloader.c | 22 | ||||
| -rw-r--r-- | bootloader.h | 25 | ||||
| -rw-r--r-- | command.c | 9 | ||||
| -rw-r--r-- | common.mk | 1 | ||||
| -rw-r--r-- | pjrc.mk | 2 | ||||
| -rw-r--r-- | pjrc/bootloader_teensy.c (renamed from pjrc/jump_bootloader.c) | 3 | ||||
| -rw-r--r-- | pjrc/jump_bootloader.h | 7 | ||||
| -rw-r--r-- | pjrc/main.c | 4 | ||||
| -rw-r--r-- | vusb.mk | 4 | ||||
| -rw-r--r-- | vusb/bootloader_usbasp.c | 47 | 
10 files changed, 107 insertions, 17 deletions
| diff --git a/bootloader.c b/bootloader.c new file mode 100644 index 0000000000..5cbfc72e5b --- /dev/null +++ b/bootloader.c @@ -0,0 +1,22 @@ +/* +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 "bootloader.h" + + +void bootloader_jump(void) __attribute__ ((weak)); +void bootloader_jump(void) {} diff --git a/bootloader.h b/bootloader.h new file mode 100644 index 0000000000..44775039d5 --- /dev/null +++ b/bootloader.h @@ -0,0 +1,25 @@ +/* +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/>. +*/ + +#ifndef BOOTLOADER_H +#define BOOTLOADER_H + + +/* give code for your bootloader to come up if needed */ +void bootloader_jump(void); + +#endif @@ -25,10 +25,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "timer.h"  #include "layer.h"  #include "matrix.h" +#include "bootloader.h"  #include "command.h"  #ifdef HOST_PJRC -#   include "jump_bootloader.h"  #   include "usb_keyboard.h"  #   ifdef EXTRAKEY_ENABLE  #       include "usb_extra.h" @@ -78,13 +78,12 @@ static uint8_t command_common(void)              help();              break;          case KB_B: -#ifdef HOST_PJRC              host_clear_keyboard_report();              host_send_keyboard_report(); -            print("jump to bootloader...\n"); +            print("jump to bootloader... ");              _delay_ms(1000); -            jump_bootloader(); // not return -#endif +            bootloader_jump(); // not return +            print("not supported.\n");              break;          case KB_D:              debug_enable = !debug_enable; @@ -4,6 +4,7 @@ SRC +=	host.c \  	layer.c \  	timer.c \  	print.c \ +	bootloader.c \  	util.c @@ -4,7 +4,7 @@ SRC +=	pjrc.c \  	usb_keyboard.c \  	usb_debug.c \  	usb.c \ -	jump_bootloader.c +	bootloader_teensy.c  # Search Path diff --git a/pjrc/jump_bootloader.c b/pjrc/bootloader_teensy.c index 27066a1eb3..9d34852f16 100644 --- a/pjrc/jump_bootloader.c +++ b/pjrc/bootloader_teensy.c @@ -2,8 +2,9 @@  #include <avr/io.h>  #include <avr/interrupt.h>  #include <util/delay.h> +#include "bootloader.h" -void jump_bootloader(void) { +void bootloader_jump(void) {      cli();      // disable watchdog, if enabled      // disable all peripherals diff --git a/pjrc/jump_bootloader.h b/pjrc/jump_bootloader.h deleted file mode 100644 index e858e3e162..0000000000 --- a/pjrc/jump_bootloader.h +++ /dev/null @@ -1,7 +0,0 @@ -/* See  http://www.pjrc.com/teensy/jump_to_bootloader.html */ -#ifndef JUMP_BOOTLOADER_H -#define JUMP_BOOTLOADER_H 1 - -void jump_bootloader(void); - -#endif diff --git a/pjrc/main.c b/pjrc/main.c index f84925d7fb..15f14920b4 100644 --- a/pjrc/main.c +++ b/pjrc/main.c @@ -31,7 +31,7 @@  #include "print.h"  #include "debug.h"  #include "util.h" -#include "jump_bootloader.h" +#include "bootloader.h"  #ifdef PS2_MOUSE_ENABLE  #   include "ps2_mouse.h"  #endif @@ -86,7 +86,7 @@ int main(void)      if (matrix_key_count() >= 4) {          print("jump to bootloader...\n");          _delay_ms(1000); -        jump_bootloader(); // not return +        bootloader_jump(); // not return      } @@ -3,7 +3,9 @@ OPT_DEFS += -DHOST_VUSB  SRC +=	vusb.c \  	usbdrv.c \  	usbdrvasm.S \ -	oddebug.c +	oddebug.c \ +	bootloader_usbasp.c \ +  ifdef NO_UART  SRC +=	sendchar_null.c diff --git a/vusb/bootloader_usbasp.c b/vusb/bootloader_usbasp.c new file mode 100644 index 0000000000..6ec99cbf2d --- /dev/null +++ b/vusb/bootloader_usbasp.c @@ -0,0 +1,47 @@ +/* +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 "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"); +} | 
