From 58514cfadd15985ff3ac279679930d372f705687 Mon Sep 17 00:00:00 2001 From: cpldcpu Date: Tue, 31 Dec 2013 00:54:19 +0100 Subject: firmware: Directly mapped command register saves 12 btes --- firmware/bootloaderconfig.h | 2 +- firmware/main.c | 23 ++++++++++------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/firmware/bootloaderconfig.h b/firmware/bootloaderconfig.h index 57f15f2..9c06de3 100644 --- a/firmware/bootloaderconfig.h +++ b/firmware/bootloaderconfig.h @@ -269,7 +269,7 @@ these macros are defined, the boot loader uses them. #define LED_DDR DDRB #define LED_PORT PORTB -#define LED_PIN PB2 +#define LED_PIN PB1 #if LED_PRESENT #define LED_INIT(x) LED_PORT &=~_BV(LED_PIN); diff --git a/firmware/main.c b/firmware/main.c index 447ff20..d0a3edd 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -36,10 +36,11 @@ register uint8_t command asm( "r3" ); // register saves many bytes enum { - cmd_nop=0, - cmd_erase_application, - cmd_write_page, - cmd_exit + cmd_nop=0, // also: get device info + cmd_transfer_page=1, + cmd_erase_application=2, + cmd_exit=4, + cmd_write_page=5, }; // Definition of sei and cli without memory barrier keyword to prevent reloading of memory variables @@ -162,22 +163,18 @@ static uint8_t usbFunctionSetup(uint8_t data[8]) { if (rq->bRequest == 0) { // get device info usbMsgPtr = replyBuffer; return 4; - } else if (rq->bRequest == 1) { // write page + } else if (rq->bRequest == cmd_transfer_page) { // transfer page // clear page buffer as a precaution before filling the buffer in case // a previous write operation failed and there is still something in the buffer. __boot_page_fill_clear(); currentAddress = rq->wIndex.word; return USB_NO_MSG; // hands off work to usbFunctionWrite - - } else if (rq->bRequest == 2) { // erase application - command=cmd_erase_application; - - } else { // exit bootloader - command=cmd_exit; - } - + } else { + // Handle cmd_erase_application and cmd_exit + command=rq->bRequest; return 0; + } } // read in a page over usb, and write it in to the flash write buffer -- cgit v1.2.3