嵌入式第四十九篇——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
相关推荐
嵌入式-老费2 小时前
esp开发与应用(DS18B20温度传感器)
单片机·嵌入式硬件
szxinmai主板定制专家3 小时前
基于ZYNQ MPSOC图像采集与压缩系统总体设计方案
linux·arm开发·人工智能·嵌入式硬件·fpga开发
底层开发智库3 小时前
学习ARM新姿势,理论实践的结合
arm开发
Jonathan_LF3 小时前
DMA使用心得-STM32
stm32·单片机·嵌入式硬件
国科安芯4 小时前
ASM232S抗辐照RS-232收发器的技术架构与空间环境适应性研究
单片机·嵌入式硬件·安全·架构·安全性测试
嵌入式小站5 小时前
STM32 零基础可移植教程 07:USART 串口打印,从 CubeMX 配置到 printf 输出
stm32·单片机·嵌入式硬件
都在酒里5 小时前
STM32矩阵按键详解——4×4行列扫描与非阻塞消抖(硬件总结六)
stm32·嵌入式硬件·矩阵
都在酒里6 小时前
STM32有限状态机(FSM)详解,综合应用总结(二)
stm32·单片机·嵌入式硬件·状态机
嵌入式-老费6 小时前
esp开发与应用(继电器的使用)
单片机·嵌入式硬件
CPETW7 小时前
RS-232 Sniffer 嗅探器 ---- UNI-T电子负载通讯协议抓取-A
网络·科技·stm32·单片机·嵌入式硬件·电子