refactor sram buffer copy functions

This commit is contained in:
optixx 2009-08-24 22:13:59 +02:00
parent d1415c6283
commit d8b23614d7
4 changed files with 30 additions and 19 deletions

View File

@ -97,7 +97,7 @@ uint16_t crc_check_memory_range(uint32_t start_addr, uint32_t size,uint8_t *buff
uint16_t crc = 0;
uint32_t addr;
for (addr = start_addr; addr < start_addr + size; addr += TRANSFER_BUFFER_SIZE) {
sram_bulk_read_buffer(addr, buffer, TRANSFER_BUFFER_SIZE);
sram_bulk_copy_into_buffer(addr, buffer, TRANSFER_BUFFER_SIZE);
crc = do_crc_update(crc, buffer, TRANSFER_BUFFER_SIZE);
}
return crc;

View File

@ -51,7 +51,7 @@
extern const char _rom[] PROGMEM;
extern FILE uart_stdout;
uint8_t debug_level = (DEBUG | DEBUG_USB | DEBUG_CRC);
uint8_t debug_level = (DEBUG | DEBUG_USB | DEBUG_CRC | DEBUG_SHM);
uint8_t read_buffer[TRANSFER_BUFFER_SIZE];
uint32_t req_addr = 0;
@ -353,7 +353,13 @@ int main(void)
while (req_state != REQ_STATUS_SNES) {
usbPoll();
}
shared_memory_write(SHARED_MEM_TX_CMD_TERMINATE, 0);
shared_memory_scratchpad_region_tx_restore();
shared_memory_scratchpad_region_rx_restore();
info("USB poll done\n");
set_rom_mode();
snes_wr_disable();

View File

@ -47,11 +47,11 @@ uint8_t scratchpad_locked_tx = 1;
uint8_t shared_memory_scratchpad_region_save_helper(uint32_t addr){
if(addr > (SHARED_MEM_TX_LOC_STATE + SHARED_MEM_TX_LOC_SIZE )){
if(addr > (SHARED_MEM_TX_LOC_STATE + SHARED_MEM_TX_LOC_SIZE ) && scratchpad_locked_tx){
shared_memory_scratchpad_region_tx_save();
return 0;
}
if(addr > (SHARED_MEM_RX_LOC_STATE + SHARED_MEM_RX_LOC_SIZE )){
if(addr > (SHARED_MEM_RX_LOC_STATE + SHARED_MEM_RX_LOC_SIZE ) && scratchpad_locked_rx){
shared_memory_scratchpad_region_rx_save();
return 0;
}
@ -62,28 +62,33 @@ uint8_t shared_memory_scratchpad_region_save_helper(uint32_t addr){
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);
sram_bulk_copy_into_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);
sram_bulk_copy_into_buffer(SHARED_MEM_RX_LOC_STATE,scratchpad_region_rx,SHARED_MEM_RX_LOC_SIZE);
scratchpad_locked_rx = 0;
}
void shared_memory_scratchpad_region_tx_restore()
{
if (scratchpad_locked_tx)
return;
debug(DEBUG_SHM,"shared_memory_scratchpad_region_tx_restore: lock\n");
sram_bulk_copy_from_buffer(SHARED_MEM_TX_LOC_STATE,scratchpad_region_tx,SHARED_MEM_TX_LOC_SIZE);
scratchpad_locked_tx = 1;
}
void shared_memory_scratchpad_region_rx_restore()
{
if (scratchpad_locked_rx)
return;
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);
sram_bulk_copy_from_buffer(SHARED_MEM_RX_LOC_STATE,scratchpad_region_rx,SHARED_MEM_RX_LOC_SIZE);
scratchpad_locked_rx = 1;
}
@ -193,7 +198,7 @@ int shared_memory_read(uint8_t *cmd, uint8_t *len,uint8_t *buffer)
debug(DEBUG_SHM,"shared_memory_read: 0x%04x=0x%02x 0x%04x=0x%02x \n",
SHARED_MEM_RX_LOC_CMD, *cmd, SHARED_MEM_RX_LOC_LEN, *len);
sram_bulk_read_buffer(SHARED_MEM_RX_LOC_PAYLOAD,buffer, *len);
sram_bulk_copy_into_buffer(SHARED_MEM_RX_LOC_PAYLOAD,buffer, *len);
sram_write(SHARED_MEM_RX_LOC_STATE, SHARED_MEM_RX_AVR_RTS);
snes_hirom();

View File

@ -284,12 +284,12 @@ void sram_write(uint32_t addr, uint8_t data)
}
void sram_bulk_copy(uint32_t addr, uint8_t * src, uint32_t len)
void sram_bulk_copy_from_buffer(uint32_t addr, uint8_t * src, uint32_t len)
{
uint32_t i;
uint8_t *ptr = src;
debug(DEBUG_SRAM,"sram_copy: addr=0x%08lx src=0x%p len=%li\n\r", addr,src,len);
debug(DEBUG_SRAM,"sram_bulk_copy_from_buffer: addr=0x%08lx src=0x%p len=%li\n\r", addr,src,len);
sram_bulk_write_start(addr);
for (i = addr; i < (addr + len); i++){
sram_bulk_write(*ptr++);
@ -298,12 +298,12 @@ void sram_bulk_copy(uint32_t addr, uint8_t * src, uint32_t len)
sram_bulk_write_end();
}
void sram_bulk_read_buffer(uint32_t addr, uint8_t * dst, uint32_t len)
void sram_bulk_copy_into_buffer(uint32_t addr, uint8_t * dst, uint32_t len)
{
uint32_t i;
uint8_t *ptr = dst;
debug(DEBUG_SRAM,"sram_bulk_read_buffer: addr=0x%08lx dst=0x%p len=%li\n\r", addr,dst,len);
debug(DEBUG_SRAM,"sram_bulk_copy_into_buffer: addr=0x%08lx dst=0x%p len=%li\n\r", addr,dst,len);
sram_bulk_read_start(addr);
for (i = addr; i < (addr + len); i++) {
*ptr = sram_bulk_read();