嵌入式第四十九篇——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 小时前
芯科科技助力涂鸦智能推出免编码AIoT平台创新智能照明开发
科技·嵌入式硬件·mcu·物联网·智能家居·智能硬件·iot
恶魔泡泡糖3 小时前
51单片机点阵屏应用
单片机·嵌入式硬件·51单片机
南烟斋..3 小时前
ARM Cortex-A7(IMX6ULL)嵌入式裸机开发指南:从点灯到中断
arm开发·单片机·嵌入式硬件
bai5459363 小时前
stm32 CubeIDE DMA模式的串口收发
stm32·单片机·嵌入式硬件
ArrebolJiuZhou3 小时前
03 rtp,rtcp,sdp的包结构
linux·运维·服务器·网络·arm开发
松涛和鸣3 小时前
59、 IMX6ULL按键驱动开发:轮询到中断的实现
linux·服务器·c语言·arm开发·数据库·驱动开发
jiang153237942434 小时前
MS51FB9AE 新唐 TSSOP-20
单片机·嵌入式硬件
切糕师学AI4 小时前
ARM Cortex-M 存储器映射
arm开发
VekiSon4 小时前
ARM架构——中断系统详解
c语言·arm开发·嵌入式硬件