页次: 1
验证有效
RISCV启动至少需要如下步骤:
1.CCU配置 RISC-V_CFG 0x02001000+0x0D0C Bus Gating Reset Register = 0x00010001(RISCV_CFG_RST=DeAssert, RISC-V_CFG_GATING=Pass)
2.R_CPUCFG bit0 DeAssert(Disassembly from brandy SPL in SDK),此步骤貌似并没有影响
证明:
=> md 0x06010050
06010050: fefbffee 000000ff 00000000 00000000 ................
06010060: 00000000 00000000 00000000 00000000 ................
06010070: 00000000 00000000 00000000 00000000 ................
06010080: 00000000 00000000 00000000 00000000 ................
06010090: 00000000 00000000 00000000 00000000 ................
060100a0: 00000000 00000000 00000000 00000000 ................
060100b0: 00000000 00000000 00000000 00000000 ................
060100c0: 00000000 00000000 00000000 00000000 ................
060100d0: 00000000 00000000 00000000 00000000 ................
060100e0: 00000000 00000000 00000000 00000000 ................
060100f0: 00000000 00000000 00000000 00000000 ................
06010100: 00000000 00000000 00000000 00000000 ................
06010110: 00000000 00000000 00000000 00000000 ................
06010120: 00000000 00000000 00000000 00000000 ................
06010130: 00000000 00000000 00000000 00000000 ................
06010140: 00000000 00000000 00000000 00000000 ................
=>
RETIRE_PC0_REG 有运行过的PC位置
弄了一个T113-i的实物,找到了一些线索,
官方SDK里有个叫做 brandy 的二级boot(ROM算一级的话),里面有闭源的DDR初始化代码啥的,在./spl-pub/board/t113_i/ 中
libsun8iw20p1_fes.a
libsun8iw20p1_nand.a
libsun8iw20p1_sboot.a
libsun8iw20p1_sdcard.a
libsun8iw20p1_spinor.a
实际是个ELF的object文件,
看下符号表,其中有
sunxi_assert_arisc
sunxi_deassert_arisc
怀疑有关启动RISCV
反汇编结果
Disassembly of section .text.sunxi_deassert_arisc:
00000000 <sunxi_deassert_arisc>:
0: b507 push {r0, r1, r2, lr}
2: 4808 ldr r0, [pc, #32] ; (24 <sunxi_deassert_arisc+0x24>)
4: f7ff fffe bl 0 <sunxi_deassert_arisc>
8: 4a07 ldr r2, [pc, #28] ; (28 <sunxi_deassert_arisc+0x28>)
a: 6813 ldr r3, [r2, #0]
c: 9301 str r3, [sp, #4]
e: 9b01 ldr r3, [sp, #4]
10: f043 0301 orr.w r3, r3, #1
14: 9301 str r3, [sp, #4]
16: 9b01 ldr r3, [sp, #4]
18: 2000 movs r0, #0
1a: 6013 str r3, [r2, #0]
1c: b003 add sp, #12
1e: f85d fb04 ldr.w pc, [sp], #4
22: bf00 nop
24: 00000030 .word 0x00000030
28: 07000400 .word 0x07000400
是将 0x07000400 寄存器[0:0]置了一个 'b1
这个寄存器在 UserManual 中说是位于 APBS0 域的 R_CPUCFG 区,但功能未说明,估计很可能得用这个,
其他还有 R_PPU R_PRCM R_TIMER R_TWD 貌似是同组,同样,UserManual 中没有一丁点解释,
如果关键功能与此未公开解释的部分有关,则会无解,只有原厂知道了
做法的决定,要看需求。
如果可变逻辑中可以转变成单线顺序计算,则可以以“【INx】【运算符enum】【INx】【运算符enum】。。。”形式下发给单片机运行,执行机构以循环就可以算结果。较为简单。
如果可变逻辑中包含类似(INx + INx) * (INx + INx)这种计算,这个在编译器领域叫做未决表达式,计算中途需要临时存储,需要分配寄存器或临时栈变量。这种较为复杂需要编译行为,最好在上机做,要有临时变量的表示手段,需要以类似“【INx】【运算符enum】【INx】【变量x】。。。【变量x】【运算符enum】【变量x】“形式下发单片机运行,执行机需要有几个变量槽位。
页次: 1