ARM--启动实现LED

安装环境

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

  1. 将引脚功能从默认模式切换为GPIO

模式GPIO_IO03 gpio1模式代码为 0101 = 0x05

  1. str指令将配置写回寄存器

将 r1 存放的内容存放在 r0 存放的地址内

即将0x05 模式存放在控制寄存器的地址,实现引脚初始化

电气属性配置

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

  1. 加载PAD控制寄存器地址

Address:20E_0000h base + 2F4h offset = 0x20E 02F4

  1. 配置电气参数(驱动强度、压摆率、上下拉、开漏/推挽)

配置为0x10B0 = 0001 0000 1011 0000

对应部分参数为:12位 : 1:使能上拉

7-6位: 10:中速100MHZ

5-3位:110:中等驱动强度 ......

  1. str指令将配置写回寄存器

将 r1 存放的内容存放在 r0 存放的地址内

即将0x10B0 模式存放在PAD寄存器的地址,实现电气配置

工作模式配置

将引脚设置为输出模式

  1. 加载GPIO1的GDIR(方向控制寄存器)地址

Address:Base address + 4h offset

  1. 设置输出模式

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

  1. 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工作模式:

相关推荐
Discipline~Hai12 小时前
ARM01-ARM体系架构
linux·c语言·arm开发·架构
weixin_4462608518 小时前
ARM++:面向深度伪造检测器的多域智能体协同可迁移对抗攻击框架
arm开发·人工智能
linux修理工2 天前
在 ARM 架构的 Armbian 系统上搭建 Strudel 开发环境
arm开发
程序员JerrySUN2 天前
Jetson 刷机深度解析:flash.sh vs l4t_initrd_flash.sh(含安全与磁盘加密对比)
linux·网络·arm开发·安全·系统安全
执迷不悟8232 天前
ARM--汇编指令
汇编·arm开发
2601_954706493 天前
算力上云革新移动终端:ARM 虚拟化云手机底层原理、API 自动化实战与 2026 选型全解
arm开发·智能手机·自动化
CHY_1283 天前
Arm Ethos‑U65:YOLOv8n 模型准备与 Vela 编译
arm开发·人工智能·yolo·目标检测
Dlrb12114 天前
ARM架构---Cortex系列寄存器,重要内部模块,工作模式,异常处理等
arm开发·arm·指令集·arm工作模式·soc片上系统·ram与rom
Dlrb12114 天前
ARM指令集---汇编指令集的学习与应用:C程序与汇编的相互调用,处理器工作模式的改变等
汇编·arm开发·arm··arm指令集·汇编指令