嵌入式第四十九篇——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
相关推荐
李永奉几秒前
中科蓝讯SDK开发-提示音音频文件格式转换和压缩教程
网络·单片机·嵌入式硬件·mcu·物联网
春风解人意18 分钟前
从零开始学习嵌入式P35----数据库
数据库·嵌入式硬件·学习
单片机仿真设计39 分钟前
【Proteus 仿真】基于 STM32 单片机智能楼宇照明控制系统设计(定制仿真咨询)
stm32·单片机·嵌入式硬件·proteus·毕设
ACP广源盛139246256731 小时前
M6/M5 Pro Mac mini 端侧 AI 爆发@ACP#YLB3118 存储扩展芯片在本地 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
HUI-4742 小时前
EG1198|ESOP‑8 高性价比内置 MOS 降压 DC‑DC,10‑120V 小功率车载仪表优选
嵌入式硬件·硬件工程
长江后浪博客13 小时前
ESP32-SOLO-1 在 ESP-IDF v5.5 下启动不断重启问题分析与解决
单片机·嵌入式硬件·嵌入式·esp32·freertos·esp-idf
单片机仿真设计14 小时前
【proteus仿真】基于 STM32 单片机智能仓库设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
星游路14 小时前
单片机·电子时钟
单片机·嵌入式硬件
AOI小白新手上路18 小时前
江科协51单片机 7-2 LCD1602显示时钟实验
单片机·嵌入式硬件·51单片机
思麟呀18 小时前
嵌入式入门(一)宏观生态到首次烧录
c语言·嵌入式硬件