安装环境
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

功能复用配置

- 加载IOMUX控制寄存器地址
Address :20E_0000h base + 68h offset = 0x20E 0068
- 将引脚功能从默认模式切换为GPIO
模式GPIO_IO03 gpio1模式代码为 0101 = 0x05
- str指令将配置写回寄存器
将 r1 存放的内容存放在 r0 存放的地址内
即将0x05 模式存放在控制寄存器的地址,实现引脚初始化
电气属性配置
设置引脚的驱动能力、上拉电阻等电气参数


- 加载PAD控制寄存器地址
Address:20E_0000h base + 2F4h offset = 0x20E 02F4
- 配置电气参数(驱动强度、压摆率、上下拉、开漏/推挽)
配置为0x10B0 = 0001 0000 1011 0000
对应部分参数为:12位 : 1:使能上拉
7-6位: 10:中速100MHZ
5-3位:110:中等驱动强度 ......
- str指令将配置写回寄存器
将 r1 存放的内容存放在 r0 存放的地址内
即将0x10B0 模式存放在PAD寄存器的地址,实现电气配置
工作模式配置
将引脚设置为输出模式

- 加载GPIO1的GDIR(方向控制寄存器)地址
Address:Base address + 4h offset
- 设置输出模式
将GPIO_IO03设为输出,即通过orr指令将第三位置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工作模式:


