From 690bfd6502e8c712e5e2a518696be8b21a92801f Mon Sep 17 00:00:00 2001 From: David Voswinkel Date: Sun, 5 Jul 2009 11:29:52 +0200 Subject: [PATCH] add floating point timer and end address to bulk init --- avr/usbload/Makefile | 2 +- avr/usbload/commandline/snesuploader | Bin 18596 -> 18620 bytes avr/usbload/commandline/snesuploader.c | 14 +++++++++++++- avr/usbload/main.c | 18 ++++++++++++------ avr/usbload/timer.c | 13 ++++++++----- avr/usbload/timer.h | 2 +- 6 files changed, 35 insertions(+), 14 deletions(-) diff --git a/avr/usbload/Makefile b/avr/usbload/Makefile index 55cc2a8..9d293eb 100644 --- a/avr/usbload/Makefile +++ b/avr/usbload/Makefile @@ -91,7 +91,7 @@ usbdrv: cp -r ../../../usbdrv . main.elf: usbdrv $(OBJECTS) # usbdrv dependency only needed because we copy it - $(COMPILE) -o main.elf $(OBJECTS) + $(COMPILE) -o main.elf $(OBJECTS) -Wl,-u,vfprintf -lprintf_flt main.hex: main.elf rm -f main.hex main.eep.hex diff --git a/avr/usbload/commandline/snesuploader b/avr/usbload/commandline/snesuploader index 3281c6be019dff53841446d3b164fbcbeb78d2bd..d2c6b90c091b9242a01fced0e970b2e82e6c4836 100755 GIT binary patch delta 2290 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 #include #include +#include #include /* this is libusb */ + #include "opendevice.h" /* common code moved to separate module */ #include "../requests.h" /* custom request numbers */ @@ -129,6 +131,9 @@ int main(int argc, char **argv) uint16_t step = 0; uint16_t crc = 0; uint8_t bank = 0; + uint8_t bank_cnt = 0; + uint32_t file_size = 0; + struct stat st; FILE *fp; usb_init(); @@ -164,13 +169,20 @@ int main(int argc, char **argv) fprintf(stderr, "Cannot open file %s ", argv[2]); exit(1); } + + fseek (fp, 0, SEEK_END); + file_size = ftell (fp); + fseek (fp, 0, SEEK_SET); + bank_cnt = file_size / BANK_SIZE; + printf("Transfer '%s' %i Bytes, %i Banks\n",argv[2],file_size,bank_cnt); + read_buffer = (unsigned char *) malloc(READ_BUFFER_SIZE); crc_buffer = (unsigned char *) malloc(0x1000); memset(crc_buffer, 0, 0x1000); addr = 0x000000; cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, - USB_BULK_UPLOAD_INIT, BANK_SIZE_SHIFT , 0, NULL, 0, 5000); + USB_BULK_UPLOAD_INIT, BANK_SIZE_SHIFT , bank_cnt, NULL, 0, 5000); if (cnt < 0) { fprintf(stderr, "USB error: %s\n", usb_strerror()); diff --git a/avr/usbload/main.c b/avr/usbload/main.c index 3932f1d..7ac2f79 100644 --- a/avr/usbload/main.c +++ b/avr/usbload/main.c @@ -23,9 +23,11 @@ uint8_t debug_level = ( DEBUG | DEBUG_USB | DEBUG_CRC ); uint8_t read_buffer[TRANSFER_BUFFER_SIZE]; uint32_t req_addr = 0; +uint32_t req_addr_end = 0; uint32_t req_size; uint8_t req_bank; uint16_t req_bank_size; +uint16_t req_bank_cnt; uint8_t req_state = REQ_STATUS_IDLE; uint8_t rx_remaining = 0; uint8_t tx_remaining = 0; @@ -108,10 +110,14 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) req_bank = 0; rx_remaining = 0; req_bank_size = (1 << rq->wValue.word) & 0xffff; + req_bank_cnt = rq->wIndex.word; + req_addr_end = (uint32_t)req_bank_size * req_bank_cnt; + sync_errors = 0; - debug(DEBUG_USB,"USB_BULK_UPLOAD_INIT: bank_size=0x%x\n", req_bank_size); + debug(DEBUG_USB,"USB_BULK_UPLOAD_INIT: bank_size=0x%x bank_cnt=0x%x end_addr=0x%08lx\n", + req_bank_size, req_bank_cnt, req_addr_end); + if (req_addr == 0x000000){ - debug(DEBUG_USB,"USB_BULK_UPLOAD_INIT: timer_start\n"); timer_start(); } /* @@ -127,7 +133,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8]) rx_remaining = rq->wLength.word; if (req_addr && req_addr % req_bank_size == 0) { - debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr= 0x%08lx time=%i\n", + debug(DEBUG_USB,"USB_BULK_UPLOAD_ADDR: req_bank=0x%02x addr= 0x%08lx time=%.4f\n", req_bank, req_addr,timer_stop()); req_bank++; timer_start(); @@ -316,6 +322,7 @@ int main(void) } led_on(); + usbDeviceConnect(); printf("USB connect\n"); @@ -332,7 +339,6 @@ int main(void) printf("Disable snes WR\n"); snes_wr_disable(); - sei(); printf("USB poll\n"); while (req_state != REQ_STATUS_BOOT){ @@ -343,9 +349,9 @@ int main(void) usbDeviceDisconnect(); printf("USB disconnect\n"); - crc_check_bulk_memory(0x000000, 0x80000); + crc_check_bulk_memory(0x000000, req_addr_end); - //dump_memory(0x7f00,0x8000); + dump_memory(0x7f00,0x8000); printf("IRQ off\n"); snes_irq_lo(); diff --git a/avr/usbload/timer.c b/avr/usbload/timer.c index da6cc0b..70c5820 100644 --- a/avr/usbload/timer.c +++ b/avr/usbload/timer.c @@ -1,7 +1,10 @@ - +#include +#include +#include #include #include /* for sei() */ - + +#include "debug.h" #ifndef OCR1A #define OCR1A OCR1 // 2313 support @@ -53,10 +56,10 @@ void timer_start( void ) } -uint16_t timer_stop(void) +double timer_stop(void) { - //cli(); - return second; + double t = ((double)(DEBOUNCE - prescaler) / DEBOUNCE ) + second; + return t; } diff --git a/avr/usbload/timer.h b/avr/usbload/timer.h index 8f0df0b..7abeaf5 100644 --- a/avr/usbload/timer.h +++ b/avr/usbload/timer.h @@ -1,5 +1,5 @@ uint16_t timer_start( void ); -uint16_t timer_stop( void ); +double timer_stop( void );