Improve picosoc demo firmware, picosoc firmware build fixes
Signed-off-by: Clifford Wolf <clifford@clifford.at>
This commit is contained in:
parent
ce9d92939a
commit
b3f292a988
|
@ -39,10 +39,10 @@ firmware.elf: sections.lds start.s firmware.c
|
||||||
riscv32-unknown-elf-gcc -march=rv32imc -Wl,-Bstatic,-T,sections.lds,--strip-debug -ffreestanding -nostdlib -o firmware.elf start.s firmware.c
|
riscv32-unknown-elf-gcc -march=rv32imc -Wl,-Bstatic,-T,sections.lds,--strip-debug -ffreestanding -nostdlib -o firmware.elf start.s firmware.c
|
||||||
|
|
||||||
firmware.hex: firmware.elf
|
firmware.hex: firmware.elf
|
||||||
riscv32-unknown-elf-objcopy -O verilog firmware.elf > firmware.hex
|
riscv32-unknown-elf-objcopy -O verilog firmware.elf firmware.hex
|
||||||
|
|
||||||
firmware.bin: firmware.elf
|
firmware.bin: firmware.elf
|
||||||
riscv32-unknown-elf-objcopy -O binary firmware.elf > firmware.bin
|
riscv32-unknown-elf-objcopy -O binary firmware.elf firmware.bin
|
||||||
|
|
||||||
# ---- Testbench for SPI Flash Model ----
|
# ---- Testbench for SPI Flash Model ----
|
||||||
|
|
||||||
|
|
|
@ -108,10 +108,11 @@ char getchar_prompt(char *prompt)
|
||||||
uint32_t cycles_begin, cycles_now, cycles;
|
uint32_t cycles_begin, cycles_now, cycles;
|
||||||
__asm__ volatile ("rdcycle %0" : "=r"(cycles_begin));
|
__asm__ volatile ("rdcycle %0" : "=r"(cycles_begin));
|
||||||
|
|
||||||
|
reg_leds = ~0;
|
||||||
|
|
||||||
if (prompt)
|
if (prompt)
|
||||||
print(prompt);
|
print(prompt);
|
||||||
|
|
||||||
reg_leds = ~0;
|
|
||||||
while (c == -1) {
|
while (c == -1) {
|
||||||
__asm__ volatile ("rdcycle %0" : "=r"(cycles_now));
|
__asm__ volatile ("rdcycle %0" : "=r"(cycles_now));
|
||||||
cycles = cycles_now - cycles_begin;
|
cycles = cycles_now - cycles_begin;
|
||||||
|
@ -123,6 +124,7 @@ char getchar_prompt(char *prompt)
|
||||||
}
|
}
|
||||||
c = reg_uart_data;
|
c = reg_uart_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
reg_leds = 0;
|
reg_leds = 0;
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
@ -340,22 +342,16 @@ void cmd_benchmark_all()
|
||||||
|
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
|
|
||||||
extern uint32_t _sidata, _sdata, _edata, _sbss, _ebss;
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// copy data section
|
reg_leds = 31;
|
||||||
for (uint32_t *src = &_sidata, *dest = &_sdata; dest < &_edata;) {
|
|
||||||
*dest++ = *src++;
|
|
||||||
}
|
|
||||||
// zero out .bss section
|
|
||||||
for (uint32_t *dest = &_sbss; dest < &_ebss;) {
|
|
||||||
*dest++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
reg_uart_clkdiv = 104;
|
reg_uart_clkdiv = 104;
|
||||||
|
print("Booting..\n");
|
||||||
|
|
||||||
|
reg_leds = 63;
|
||||||
set_flash_qspi_flag();
|
set_flash_qspi_flag();
|
||||||
|
|
||||||
|
reg_leds = 127;
|
||||||
while (getchar_prompt("Press ENTER to continue..\n") != '\r') { /* wait */ }
|
while (getchar_prompt("Press ENTER to continue..\n") != '\r') { /* wait */ }
|
||||||
|
|
||||||
print("\n");
|
print("\n");
|
||||||
|
|
|
@ -35,11 +35,55 @@ addi x29, zero, 0
|
||||||
addi x30, zero, 0
|
addi x30, zero, 0
|
||||||
addi x31, zero, 0
|
addi x31, zero, 0
|
||||||
|
|
||||||
# zero initialize scratchpad memory
|
# Update LEDs
|
||||||
|
li a0, 0x03000000
|
||||||
|
li a1, 1
|
||||||
|
sw a1, 0(a0)
|
||||||
|
|
||||||
|
# zero initialize entire scratchpad memory
|
||||||
|
li a0, 0x00000000
|
||||||
setmemloop:
|
setmemloop:
|
||||||
sw zero, 0(x1)
|
sw a0, 0(a0)
|
||||||
addi x1, x1, 4
|
addi a0, a0, 4
|
||||||
blt x1, sp, setmemloop
|
blt a0, sp, setmemloop
|
||||||
|
|
||||||
|
# Update LEDs
|
||||||
|
li a0, 0x03000000
|
||||||
|
li a1, 3
|
||||||
|
sw a1, 0(a0)
|
||||||
|
|
||||||
|
# copy data section
|
||||||
|
la a0, _sidata
|
||||||
|
la a1, _sdata
|
||||||
|
la a2, _edata
|
||||||
|
bge a1, a2, end_init_data
|
||||||
|
loop_init_data:
|
||||||
|
lw a3, 0(a0)
|
||||||
|
sw a3, 0(a1)
|
||||||
|
addi a0, a0, 4
|
||||||
|
addi a1, a1, 4
|
||||||
|
blt a1, a2, loop_init_data
|
||||||
|
end_init_data:
|
||||||
|
|
||||||
|
# Update LEDs
|
||||||
|
li a0, 0x03000000
|
||||||
|
li a1, 7
|
||||||
|
sw a1, 0(a0)
|
||||||
|
|
||||||
|
# zero-init bss section
|
||||||
|
la a0, _sbss
|
||||||
|
la a1, _ebss
|
||||||
|
bge a0, a1, end_init_bss
|
||||||
|
loop_init_bss:
|
||||||
|
sw zero, 0(a0)
|
||||||
|
addi a0, a0, 4
|
||||||
|
blt a0, a1, loop_init_bss
|
||||||
|
end_init_bss:
|
||||||
|
|
||||||
|
# Update LEDs
|
||||||
|
li a0, 0x03000000
|
||||||
|
li a1, 15
|
||||||
|
sw a1, 0(a0)
|
||||||
|
|
||||||
# call main
|
# call main
|
||||||
call main
|
call main
|
||||||
|
|
Loading…
Reference in New Issue