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

相关推荐
隔窗听雨眠1 天前
ARM架构下Logstash与Elasticsearch集群部署完全指南:从环境适配到生产验证
arm开发·elasticsearch·架构
郭老师-嵌入式1 天前
arm linux 移植 udhcp 与 使用
linux·服务器·arm开发
深念Y2 天前
登录日志与管理员审计日志存储决策
前端·arm开发·后端·微服务·云原生·架构
深念Y2 天前
微服务抽取路线图:从胖单体到 ARM 集群
前端·arm开发·数据库·后端·微服务·云原生·架构
亿道电子Emdoor3 天前
【Arm】如何高效实现2兆字节对齐
arm开发·单片机·mcu
姓刘的哦3 天前
STM32的启动流分析
linux·运维·arm开发
zlinear数据采集卡3 天前
FRAM铁电存储器原理深度解析:D223校准参数的“永久保险箱“
arm开发·人工智能·stm32·单片机·fpga开发·开源
喜欢吃燃面4 天前
Linux网络编程深度解析:从Socket API到自定义协议设计
linux·网络·arm开发
rcms152702692184 天前
DS200ADCIH1ADB 输入 / 输出板
arm开发
又见情义4 天前
RK3568 Android 13 移植 EC20-CE 4G 模块全记录
android·arm开发·驱动开发