refactor sram buffer copy functions
This commit is contained in:
parent
d1415c6283
commit
d8b23614d7
@ -97,7 +97,7 @@ uint16_t crc_check_memory_range(uint32_t start_addr, uint32_t size,uint8_t *buff
|
|||||||
uint16_t crc = 0;
|
uint16_t crc = 0;
|
||||||
uint32_t addr;
|
uint32_t addr;
|
||||||
for (addr = start_addr; addr < start_addr + size; addr += TRANSFER_BUFFER_SIZE) {
|
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);
|
crc = do_crc_update(crc, buffer, TRANSFER_BUFFER_SIZE);
|
||||||
}
|
}
|
||||||
return crc;
|
return crc;
|
||||||
|
|||||||
@ -51,7 +51,7 @@
|
|||||||
extern const char _rom[] PROGMEM;
|
extern const char _rom[] PROGMEM;
|
||||||
extern FILE uart_stdout;
|
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];
|
uint8_t read_buffer[TRANSFER_BUFFER_SIZE];
|
||||||
uint32_t req_addr = 0;
|
uint32_t req_addr = 0;
|
||||||
@ -353,7 +353,13 @@ int main(void)
|
|||||||
while (req_state != REQ_STATUS_SNES) {
|
while (req_state != REQ_STATUS_SNES) {
|
||||||
usbPoll();
|
usbPoll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
shared_memory_write(SHARED_MEM_TX_CMD_TERMINATE, 0);
|
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");
|
info("USB poll done\n");
|
||||||
set_rom_mode();
|
set_rom_mode();
|
||||||
snes_wr_disable();
|
snes_wr_disable();
|
||||||
|
|||||||
@ -47,11 +47,11 @@ uint8_t scratchpad_locked_tx = 1;
|
|||||||
|
|
||||||
uint8_t shared_memory_scratchpad_region_save_helper(uint32_t addr){
|
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();
|
shared_memory_scratchpad_region_tx_save();
|
||||||
return 0;
|
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();
|
shared_memory_scratchpad_region_rx_save();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -62,28 +62,33 @@ uint8_t shared_memory_scratchpad_region_save_helper(uint32_t addr){
|
|||||||
void shared_memory_scratchpad_region_tx_save()
|
void shared_memory_scratchpad_region_tx_save()
|
||||||
{
|
{
|
||||||
debug(DEBUG_SHM,"shared_memory_scratchpad_region_tx_save: unlock\n");
|
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;
|
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()
|
void shared_memory_scratchpad_region_rx_save()
|
||||||
{
|
{
|
||||||
debug(DEBUG_SHM,"shared_memory_scratchpad_region_rx_save: unlock\n");
|
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;
|
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()
|
void shared_memory_scratchpad_region_rx_restore()
|
||||||
{
|
{
|
||||||
|
if (scratchpad_locked_rx)
|
||||||
|
return;
|
||||||
debug(DEBUG_SHM,"shared_memory_scratchpad_region_tx_save: lock\n");
|
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;
|
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",
|
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);
|
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);
|
sram_write(SHARED_MEM_RX_LOC_STATE, SHARED_MEM_RX_AVR_RTS);
|
||||||
|
|
||||||
snes_hirom();
|
snes_hirom();
|
||||||
|
|||||||
@ -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;
|
uint32_t i;
|
||||||
uint8_t *ptr = src;
|
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);
|
sram_bulk_write_start(addr);
|
||||||
for (i = addr; i < (addr + len); i++){
|
for (i = addr; i < (addr + len); i++){
|
||||||
sram_bulk_write(*ptr++);
|
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();
|
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;
|
uint32_t i;
|
||||||
uint8_t *ptr = dst;
|
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);
|
sram_bulk_read_start(addr);
|
||||||
for (i = addr; i < (addr + len); i++) {
|
for (i = addr; i < (addr + len); i++) {
|
||||||
*ptr = sram_bulk_read();
|
*ptr = sram_bulk_read();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user