add floating point timer and end address to bulk init

This commit is contained in:
David Voswinkel 2009-07-05 11:29:52 +02:00
parent c55a66f90d
commit 690bfd6502
6 changed files with 35 additions and 14 deletions

View File

@ -91,7 +91,7 @@ usbdrv:
cp -r ../../../usbdrv . cp -r ../../../usbdrv .
main.elf: usbdrv $(OBJECTS) # usbdrv dependency only needed because we copy it 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 main.hex: main.elf
rm -f main.hex main.eep.hex rm -f main.hex main.eep.hex

Binary file not shown.

View File

@ -24,7 +24,9 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
#include <string.h> #include <string.h>
#include <sys/stat.h>
#include <usb.h> /* this is libusb */ #include <usb.h> /* this is libusb */
#include "opendevice.h" /* common code moved to separate module */ #include "opendevice.h" /* common code moved to separate module */
#include "../requests.h" /* custom request numbers */ #include "../requests.h" /* custom request numbers */
@ -129,6 +131,9 @@ int main(int argc, char **argv)
uint16_t step = 0; uint16_t step = 0;
uint16_t crc = 0; uint16_t crc = 0;
uint8_t bank = 0; uint8_t bank = 0;
uint8_t bank_cnt = 0;
uint32_t file_size = 0;
struct stat st;
FILE *fp; FILE *fp;
usb_init(); usb_init();
@ -164,13 +169,20 @@ int main(int argc, char **argv)
fprintf(stderr, "Cannot open file %s ", argv[2]); fprintf(stderr, "Cannot open file %s ", argv[2]);
exit(1); 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); read_buffer = (unsigned char *) malloc(READ_BUFFER_SIZE);
crc_buffer = (unsigned char *) malloc(0x1000); crc_buffer = (unsigned char *) malloc(0x1000);
memset(crc_buffer, 0, 0x1000); memset(crc_buffer, 0, 0x1000);
addr = 0x000000; addr = 0x000000;
cnt = usb_control_msg(handle, cnt = usb_control_msg(handle,
USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT, 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) { if (cnt < 0) {
fprintf(stderr, "USB error: %s\n", usb_strerror()); fprintf(stderr, "USB error: %s\n", usb_strerror());

View File

@ -23,9 +23,11 @@ uint8_t debug_level = ( DEBUG | DEBUG_USB | DEBUG_CRC );
uint8_t read_buffer[TRANSFER_BUFFER_SIZE]; uint8_t read_buffer[TRANSFER_BUFFER_SIZE];
uint32_t req_addr = 0; uint32_t req_addr = 0;
uint32_t req_addr_end = 0;
uint32_t req_size; uint32_t req_size;
uint8_t req_bank; uint8_t req_bank;
uint16_t req_bank_size; uint16_t req_bank_size;
uint16_t req_bank_cnt;
uint8_t req_state = REQ_STATUS_IDLE; uint8_t req_state = REQ_STATUS_IDLE;
uint8_t rx_remaining = 0; uint8_t rx_remaining = 0;
uint8_t tx_remaining = 0; uint8_t tx_remaining = 0;
@ -108,10 +110,14 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
req_bank = 0; req_bank = 0;
rx_remaining = 0; rx_remaining = 0;
req_bank_size = (1 << rq->wValue.word) & 0xffff; 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; 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){ if (req_addr == 0x000000){
debug(DEBUG_USB,"USB_BULK_UPLOAD_INIT: timer_start\n");
timer_start(); timer_start();
} }
/* /*
@ -127,7 +133,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
rx_remaining = rq->wLength.word; rx_remaining = rq->wLength.word;
if (req_addr && req_addr % req_bank_size == 0) { 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, req_addr,timer_stop());
req_bank++; req_bank++;
timer_start(); timer_start();
@ -316,6 +322,7 @@ int main(void)
} }
led_on(); led_on();
usbDeviceConnect(); usbDeviceConnect();
printf("USB connect\n"); printf("USB connect\n");
@ -332,7 +339,6 @@ int main(void)
printf("Disable snes WR\n"); printf("Disable snes WR\n");
snes_wr_disable(); snes_wr_disable();
sei(); sei();
printf("USB poll\n"); printf("USB poll\n");
while (req_state != REQ_STATUS_BOOT){ while (req_state != REQ_STATUS_BOOT){
@ -343,9 +349,9 @@ int main(void)
usbDeviceDisconnect(); usbDeviceDisconnect();
printf("USB disconnect\n"); 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"); printf("IRQ off\n");
snes_irq_lo(); snes_irq_lo();

View File

@ -1,7 +1,10 @@
#include <stdint.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/io.h> #include <avr/io.h>
#include <avr/interrupt.h> /* for sei() */ #include <avr/interrupt.h> /* for sei() */
#include "debug.h"
#ifndef OCR1A #ifndef OCR1A
#define OCR1A OCR1 // 2313 support #define OCR1A OCR1 // 2313 support
@ -53,10 +56,10 @@ void timer_start( void )
} }
uint16_t timer_stop(void) double timer_stop(void)
{ {
//cli(); double t = ((double)(DEBOUNCE - prescaler) / DEBOUNCE ) + second;
return second; return t;
} }

View File

@ -1,5 +1,5 @@
uint16_t timer_start( void ); uint16_t timer_start( void );
uint16_t timer_stop( void ); double timer_stop( void );