一、开发板介绍
1、处理器特点
采用 ARM Cortex-A7 架构,工业级版本主频通常为 528MHz,商业级可达 800MHz。该处理器具有低功耗、高性能的特点,能满足多种嵌入式应用的需求。
2、常见硬件配置
内存:一般配备 512MB DDR3 或 DDR3L 内存,支持高速数据存取,可确保系统运行的流畅性。
存储:通常有 8GB eMMC 闪存,同时兼容 SD 卡、NAND 等多种启动模式,方便用户根据需求选择不同的存储方式。
接口:具备丰富的接口,如 2 路 10/100M 以太网接口、2 路 CAN 接口、多个 UART 接口、USB 接口、SPI 接口、I2C 接口等,还支持 RGB LCD 显示、音频输入输出、摄像头接口等,能满足各种外设的连接需求。
二、启动代码
1、异常向量表
.global _start
_start:
ldr pc, =_reset_handler
ldr pc, =_undef_handler
ldr pc, =_software_handler
ldr pc, =_prefect_handler
ldr pc, =_data_abort_handler
nop
ldr pc, =_irq_handler
ldr pc, =_fiq_handler
2、异常处理程序
_undef_handler:
b _undef_handler
_software_handler:
b _software_handler
_prefect_handler:
b _prefect_handler
_data_abort_handler:
b _data_abort_handler
_fiq_handler:
b _fiq_handler
3、IRQ中断处理
_irq_handler:
sub lr, lr, #4
stmfd sp!, {r0-r12, lr}
mrc p15, 4, r1, c15, c0, 0
add r1, r1, #0x2000
ldr r0, [r1, #0xC ] //r1 = *(r0 + 4)
stmfd sp!, {r0, r1}
cps #0x1F
stmfd sp!, {lr}
bl system_interrupt_handler
ldmfd sp!, {lr}
cps #0x12
ldmfd sp!, {r0, r1}
str r0, [r1, #0x10]
ldmfd sp!, {r0-r12, pc}^
4、复位处理
_reset_handler:
cpsid i //失能irq
mrc p15, 0, r0, c1, c0, 0
bic r0, r0, #(1 <<13) //V异常向量表映射方式VBAR
orr r0, r0, #(1 <<12) //打开ICache
mcr p15, 0, r0, c1, c0, 0
5、栈初始化
cps #0x12
/*
mrs r0, cpsr
bic r0, r0, #0x1F
orr r0, r0, #0x12 //切换到irq模式
msr cpsr, r0
*/
ldr sp, =0x82000000
cps #0x1F
/*
mrs r0, cpsr
bic r0, r0, #0x1F
bic r0, r0, #(1 << 7) //使能irq中断
orr r0, r0, #0x1F //切换到sys模式
msr cpsr, r0
*/
ldr sp, =0x84000000
cpsie i //使能irq
6、清理BSS段
bl _bss_init
b main
finish:
b finish
7、BSS段初始化
_bss_init:
ldr r0, =__bss_start
ldr r1, =__bss_end
loop:
mov r0, #0
add r0, r0, #4
cmp r0, r1
blt loop
bx lr
三、点亮LED灯
1、初始化(配合数据手册)
(1)复用功能配置
Chapter 32:IOMUX Controller (IOMUXC)
IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03: 低四位(0101)
(2)电气特性
Chapter 32:IOMUX Controller (IOMUXC)
IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03
(3)GPIO方向寄存器
Chapter 28:General Purpose Input/Output (GPIO)
GPIOx_GDIR
2、led点灯过程,需要配置的寄存器
-
CCM_CCGRx:时钟门控寄存器
-
IOMUXC_SW_MUX_CTL:引脚复用控制
-
IOMUXC_SW_PAD_CTL:引脚电气属性
-
GPIO_GDIR:GPIO方向寄存器
-
GPIO_DR:GPIO数据寄存器
四、编译阶段

五、Makefile简化编译过程
(1)Makefile的三要素:目标:start.bin 依赖:start.S 规则:如何产生目标
start.bin : start.S
arm-linux-gnueabihf-gcc -c start.S -o start.o -g
arm-linux-gnueabihf-ld -Ttext 0x87800000 start.o -o start.elf
arm-linux-gnueabihf-objcopy -O binary -S -g start.elf start.bin
arm-linux-gnueabihf-objdump -D start.elf > start.dis
(2)伪目标 clean 不加依赖
rm start.o start.elf start.bin start.dis -f
(3)伪目标 load
./imxdownload start.bin /dev/sdb
(4)优化(存放变量)
COMPLITER = arm-linux-gnueabihf-
CC = $(COMPLITER)gcc
LD = $(COMPLITER)ld
OBJCOPY = $(COMPLITER)objcopy
OBJDUMP = $(COMPLITER)objdump
start.bin : start.S
$(CC) -c start.S -o start.o -g
$(LD) -Ttext 0x87800000 start.o -o start.elf
$(OBJCOPY) -O binary -S -g start.elf start.bin
$(OBJDUMP) -D start.elf > start.dis
clean:
rm start.o start.elf start.bin start.dis -f
load:
./imxdownlo ad start.bin /dev/sdb