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

相关推荐
橘色的喵2 小时前
ARM-Linux 嵌入式消息总线:高优先级驱逐机制设计
linux·arm开发·性能优化·嵌入式·newosp
果果燕16 小时前
实习笔记(一):NFS、Samba、VNC、Git、CMake、systemd、内核、交叉编译
linux·arm开发·c++·笔记·git
振南的单片机世界1 天前
1MΩ内阻+10pF寄生电容=信号“低通谋杀”
arm开发·stm32·单片机·嵌入式硬件
0x3F(小茶)1 天前
FreeRTOS 任务相关 API 函数
c语言·arm开发·单片机
zlinear数据采集卡2 天前
ZLinear DABM-D223 通信协议与软件开发全解析:从 USB CDC 到 DDS 波形输出
arm开发·嵌入式硬件·fpga开发·开源
LCMICRO-133108477462 天前
国产长芯微LD3092完全pin-pin替代LT3092,是一款可编程两端电流源
arm开发·单片机·嵌入式硬件·fpga开发·硬件工程·恒流源·lt3092
工业设备方案笔记3 天前
RK3588 vs RK3568:AI边缘计算项目到底应该如何选择芯片平台?
arm开发·人工智能·目标跟踪·架构·边缘计算
过客而已20033 天前
Model Context Protocol(MCP)技术深度解析
arm开发
ARM|X86+FPGA工业主板厂家5 天前
基于ARM+FPGA平台在精密测控领域的应用:8路同步IEPE振动采集系统
arm开发·fpga开发