123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- #define BOOT_DEBUG
- #ifndef FLASH_APP_ADDR
- #define FLASH_APP_ADDR 0x00100000
- #endif
- .equ UART_BASE, 0x82000000
- .section .text.start
- .global _start
- _start:
- #ifdef BOOT_DEBUG
-
- li a0, UART_BASE
- li a1, 23
- sw a1, 4(a0)
- #endif
-
- li t0, 0x01000000
- 1:
- addi t0, t0, -1
- bne t0, zero, 1b
-
- jal spi_init
-
- li a0, 0xDEADBEEF
- jal print_hex
-
- li t0, 0x0002006f
- sw t0, 0(zero)
-
- li ra, (0x40000000 + FLASH_APP_ADDR)
- ret
- .equ SPI_BASE, 0x80000000
- .equ SPI_CSR, 4 * 0x00
- .equ SPI_RF, 4 * 0x03
- spi_init:
-
-
- mv t6, ra
-
-
- li t5, SPI_BASE
-
- li t0, 0x00000004
- sw t0, SPI_CSR(t5)
- li t0, 0x00000002
- sw t0, SPI_CSR(t5)
-
- li t0, 0x38000000
- sw t0, 0x40(t5)
-
- lw t0, SPI_RF(t5)
-
- li t0, 0x00000004
- sw t0, SPI_CSR(t5)
-
-
-
- li t0, 0x00000004
- sw t0, SPI_CSR(t5)
- li t0, 0x00000002
- sw t0, SPI_CSR(t5)
-
- li t0, 0xc0230000
- sw t0, 0x74(t5)
-
- li t0, 0x00000004
- sw t0, SPI_CSR(t5)
-
-
-
- li t0, 0x00000004
- sw t0, SPI_CSR(t5)
- li t0, 0x00000012
- sw t0, SPI_CSR(t5)
-
- li t0, 0x35000000
- sw t0, 0x40(t5)
-
- lw t0, SPI_RF(t5)
-
- li t0, 0x00000004
- sw t0, SPI_CSR(t5)
-
-
- mv ra, t6
- ret
- #ifdef BOOT_DEBUG
- print_hex:
- li t0, UART_BASE
- li t1, 8
- la t2, hexchar
- 1:
- srli t3, a0, 28
- add t3, t3, t2
- lb t3, 0(t3)
- sw t3, 0(t0)
- slli a0, a0, 4
- addi t1, t1, -1
- bne zero, t1, 1b
- print_nl:
- li t0, UART_BASE
- li a0, '\r'
- sw a0, 0(t0)
- li a0, '\n'
- sw a0, 0(t0)
- ret
- hexchar:
- .ascii "0123456789abcdef"
- #endif
|