diff --git a/avr/usbload/sram.c b/avr/usbload/sram.c index 24fcc0c..bec497f 100644 --- a/avr/usbload/sram.c +++ b/avr/usbload/sram.c @@ -265,15 +265,66 @@ void sram_write(uint32_t addr, uint8_t data) } - -void sram_clear(uint32_t addr, uint32_t len) +void sram_bulk_copy(uint32_t addr, uint8_t * src, uint32_t len) { uint32_t i; + uint8_t *ptr = src; +#ifdef DEBUG_SRAM + printf("sram_copy: addr=0x%08lx src=0x%p len=%li\n\r", addr,src,len); +#endif + sram_bulk_write_start(addr); + for (i = addr; i < (addr + len); i++){ + sram_bulk_write(*ptr++); + sram_bulk_write_next(); + } + sram_bulk_write_end(); +} + +void sram_bulk_read_buffer(uint32_t addr, uint8_t * dst, uint32_t len) +{ + + uint32_t i; + uint8_t *ptr = dst; +#ifdef DEBUG_SRAM + printf("sram_bulk_read_buffer: addr=0x%08lx dst=0x%p len=%li\n\r", addr,dst,len); +#endif + sram_bulk_read_start(addr); + for (i = addr; i < (addr + len); i++) { + *ptr = sram_bulk_read(); + sram_bulk_read_next(); + ptr++; + } + sram_bulk_read_end(); +} + +void sram_bulk_clear(uint32_t addr, uint32_t len){ + uint32_t i; +#ifdef DEBUG_SRAM + printf("sram_bulk_clear: addr=0x%08lx len=%li\n\r", addr,len); +#endif + sram_bulk_write_start(addr); for (i = addr; i < (addr + len); i++) { if (0 == i % 0xfff) #ifdef DEBUG_SRAM - printf("sram_clear: addr=0x%08lx\n\r", i); + printf("sram_bulk_clear: addr=0x%08lx\n\r", i); +#endif + sram_bulk_write(0xff); + sram_bulk_write_next(); + } + sram_bulk_write_end(); +} + +void sram_clear(uint32_t addr, uint32_t len) +{ + uint32_t i; +#ifdef DEBUG_SRAM + printf("sram_clear: addr=0x%08lx len=%li\n\r", addr,len); +#endif + for (i = addr; i < (addr + len); i++) { + if (0 == i % 0xfff) +#ifdef DEBUG_SRAM + printf("sram_clear: addr=0x%08lx\n\r", i); #endif sram_write(i, 0x00); } @@ -285,7 +336,7 @@ void sram_copy(uint32_t addr, uint8_t * src, uint32_t len) uint32_t i; uint8_t *ptr = src; #ifdef DEBUG_SRAM - printf("sram_copy: addr=0x%08lx src=0x%p len=%li\n\r", addr,src,len); + printf("sram_copy: addr=0x%08lx src=0x%p len=%li\n\r", addr,src,len); #endif for (i = addr; i < (addr + len); i++) sram_write(i, *ptr++); @@ -297,18 +348,19 @@ void sram_read_buffer(uint32_t addr, uint8_t * dst, uint32_t len) uint32_t i; uint8_t *ptr = dst; #ifdef DEBUG_SRAM - printf("sram_read_buffer: addr=0x%08lx dst=0x%p len=%li\n\r", addr,dst,len); + printf("sram_read_buffer: addr=0x%08lx dst=0x%p len=%li\n\r", addr,dst,len); #endif for (i = addr; i < (addr + len); i++) { *ptr = sram_read(i); ptr++; } } + uint8_t sram_check(uint8_t * buffer, uint32_t len) { uint16_t cnt; #ifdef DEBUG_SRAM - printf("sram_check: len=%li\n\r",len); + printf("sram_check: len=%li\n\r",len); #endif for (cnt = 0; cnt < len; cnt++) if (buffer[cnt]) diff --git a/avr/usbload/sram.h b/avr/usbload/sram.h index 45bf445..47d53dd 100644 --- a/avr/usbload/sram.h +++ b/avr/usbload/sram.h @@ -142,10 +142,12 @@ void system_init(void); void sreg_set(uint32_t addr); + uint8_t sram_read(uint32_t addr); void sram_write(uint32_t addr, uint8_t data); void sram_clear(uint32_t addr, uint32_t len); void sram_copy(uint32_t addr,uint8_t *src, uint32_t len); +void sram_read_buffer(uint32_t addr,uint8_t *dst, uint32_t len); void sram_bulk_read_start(uint32_t addr); inline void sram_bulk_read_next(void); @@ -157,7 +159,6 @@ inline void sram_bulk_read_next(void); inline void sram_bulk_write_end(void); void sram_bulk_write(uint8_t data); - - -void sram_read_buffer(uint32_t addr,uint8_t *dst, uint32_t len); -uint8_t sram_check(uint8_t *buffer, uint32_t len); +void sram_bulk_copy(uint32_t addr, uint8_t * src, uint32_t len); +void sram_bulk_read_buffer(uint32_t addr, uint8_t * dst, uint32_t len); +void sram_bulk_clear(uint32_t addr, uint32_t len);