1234567891011121314151617181920212223242526272829303132 |
- #include "fw.h"
- #include "io.h"
- extern const char __dram_init_start[], __dram_init_end[], __dram_init_len[];
- extern const char __dram_bss_start[], __dram_bss_end[], __dram_bss_len[];
- uint32_t romcopy_time[2];
- IRQHANDLER(romcopy)
- {
- static unsigned int romcopy_state;
- switch (romcopy_state++) {
- case 0:
- /* Copy testdata */
- ROMCOPY_RAMADDR = (size_t)__dram_init_start;
- ROMCOPY_ROMADDR = __rom_offset;
- ROMCOPY_DATALEN = (size_t)__dram_init_len;
- break;
- case 1:
- /* Zero .dram.bss */
- romcopy_time[0] = rdtime() - time_zero;
- ROMCOPY_RAMADDR = (size_t)__dram_bss_start;
- ROMCOPY_ROMADDR = 0; /* Clear */
- ROMCOPY_DATALEN = (size_t)__dram_bss_len;
- break;
- default:
- romcopy_time[1] = rdtime() - romcopy_time[0];
- mask_irq(ROMCOPY_IRQ);
- return;
- }
- }
|