Refactored bootloader jumping. Added USBaspLoader support.
This commit is contained in:
		
							
								
								
									
										22
									
								
								bootloader.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								bootloader.c
									
									
									
									
									
										Normal file
									
								
							| @@ -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) {} | ||||
							
								
								
									
										25
									
								
								bootloader.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								bootloader.h
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										2
									
								
								pjrc.mk
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								pjrc.mk
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ SRC +=	pjrc.c \ | ||||
| 	usb_keyboard.c \ | ||||
| 	usb_debug.c \ | ||||
| 	usb.c \ | ||||
| 	jump_bootloader.c | ||||
| 	bootloader_teensy.c | ||||
|  | ||||
|  | ||||
| # Search Path | ||||
|   | ||||
| @@ -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
 | ||||
| @@ -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 | ||||
| @@ -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 | ||||
|     } | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										4
									
								
								vusb.mk
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								vusb.mk
									
									
									
									
									
								
							| @@ -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 | ||||
|   | ||||
							
								
								
									
										47
									
								
								vusb/bootloader_usbasp.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								vusb/bootloader_usbasp.c
									
									
									
									
									
										Normal file
									
								
							| @@ -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"); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user