基于IMX6ULLmini的linux裸机开发系列一:汇编点亮LED

思来想去还是决定记录一下点灯,毕竟万物皆点灯嘛

编程步骤

  • 使能GPIO时钟

  • 设置引脚复用为GPIO

  • 设置引脚属性(上下拉、速率、驱动能力)

  • 控制GPIO引脚输出高低电平

使能GPIO时钟

其实和32差不多

先找到控制LED灯的引脚,也就是原理图

文件名

C:/Users/dawn/Desktop/野火_EBF6ULL%20S1%20Mini_EBF410270V1_SCH_20230518.pdf

然后再数据手册找到对应开启时钟的寄存器和引脚定义

名字:IMX6ULLRM(6ULL用户手册).pdf

这里可以看到所在内存位置0x20c406c

至于为什么要全置1可以看数据手册的定义

这里为了方便赋值全一,其实只要对26、27位赋一就可以

设置引脚复用为GPIO

引脚复用相关寄存器:IOMUXC_SW_MUX_CTL_PAD_XXX

设置引脚属性(上下拉、速率、驱动能力)

Register (IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO04)

控制GPIO引脚输出高低电平、

设置引脚方向

把第4位置1也就是10000(2)=16(10)

设置引脚电平

4置为0即可

代码

cpp 复制代码
.global _start

_start:

@ 使能GPIO时钟
ldr r0,=0x20c406c
ldr r1,=0xffffffff
str r1,[r0]

@ 设置引脚复用为GPIO
ldr r0,=0x20e006c
ldr  r1,=5
str r1,[r0]


@ 设置引脚属性(上下拉、速率、驱动能力)
ldr r0,=0x20e02f8
ldr  r1,=0x10b0
str r1,[r0]

@ 控制GPIO引脚输出高低电平
ldr r0,=0x0209c004
ldr  r1,=16
str r1,[r0]

ldr r0,=0x0209c000
ldr  r1,=0
str r1,[r0]

程序编译

下载裸机的gcc编译器

复制代码
sudo apt-get install gcc-arm-none-eabi  裸机程序编译

编译汇编文件为可重定位文件led.o

复制代码
arm-none-eabi-gcc -c led.s -o led.o

把重定位文件链接起来,得到可执行程序(elf文件)

复制代码
arm-none-eabi-ld -Ttext 0x80000000 led.o -o led.elf

这里记录一下我遇到的问题

gec@ubuntu:~/bare_mental/part_2$ arm-none-eabi-ld -Ttext 0x80000000 led.o -o led.elf

arm-none-eabi-ld: warning: cannot find entry symbol _start; defaulting to 0000000080000000

这是GNU链接器(ld)的警告消息,指示未找到入口符号_start,而默认使用地址0000000080000000作为入口点。

入口符号(Entry symbol)是程序的起始点。通常情况下,它是C/C++代码中的main函数。在本例中,ld无法找到名为_start的入口符号,因此会使用默认的入口地址0000000080000000。

我当时是从VS粘贴到VScode的

右下角设置为UTF-8和LF就好了

把elf文件去掉冗余的段和elf头,得到纯净的bin文件

复制代码
arm-none-eabi-objcopy -O binary led.elf led.bin

给bin文件添加6ull特殊的头部信息(IVT+boot data+DCD),并烧录到sd卡

复制代码
./mkimage.sh XXX.bin

这里需要把拨码开关调至258,emmc启动的是2457

然后就成功点亮一枚LED了!

相关推荐
liulilittle14 小时前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
工业互联网专业14 小时前
汇编与接口技术:8259中断实验
汇编·单片机·嵌入式硬件·8259中断实验
small_wh1te_coder1 天前
硬件嵌入式学习路线大总结(一):C语言与linux。内功心法——从入门到精通,彻底打通你的任督二脉!
linux·c语言·汇编·嵌入式硬件·算法·c
Ronin-Lotus13 天前
微处理器原理与应用篇---ARM常见汇编指令
汇编·arm开发·微处理原理与应用
永夜的黎明16 天前
【二进制安全作业】250616课上作业1-栈溢出漏洞利用
c语言·汇编·安全
Geometry Fu18 天前
物联网控制技术 知识点总结 第三章 汇编语言 第四章 C51语言
汇编·物联网·51单片机
半桔19 天前
【Linux手册】进程的状态:从创建到消亡的“生命百态”
linux·运维·服务器·汇编·深度学习·面试
一条叫做nemo的鱼22 天前
从汇编的角度揭开C++ this指针的神秘面纱(下)
java·汇编·c++·函数调用·参数传递
一条叫做nemo的鱼22 天前
从汇编的角度揭开C++ this指针的神秘面纱(上)
汇编·c++·算法·函数调用·this指针·参数传递
qwertyuiop_i24 天前
汇编(函数调用)
汇编·windows·函数调用