uboot-汇编实现点亮LED灯

背景

    有时候在调试新项目开发板,上电启动后串口完全没有打印信息,开发板没有一点信息反馈,这时候我们需要在uboot代码的stage1阶段汇编代码中实现LED点亮来测试CPU是否加载了启动代码,以此来判断整个CPU和开发板的状态。

实现

    整体实现流程:查看LED灯GPIO口、获取GPIO口基地址、获取方向和数据寄存器地址、写汇编代码进行测试;

NXP IMX7D

    查看电路图,可看出LED接在GPIO2口上,接下来查看芯片手册GPIO2寄存器信息;

    获取GPIO2寄存器基地址,芯片手册NXP IMX7DRM.pdf,基地址为0x30210000;

    GPIO2寄存器详细描如下:

    方向寄存器和详细描述如下:

    32位的bit位对应GPIO2_IOx,0表示INPUT,1表示OUTPUT;

    数据寄存器详细描述如下:

    当方向寄存器设置为OUTPUT时电平可拉高拉低、32位bit对应GPIO2_IOx,0表示低,1表示高;

    汇编代码编写,先计算出方向寄存器地址需要写入的数据,GPIO2_IO2/3,对应bit位的2和3,这里设置为OUTPUT,那么二进制值应该为1100,换算成十六进制为0xc;

    数据寄存器数据计算,看电路图可知点亮LED需拉高输出电平,那么对应bit位是1100,换算成十六进制为0xc;

    汇编代码如下:

        ldr     r0, =0x30210004    #将寄存器地址0x30210004写入r0寄存器中

        mov     r1, #0xc               #将立即数0xc移动到r1寄存器中

        str     r1, [r0]                    #将r1源寄存器中一个32位的数据传送到r0存储器中

        ldr     r0, =0x30210000

        mov     r1, #0xc

        str     r1, [r0]

    下面汇编代码实现LED D14灯点亮功能;

TI AM437X

    电路图:AM437x Sitara™ 处理器 (Rev. A).pdf

    查看芯片手册GPIO口为GPIO3:

        D15 - LED1 - SAI2_TXC - GMII1_CRS/MCASP1_ACLKX - gpio3_1

       D14 - LED2 - SAI2_TXFS - GMII1_RXERR/MCASP1_FSX - gpio3_2

    基地址:AM437X Manual.pdf

    功能寄存器:

     方向寄存器:

    数据寄存器:

    计算寄存器值:

        设置GPIO3_1位输出:

            0x481AE000 + 134 = 0x0

        设置GPIO3_1拉高:

            0x481AE000 + 13c = 0x2

扩展

uboot命令读写寄存器

mw [.b, .w, .l, .q] address value [count]

md [.b, .w, .l, .q] address [# of objects]

也可实现电灯动作,例如imx8mm电灯:

SYS_LED1	GPIO1_14	0x4000
SYS_LED2	GPIO1_13	0x2000

Start Address End Address Region NIC Port Size

方向	mw 0x30200004 0x6000
数据	mw 0x30200000 0x6000 开灯	
		mw 0x30200000 0x0000 关灯

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值