diff --git a/avr/usbload/Makefile b/avr/usbload/Makefile index 48fe1b2..b6781dc 100644 --- a/avr/usbload/Makefile +++ b/avr/usbload/Makefile @@ -62,11 +62,8 @@ help: @echo "make clean ..... to delete objects and hex file" hex: main.hex - @echo "===============================" @echo "$(TARGET) compiled for: $(DEVICE)" - @echo -n "size is: " - @$(SIZE) -A $(TARGET).hex | grep "\.sec1" | tr -s " " | cut -d" " -f2 - @echo "===============================" + @./checksize $(TARGET).elf program: flash fuse diff --git a/avr/usbload/checksize b/avr/usbload/checksize old mode 100644 new mode 100755 index 0751929..4a23d76 --- a/avr/usbload/checksize +++ b/avr/usbload/checksize @@ -5,11 +5,11 @@ # Creation Date: 2004-12-29 # Tabsize: 4 # Copyright: (c) 2005 OBJECTIVE DEVELOPMENT Software GmbH. -# Revision: $Id: checksize 83 2006-01-05 22:20:53Z cs $ +# Revision: $:Id: checksize 83 2006-01-05 22:20:53Z cs $ error=0 -codelimit=16384 # default value -datalimit=992 # default value; leave 32 bytes for stack +codelimit=65536 # default value +datalimit=4064 # default value; leave 32 bytes for stack if [ $# -gt 1 ]; then codelimit="$2" diff --git a/avr/usbload/shared_memory.c b/avr/usbload/shared_memory.c index e53ee2f..fae03e7 100644 --- a/avr/usbload/shared_memory.c +++ b/avr/usbload/shared_memory.c @@ -38,6 +38,52 @@ uint8_t scratchpad_state; uint8_t scratchpad_cmd; uint8_t scratchpad_payload; +uint8_t scratchpad_region_rx[SHARED_MEM_RX_LOC_SIZE]; +uint8_t scratchpad_region_tx[SHARED_MEM_TX_LOC_SIZE]; + +uint8_t scratchpad_locked_rx = 1; +uint8_t scratchpad_locked_tx = 1; + + +void shared_memory_scratchpad_region_saye_helper(uint32_t addr){ + + if(addr > (SHARED_MEM_TX_LOC_STATE + SHARED_MEM_TX_LOC_SIZE )) + shared_memory_scratchpad_region_tx_save(); + + if(addr > (SHARED_MEM_RX_LOC_STATE + SHARED_MEM_RX_LOC_SIZE )) + shared_memory_scratchpad_region_rx_save(); + } + + +void shared_memory_scratchpad_region_tx_save() +{ + debug(DEBUG_SHM,"shared_memory_scratchpad_region_tx_save: unlock\n"); + sram_bulk_read_buffer(SHARED_MEM_TX_LOC_STATE,scratchpad_region_tx,SHARED_MEM_TX_LOC_SIZE); + scratchpad_locked_tx = 0; +} + +void shared_memory_scratchpad_region_tx_restore() +{ + debug(DEBUG_SHM,"shared_memory_scratchpad_region_tx_restore: lock\n"); + sram_bulk_copy(SHARED_MEM_TX_LOC_STATE,scratchpad_region_tx,SHARED_MEM_TX_LOC_SIZE); + scratchpad_locked_tx = 1; +} + +void shared_memory_scratchpad_region_rx_save() +{ + debug(DEBUG_SHM,"shared_memory_scratchpad_region_rx_save: unlock\n"); + sram_bulk_read_buffer(SHARED_MEM_RX_LOC_STATE,scratchpad_region_rx,SHARED_MEM_RX_LOC_SIZE); + scratchpad_locked_rx = 0; +} + +void shared_memory_scratchpad_region_rx_restore() +{ + debug(DEBUG_SHM,"shared_memory_scratchpad_region_tx_save: lock\n"); + sram_bulk_copy(SHARED_MEM_RX_LOC_STATE,scratchpad_region_rx,SHARED_MEM_RX_LOC_SIZE); + scratchpad_locked_rx = 1; +} + + void shared_memory_scratchpad_tx_save() { scratchpad_state = sram_read(SHARED_MEM_TX_LOC_STATE); @@ -70,6 +116,9 @@ void shared_memory_irq_restore() void shared_memory_write(uint8_t cmd, uint8_t value) { + if (scratchpad_locked_tx) + debug(DEBUG_SHM,"shared_memory_write: locked_tx\n"); + debug(DEBUG_SHM,"shared_memory_write: 0x%04x=0x%02x 0x%04x=0x%02x \n", SHARED_MEM_TX_LOC_CMD, cmd, SHARED_MEM_TX_LOC_PAYLOAD, value); @@ -124,6 +173,9 @@ void shared_memory_yield() int shared_memory_read(uint8_t *cmd, uint8_t *len,uint8_t *buffer) { uint8_t state; + + if (scratchpad_locked_rx) + debug(DEBUG_SHM,"shared_memory_write: locked_tx\n"); state = sram_read(SHARED_MEM_RX_LOC_STATE); diff --git a/avr/usbload/shared_memory.h b/avr/usbload/shared_memory.h index 8aff84c..c0d76c0 100644 --- a/avr/usbload/shared_memory.h +++ b/avr/usbload/shared_memory.h @@ -37,6 +37,7 @@ #define SHARED_MEM_TX_CMD_TERMINATE 0x06 #define SHARED_MEM_TX_LOC_STATE 0x000000 +#define SHARED_MEM_TX_LOC_SIZE 0x000100 #define SHARED_MEM_TX_LOC_CMD 0x000001 #define SHARED_MEM_TX_LOC_PAYLOAD 0x000002 @@ -47,6 +48,7 @@ #define SHARED_MEM_RX_CMD_FILESEL 0x01 #define SHARED_MEM_RX_LOC_STATE 0x001000 +#define SHARED_MEM_RX_LOC_SIZE 0x000400 #define SHARED_MEM_RX_LOC_CMD 0x001001 #define SHARED_MEM_RX_LOC_LEN 0x001002 #define SHARED_MEM_RX_LOC_PAYLOAD 0x001003 @@ -60,6 +62,11 @@ +void shared_memory_scratchpad_region_saye_helper(uint32_t addr); +void shared_memory_scratchpad_region_tx_save(); +void shared_memory_scratchpad_region_tx_restore(); +void shared_memory_scratchpad_region_rx_save(); +void shared_memory_scratchpad_region_rx_restore(); void shared_memory_write(uint8_t cmd, uint8_t value); int shared_memory_read(uint8_t *cmd, uint8_t *len,uint8_t *buffer);