ARM--启动实现LED
2026/7/22 0:49:12 网站建设 项目流程

安装环境

visual studio code

ARM插件:Chinese(Simplified)
Arm Assembly

C语言插件:Back & Forth
C / C++
C / C++ Extension Pack
C / C++ Themes
CMake
CMake Tools
highlight - words
Makefile Tools

Ubuntu下的编译器

确认版本 arm-linux-gnueabihf-gcc -v

filezilla上传文件

上传步骤:文件 -->站点管理器 -->新站点

右侧win本地站点,左侧Ubuntu远程站点,选择对应文件夹,右键点击上传文件夹上传

启动代码

异常向量表配置

.global

汇编器指令,全局定义标签_start,作为汇编程序的默认起点

配置标签

配置标签时可以前置加_ ,以便和普通标签或系统标签做区分

异常向量表

ARM架构 规定异常向量表位置固定,配置对应位置的异常向量

复位函数

设置时钟

LED配置

Led_init

功能复用配置

1. 加载IOMUX控制寄存器地址
Address :20E_0000h base + 68h offset = 0x20E 0068

2. 将引脚功能从默认模式切换为GPIO
模式GPIO_IO03 gpio1模式代码为 0101 = 0x05

3. str指令将配置写回寄存器
将 r1 存放的内容存放在 r0 存放的地址内
即将0x05 模式存放在控制寄存器的地址,实现引脚初始化

电气属性配置

设置引脚的驱动能力、上拉电阻等电气参数

1. 加载PAD控制寄存器地址
Address:20E_0000h base + 2F4h offset = 0x20E 02F4

2. 配置电气参数(驱动强度、压摆率、上下拉、开漏/推挽)
配置为0x10B0 = 0001 0000 1011 0000
对应部分参数为:12位 : 1:使能上拉
7-6位: 10:中速100MHZ
5-3位:110:中等驱动强度 ......

3. str指令将配置写回寄存器
将 r1 存放的内容存放在 r0 存放的地址内
即将0x10B0 模式存放在PAD寄存器的地址,实现电气配置

工作模式配置

将引脚设置为输出模式

1. 加载GPIO1的GDIR(方向控制寄存器)地址
Address:Base address + 4h offset

2. 设置输出模式
将GPIO_IO03设为输出,即通过orr指令将第三位置1

3. str指令将配置写回寄存器
将 r1 存放的内容存放在 r0 存放的地址内
即将结果返回寄存器地址,实现配置输出模式

Led_on


编译与测试

arm-linux-gnueabihf-gcc 只汇编不链接

arm-linux-gnueabihf-gcc -c led.S -o led.o -g

-o:只编译不链接;-g:保留编译信息

arm-linux-gnueabihf-ld 链接代码到特定地址

(得到可执行,可连接程序 linux executable linkable file)

arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf

Ttext:指定代码段加载地址;-o:输出ELF格式可执行文件

arm-linux-gnueabihf-objcopy 格式转换

arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

-O binary:输出二进制格式;-S:去除符号表;-g:去除调试信息

arm-linux-gnueabihf-objdump 反汇编(可省略)

arm-linux-gnueabihf-objdump -D led.elf > led.dis

-D:反汇编所有段

imxdownload 烧写程序到SD卡

./imxdownload led.bin /dev/sdb
  • 插入SD卡后选择连接到虚拟机Ubuntu
  • 使用 chmod +777 imxdownload 命令赋予 imxdownload 权限
  • 通过 ls /imxdownload /dev/sdb 命令查看dev
  • 刚插入SD卡就执行命令可能会出错,现象为少烧写速率以M为单位,此时需要重启虚拟机
  • 修改板子工作模式为SD模式
  • 插入SD卡时不要上电

BOOT工作模式:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询