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"); +} |