imx6ull裸机点亮LED

汇编点亮LED

准备工作

点灯前的准备工作,下面是我们需要使用到的文件

image-20230802231241418

dcd.config文件内容是一些DDR和时钟的配置参数

dcdgen.bin可以将dcd.config生成dcd.bin文件

led.s是我们编写的汇编代码,通过这个文件生成led.bin文件

imgutil.bin文件将dcd.bin和led.bin生成镜像文件

led.bin文件

编写汇编代码

led.s代码如下

.global _start

#点亮蓝色的LED灯

_start:
#使能GPIO的时钟,这里使能GPIO4_IO19对应的时钟\控制GPIO4时钟的寄存器是CCGR4

ldr r0,=0x20C4074
ldr r1,=0xffffffff
#将r1中的值赋值到r0内容的地址处
str r1,[r0]

#复用引脚为GPIO

ldr r0,=0x20E01DC
#将寄存器的值设置为3-0bit设置为0101,即数值5
ldr r1,=5
str r1,[r0]

#设置引脚的属性

ldr r0,=0x20E0468
#参考sdk值设计
ldr r1,=0x10b0
str r1,[r0]

#控制引脚

#设置为输出模式,即GPIO4_GDIR
ldr r0,=0x20A8004
ldr r1,=(1<<19)
str r1,[r0]
#设置数据寄存器的值为0,即GPIO4_DR
ldr r0,=0x20A8000
ldr r1,=0
str r1,[r0]

获得led.bin文件

将led.s文件编译成led.o文件

arm-eabi-gcc -c led.s -o led.o

将led.o文件指定链接地址为0x80002000

arm-eabi-ld -Ttext 0x80002000 led.o -o led.elf

将led.elf文件转为led.bin文件

arm-eabi-objcopy -O binary led.elf led.bin

准备dcd.bin文件

dcd.config文件内容为初始化DDR和时钟的参数,使用dcdgen.bin程序将dcd.config生成dcd.bin文件,执行以下命令

./dcdgen.bin dcd.config dcd.bin

执行上述命令输出以下信息

image-20230802230616342

生成镜像文件

至此,我们需要的文件都已经准备就绪啦。

接下来运行imgutil.bin程序,传入参数,将文件打包为sdk20-app.img镜像文件

./imgutil.bin --combine base_addr=0x80000000 ivt_offset=0x400 app_offset=0x2000 dcd_file=dcd.bin app_file=led.bin ofile=sdk20-app.img image_entry_point=0x80002000

上面命令的各参数含义

变量内容对应含义
base_addr0x80000000IVT表的基地址
ivt_offset0x400IVT表相对基地址的偏移
app_offset0x2000led.bin文件相对基地址的偏移
dcd_filedcd.bin片内ROM执行配置DDR和时钟的参数
app_fileled.bin真正要执行的代码
ofilesdk20-app.img生成的镜像文件
image_entry_point0x80002000程序的入口地址

执行上述命令输出信息如下图所示

image-20230802224736967

烧录镜像文件

接下来将生成的镜像文件sdk20-app.img,烧录到sd卡中,我的sd卡在linux上是sdb,执行下面命令烧录到sd卡

sudo dd if=sdk20-app.img of=/dev/sdb bs=512 conv=fsync

执行上述命令输出信息如下图所示

image-20230802225021969

实验现象

将sd卡插入,开发板中,拨码开关选择sd卡启动,上电后就点亮了LED。

IMG_20230802_225109

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值