嵌入式第四十九篇——ARM系列——IMX6ULL开发板

一、开发板介绍

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
相关推荐
Devlab4 小时前
LVGL设计大师——网页版anyui来了!!
嵌入式硬件·物联网·低代码·ui·iot
zlinear数据采集卡9 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
ACP广源盛139246256739 小时前
蚂蚁百灵 Ling‑3.0‑flash 开源 + 昇腾 0‑Day 原生适配@ACP#GSV9001E 在国产算力矩阵中的机会与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
Rocktech_ruixun11 小时前
机器人端侧大模型部署对主板有哪些要求?瑞迅主控板分级方案对比
人工智能·嵌入式硬件·机器人
振南的单片机世界11 小时前
SysTick硬核拆解:既是HAL_Delay的“心跳”,也是RTOS的“节拍器”
arm开发·stm32·单片机·嵌入式硬件
北京盛世宏博12 小时前
以太网温湿度传感器星型组网三种供电布线技术对比文档
arm开发·以太网·原理·传感器·温湿度·原来
Rocktech_ruixun12 小时前
机器人数据采集能力取决于什么?瑞迅科技RK3588/3576核心板方案深度解析
人工智能·嵌入式硬件·机器人
恒锐丰科技韩生13 小时前
率能 SS6625E|3.0~20V 单通道 H 桥直流电机驱动 SOP8 电子锁玩具机器人分享
嵌入式硬件·硬件工程
zlinear数据采集卡13 小时前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
数智大号14 小时前
从“芯“出发,筑牢文印安全防线——联想至像以全链路自主可控回应国家安全之问
arm开发·安全