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

相关推荐
myy-learn2 天前
ARM-I2C 驱动优化与 LM75 温度传感器读取实践
arm开发·单片机·嵌入式硬件
kkkkkkkkkk_Z2 天前
新手自学嵌入式 | 学习日记:ARM内核启动代码、时钟系统(PLL/Prescaler/PFD)与IMX6ULL时钟配置
arm开发·学习
Tronlong创龙2 天前
IoTGateway可以让网关开发速度快一倍?
arm开发·嵌入式开发·硬件开发·工业控制·工业开发板
陌上花开缓缓归以3 天前
系统启动失败纪要
arm开发
我是场3 天前
我的NPI项目之-Touch的EE特性
android·arm开发
陌上花开缓缓归以3 天前
arm linux ddr 内存布局
linux·arm开发
女神下凡3 天前
芯参谋(43):DDR4_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
晚枫歌F4 天前
DPDK原理以及解析tcp/udp协议包
arm开发
szxinmai主板定制专家4 天前
基于 ARM+FPGA 雕刻机控制系统的设计
arm开发·人工智能·fpga开发·rk3576·半导体设备
女神下凡5 天前
芯参谋(41):DDR2_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范