add fast bulk read

This commit is contained in:
david 2009-06-24 10:38:59 +02:00
parent b8bd7acfa3
commit 465ea1fbfe
4 changed files with 61 additions and 4 deletions

View File

@ -16,7 +16,6 @@ uint16_t crc_xmodem_update(uint16_t crc, uint8_t data)
else
crc <<= 1;
}
return crc;
}
@ -26,7 +25,6 @@ uint16_t do_crc(uint8_t * data, uint16_t size)
uint16_t i;
for (i = 0; i < size; i++) {
crc = crc_xmodem_update(crc, data[i]);
// printf("%x : %x\n",crc,data[i]);
}
return crc;
}

View File

@ -135,7 +135,7 @@ usbMsgLen_t usbFunctionSetup(uchar data[8])
printf("USB_CRC_ADDR: Addr: 0x%lx Size: %li\n", req_addr, req_size);
#endif
cli();
// crc_check_memory_range(req_addr,req_size);
crc_check_memory_range(req_addr,req_size);
sei();
ret_len = 2;
}

View File

@ -97,16 +97,64 @@ void sreg_set(uint32_t addr)
}
uint8_t sram_read(uint32_t addr)
void sram_bulk_read_start(uint32_t addr)
{
uint8_t byte;
#ifdef DEBUG_SRAM
printf("sram_bulk_read_start: addr=0x%08lx\n\r", addr);
#endif
avr_data_in();
AVR_WR_PORT |= (1 << AVR_WR_PIN);
AVR_RD_PORT |= (1 << AVR_RD_PIN);
AVR_CS_PORT &= ~(1 << AVR_CS_PIN);
sreg_set(addr);
AVR_RD_PORT &= ~(1 << AVR_RD_PIN);
}
void sram_bulk_read_end(void)
{
#ifdef DEBUG_SRAM
printf("sram_bulk_read_end:");
#endif
AVR_CS_PORT |= (1 << AVR_CS_PIN);
avr_data_in();
}
inline uint8_t sram_bulk_read(void)
{
uint8_t byte;
AVR_RD_PORT |= (1 << AVR_RD_PIN);
counter_up();
AVR_RD_PORT &= ~(1 << AVR_RD_PIN);
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
byte = AVR_DATA_PIN;
AVR_RD_PORT |= (1 << AVR_RD_PIN);
return byte;
}
uint8_t sram_read(uint32_t addr)
{
uint8_t byte;
#ifdef DEBUG_SRAM
printf("sram_read: addr=0x%08lx\n\r", addr);
#endif
avr_data_in();
AVR_CS_PORT &= ~(1 << AVR_CS_PIN);
AVR_WR_PORT |= (1 << AVR_WR_PIN);
AVR_RD_PORT |= (1 << AVR_RD_PIN);
sreg_set(addr);
@ -133,6 +181,11 @@ uint8_t sram_read(uint32_t addr)
void sram_write(uint32_t addr, uint8_t data)
{
#ifdef DEBUG_SRAM
printf("sram_write: addr=0x%08lx data=%x\n\r", addr, data);
#endif
avr_data_out();
AVR_CS_PORT &= ~(1 << AVR_CS_PIN);

View File

@ -141,9 +141,15 @@
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_bulk_read_start(uint32_t addr);
void sram_bulk_read_end(void);
uint8_t sram_bulk_read(void);
void sram_read_buffer(uint32_t addr,uint8_t *dst, uint32_t len);
uint8_t sram_check(uint8_t *buffer, uint32_t len);