diff options
Diffstat (limited to 'picosoc/start.s')
-rw-r--r-- | picosoc/start.s | 159 |
1 files changed, 0 insertions, 159 deletions
diff --git a/picosoc/start.s b/picosoc/start.s deleted file mode 100644 index e9e18db..0000000 --- a/picosoc/start.s +++ /dev/null @@ -1,159 +0,0 @@ -.section .text - -start: - -# zero-initialize register file -addi x1, zero, 0 -# x2 (sp) is initialized by reset -addi x3, zero, 0 -addi x4, zero, 0 -addi x5, zero, 0 -addi x6, zero, 0 -addi x7, zero, 0 -addi x8, zero, 0 -addi x9, zero, 0 -addi x10, zero, 0 -addi x11, zero, 0 -addi x12, zero, 0 -addi x13, zero, 0 -addi x14, zero, 0 -addi x15, zero, 0 -addi x16, zero, 0 -addi x17, zero, 0 -addi x18, zero, 0 -addi x19, zero, 0 -addi x20, zero, 0 -addi x21, zero, 0 -addi x22, zero, 0 -addi x23, zero, 0 -addi x24, zero, 0 -addi x25, zero, 0 -addi x26, zero, 0 -addi x27, zero, 0 -addi x28, zero, 0 -addi x29, zero, 0 -addi x30, zero, 0 -addi x31, zero, 0 - -# Update LEDs -li a0, 0x03000000 -li a1, 1 -sw a1, 0(a0) - -# zero initialize entire scratchpad memory -li a0, 0x00000000 -setmemloop: -sw a0, 0(a0) -addi a0, a0, 4 -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 -loop: -j loop - -.global flashio_worker_begin -.global flashio_worker_end - -.balign 4 - -flashio_worker_begin: -# a0 ... data pointer -# a1 ... data length -# a2 ... optional WREN cmd (0 = disable) - -# address of SPI ctrl reg -li t0, 0x02000000 - -# Set CS high, IO0 is output -li t1, 0x120 -sh t1, 0(t0) - -# Enable Manual SPI Ctrl -sb zero, 3(t0) - -# Send optional WREN cmd -beqz a2, flashio_worker_L1 -li t5, 8 -andi t2, a2, 0xff -flashio_worker_L4: -srli t4, t2, 7 -sb t4, 0(t0) -ori t4, t4, 0x10 -sb t4, 0(t0) -slli t2, t2, 1 -andi t2, t2, 0xff -addi t5, t5, -1 -bnez t5, flashio_worker_L4 -sb t1, 0(t0) - -# SPI transfer -flashio_worker_L1: -beqz a1, flashio_worker_L3 -li t5, 8 -lbu t2, 0(a0) -flashio_worker_L2: -srli t4, t2, 7 -sb t4, 0(t0) -ori t4, t4, 0x10 -sb t4, 0(t0) -lbu t4, 0(t0) -andi t4, t4, 2 -srli t4, t4, 1 -slli t2, t2, 1 -or t2, t2, t4 -andi t2, t2, 0xff -addi t5, t5, -1 -bnez t5, flashio_worker_L2 -sb t2, 0(a0) -addi a0, a0, 1 -addi a1, a1, -1 -j flashio_worker_L1 -flashio_worker_L3: - -# Back to MEMIO mode -li t1, 0x80 -sb t1, 3(t0) - -ret - -.balign 4 -flashio_worker_end: |