1.相关介绍
本次用的开发板是IMX6ULL
- CPU:NXP i.MX 6ULL Cortex-A7单核处理器,主频 528MHz(工业级) 或 800MHz(商业级)467, GBA封装
- 内存:512MB DDR3L RAM,支持高速数据存取。
- 存储:8GB eMMC,支持多种启动模式(SD卡、NAND、eMMC)
2.启动代码
.global _start_start:ldr pc, =_start_handlerldr pc, =_undefined_handlerldr pc, =_supervisor_handlerldr pc, =_prefetch_handlerldr pc, =_data_abort_handlerldr pc, =_not_use_handlerldr pc, =_irq_handlerldr pc, =_fiq_handler
RAM 512M, .global 声明开始的标签,接下来写异常向量表
3.相关指令
1.cps
CPS(Change Processor State,改变处理器状态)指令是用于直接操控处理器核心运行状态的关键指令,核心作用是切换处理器的特权级别(Privilege Level) 和配置中断屏蔽(Interrupt Masking) ,是操作系统内核、实时系统(RTOS)中实现任务管理、中断控制的核心指令之一。
- 处理器特权级别:ARM 将处理器运行状态分为不同特权
- 中断屏蔽位:ARM 处理器通过CPSR(Current Program Status Register,当前程序状态寄存器) 中的中断屏蔽位控制中断响应,核心位包括:
- I 位:屏蔽 IRQ(普通中断,如外设中断);
- F 位:屏蔽 FIQ(快速中断,优先级高于 IRQ,用于紧急处理);
- 置 1(Set)时中断被屏蔽,置 0(Clear)时中断可响应。
例
cpsid i //关闭cpsr寄存器中普通中断
cps #0x12 //设为irq模式cps #0x1F //设为sys模式
cpsie i //开启cpsr寄存器的普通中断
2.栈底的设置
i.max的RAM为512M,从0x8000 0000开始
每个模式可以设置栈长为32M,故设置irq模式栈底地址为0x8200 0000,sys模式栈底地址为0x8400 0000
3.ldr,str
在 ARM 架构指令集中,STR(Store Register,存储寄存器) 和LDR(Load Register,加载寄存器) 是一对核心的内存访问指令,用于实现寄存器与内存之间的数据传输,是程序中读写内存的基础操作。
1. LDR 指令(从内存加载数据到寄存器)
- 功能:将内存中指定地址的数据读取(加载)到目标寄存器中。
- 基本语法:
LDR <目标寄存器>, <内存地址>
例:LDR R0, [R1]
表示从R1
寄存器存储的地址中读取数据,放入R0
寄存器。
2. STR 指令(从寄存器存储数据到内存)
- 功能:将源寄存器中的数据写入(存储)到内存的指定地址中。
- 基本语法:
STR <源寄存器>, <内存地址>
例:STR R0, [R1]
表示将R0
寄存器中的数据,写入R1
寄存器存储的地址中。
4.初始化配置
经查imax6ull上的led与网络编号led0有关,led0与GPIO1_3有关,因此需要配置相关的寄存器
- 复用功能配置
- 引脚电器特性配置
- 引脚方向特性配置
1.复用功能配置(IOMUXC)
查阅手册,可知IOMUXC的bit0~bit3为0101时引脚状态为GPIO1_IO3
故设置对应位为0101
//IO复用功能配置(IOMUXC)ldr r0, =0x020E0068ldr r1, =0x05str r1, [r0]
地址由手册知,如图
2.引脚电器特性(IOMUXC)
查阅手册知bit0~bit15位0x10B0
//引脚电器特性配置(IOMUXC)ldr r0, =0x020E02F4ldr r1, =0x10B0str r1, [r0]
地址由手册知,如图
3.引脚方向特性配置(GPIO)
应设置GPIO的_GDIR,由手册知,0为GPIO的输入模式,1为GPIO的输出模式
故应设置成输出模式
查阅手册,由于是GPIO1_IO3故
地址设置为0x0209C004
//引脚方向特性配置(GPIO1_3)ldr r0, =0x0209C004ldr r1, [r0]orr r1, r1, #(1<<3) //由于是GPIO1_IO3故设置为对应的bit3位置1str r1, [r0]
5.相关概念
1.编译器
编译器(Compiler)是一种特殊的计算机程序,它的核心功能是将高级编程语言(如 C、Java、Python、C++ 等,更接近人类思维和自然语言的语法)编写的源代码,翻译成计算机能够直接理解和执行的低级语言(通常是机器语言或汇编语言)。
2.连接器
连接器(Linker,也常称为 “链接器”)是软件开发工具链中的关键组件,它的核心作用是将编译器生成的目标文件(Object Files)、库文件(Libraries)等 “零散部件” 组合起来,最终生成一个可直接被操作系统加载执行的可执行文件(Executable)。
3.格式转换器
格式转换器(Format Converter)是一类用于将文件、数据或信号从一种格式转换为另一种格式的工具(软件或硬件),核心目标是解决 “格式不兼容” 问题,让数据能在不同设备、软件或场景中正常使用。
4.反汇编器
反汇编器(Disassembler)是一种将机器语言(计算机可直接执行的二进制指令)转换为汇编语言(人类可阅读的低级指令)的工具。它的核心作用是 “逆向解析” 二进制程序,让开发者或分析人员能够理解程序的底层执行逻辑。