单龙芯3A3000-7A1000PMON研究学习-(25)撸起袖子干-再来一杯代码7

代码段检查3A和7A低速设备的时钟选择设置,确保其处于软频配置模式。通过读取特定地址的寄存器值并进行位移判断,确认核心状态,并对可能出现的硬频模式发出警告。同时,设置了HT1的频率配置参数,为后续的HT控制器配置做准备。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大智兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值