1.继续看下面的代码吧
//setup LS3A - 7A HT link start...
//check 3A clksel setting
li t0, 0xbfe00190 //物理地址1fe00190,3A低速设备地址
lw a0, 0x4(t0)
srl a0, a0, 15
beqz a0, 3f /* 正常是跳转 是等于0*/
nop
#ifdef CHECK_HT_PLL_MODE
TTYDBG("Warning: 3A HT in hard freq mode, please modify clksel[7].\r\n")
dli a0, 0x4000000
1:
dsub a0, a0, 1
bnez a0, 1b
nop
#endif
b 2f
nop
3:
TTYDBG("3A HT in soft freq cfg mode...ok\r\n")
2:
//check 7A clksel setting 7A1000user.pdf 15页
dli t0, (LS7A_MISC_BASE_ADDR + 0x60000) //0xe00,100e,0000
lb a0, (0xa00+53)(t0) //0xe00,100e,0a35
beqz a0, 3f /* 正常是跳转 */
nop
#ifdef CHECK_HT_PLL_MODE
TTYDBG("Warning: 7A HT in hard freq mode, please modify clksel[7].\r\n")
dli a0, 0x4000000
1:
dsub a0, a0, 1
bnez a0, 1b
nop
#endif
b 2f
nop
3:
TTYDBG("7A HT in soft freq cfg mode...ok\r\n")
2:
li t2, ((HT1_HARD_FREQ_CFG << 12) | (HT1_HARD_FREQ_CFG << 8) | (HT1_GEN_CFG << 4) | (HT1_WIDTH_CFG << 1) | (HT1_RECONNECT << 0))
li t8, LS7A_HT1_SOFT_FREQ_CFG
dsll t3, t8, 32
li t8, LS3A_HT1_SOFT_FREQ_CFG //这里很重要,是HT的频率软件设置!!!!!
or t3, t3, t8
1.1 前5行
读寄存器0x1fe0,0194的值,然后右移15位,判断是否为0,即检查core是否损坏??正常是直接跳转的。
1.2 直接到代码中3这个标号,中间的代码省略啦。
读取0xe00,100e,0a35(53是十进制)寄存器地址的一个字节。这是7A桥片的。
这里提示是桥片的固定设备地址空间,继续看pdf
0x100e,0a35在上图中的范围,继续查找MISC的部分。
地址的第16-18决定了是什么设备,现在要找的是16-19是0xe,16-18即是6,找到对应的设备是GPIO
继续查找GPIO设备。
这里显示,0xa00表示是获得GPIO的输入值,共有57个字节(0-56),每个字节的bit0有效,
53,对应着GPIO53,看看这个GPIO是啥?
这个引脚的电平确实是0.
按照代码,则跳转。
1.3 代码跳转到前面的3这个标号,继续执行
t2 = 9<<12 | 9<<8 | 3<<4 | 1<<1 | 1<<0; 这个肯定要设置到寄存器中去。
最终t3保存了3A和7AHT频率设置到1600M的参数(各占32位)。
t81 = 2<<22 | 2<<18 | 2<<16 | 32*2<<9 | 8<<5 | 1<<1; //7A的设置,t3的高32位
t82= 2<<22 | 2<<18 | 3<<16 | 32*3<<9 | 8<<5 | 1<<1; //3A的设置,t3的低32位 //宏定义BONITO_33M 被定义了。
2. 接着上面的代码,继续向下
dli a0, 0x90000e0000000000
move a1, t2
move a2, t3
bal config_ht_link //传递3个参数,HT控制器的配置
nop
准备参数a0,a1,a2,这里就不多说了。
跳转执行config_ht_link