2026/2/19 22:07:59
网站建设
项目流程
东阳网站制作,微信h5的制作方法,门户网站建设摘要,微网站做的比较好的目录
一、开发环境与硬件基础
1.1 IMX6ULL-Mini 开发板介绍
1.2.1 编译工具#xff1a;gcc-linaro 交叉编译器
1.2.2 代码编辑#xff1a;Visual Studio Code
1.2.3 辅助工具
二、LED 点亮的底层逻辑
2.1 引脚配置三步骤
2.1.1 复用功能配置#xff08;IOMUXC#…目录一、开发环境与硬件基础1.1 IMX6ULL-Mini 开发板介绍1.2.1 编译工具gcc-linaro 交叉编译器1.2.2 代码编辑Visual Studio Code1.2.3 辅助工具二、LED 点亮的底层逻辑2.1 引脚配置三步骤2.1.1 复用功能配置IOMUXC2.1.2 电气特性配置IOMUXC2.1.3 引脚方向配置GPIO2.2 LED 开关逻辑2.3 LDR 与 STR 详解三、汇编代码实现 LED 闪烁四、编译与烧写4.1 手动编译步骤4.2 Makefile 简化编译4.3 程序烧写与测试4.3.1 SD 卡烧写4.3.2 开发板测试五、核心概念解答一、开发环境与硬件基础1.1 IMX6ULL-Mini 开发板介绍IMX6ULL-Mini 开发板是由正点原子提供的, 搭载NXP生产i.MX6ULL的SOC, 主打高性能、低功耗与紧凑体积。整个开发板由核心板与底板组成核心板通过双列直插方式与底板连接。IMX6ULL-Mini 开发板核心板六层板CPUNXP i.MX 6ULL Cortex-A7 单核处理器主频 528MHz工业级 或 800MHz商业级467, BGA 封装内存512MB DDR3L RAM支持高速数据存取。存储8GB eMMC支持多种启动模式SD卡、NAND、eMMC屏幕4.3寸屏 800*480分辨率底板红色 led 灯提供用户可控的的 led 灯蓝色 led 灯是电源指示灯510 欧姆限流电阻作用防止电流过大保护灯珠。1.2.1 编译工具gcc-linaro 交叉编译器拷贝 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 到 /usr/local/arm解压 sudo tar -xvf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz删除 sudo rm gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz配置回家目录 修改环境变量配置文件 vi .bashrcexport PATH$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/重启虚拟机reboot检查编译器版本arm-linux-gnueabihf-gcc -v1.2.2 代码编辑Visual Studio Code安装Visual Studio Code汇编高亮插件:Arm Assembly创建工程文件夹 \IMX6ULL\led_asm创建启动代码 start.S注意大写S后缀会进行预处理后期用到一些宏1.2.3 辅助工具烧写工具imxdownloadIMX6ULL 专用 SD 卡烧写工具串口工具可选用于调试输出本次实验暂不涉及二、LED 点亮的底层逻辑IMX6ULL 的 LED 控制本质是GPIO 外设寄存器操作需完成 3 步初始化 1 步运行时控制核心依赖汇编的 LDR读取寄存器和 STR写入寄存器指令。2.1 引脚配置三步骤参考 IMX6ULL 参考手册和底板原理图本次控制GPIO1_IO03 引脚对应红色 LED2.1.1 复用功能配置IOMUXCGPIO 引脚默认可能不是 GPIO 功能需通过复用寄存器配置为 GPIO 模式寄存器地址IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 0x020C4068配置值低 4 位设为 0101对应 GPIO 功能2.1.2 电气特性配置IOMUXC设置引脚的驱动能力、上下拉等电气参数避免信号不稳定寄存器地址IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03需查阅手册确认具体地址核心配置根据 LED 驱动需求设置如默认配置可满足基础点灯2.1.3 引脚方向配置GPIO设置 GPIO 为输出模式LED 需要主动输出高低电平寄存器地址GPIO1_GDIRGPIO1 端口方向寄存器配置逻辑对应位设为 1输出0 为输入GPIO1_IO03 对应第 3 位故设置GPIO1_GDIR | (13)2.2 LED 开关逻辑LED 灯珠采用低电平点亮原理图设计通过 GPIO 数据寄存器控制寄存器地址GPIO1_DRGPIO1 端口数据寄存器点亮对应位设为 0GPIO1_DR ~(13)熄灭对应位设为 1GPIO1_DR | (13)2.3 LDR 与 STR 详解指令功能示例LDR Rt, addr将寄存器地址加载到目标寄存器 Rtldr r0, 0x020C4068r0 复用寄存器地址STR Rt, [Rn]将 Rt 的值写入 Rn 指向的内存地址寄存器str r1, [r0]将 r1 的值写入 r0 指向的复用寄存器三、汇编代码实现 LED 闪烁要实现闪烁需在 点亮 - 延时 - 熄灭 - 延时 之间循环延时通过汇编空指令实现利用 CPU 执行指令的时间差.global _start ; ; ARM异常向量表 (Exception Vector Table) ; ARM架构规定从0x00000000开始的32字节为异常向量表 ; 每个异常占4字节依次对应8种异常类型 ; _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 ; ; 异常处理函数默认原地死循环防止异常逃逸 ; 新手阶段暂不处理具体异常仅做兜底 ; _undef_handler: b _undef_handler _software_handler: b _software_handler _prefect_handler: b _prefect_handler _data_abort_handler: b _data_abort_handler _irq_handler: b _irq_handler _fiq_handler: b _fiq_handler ; ; 复位处理函数系统上电/复位后第一个执行的核心函数 ; _reset_handler: cpsid i ; 失能irq cps #0x12 ldr sp, 0x82000000 cps #0x1F ldr sp, 0x84000000 cpsie i ; 使能irq bl led_init ; ; 主循环LED闪烁逻辑 ; finish: bl led_on bl led_delay bl led_off bl led_delay b finish ; ; LED初始化函数配置GPIO引脚以IMX6ULL为例 ; 步骤1.复用功能 2.配置电气特性 3.设置引脚为输出 ; led_init: ; 复用功能 ldr r0, 0x020E0068 ldr r1, [r0] bic r1, r1, #0x1F orr r1, r1, #0x05 str r1, [r0] ; 电气特性 ldr r0, 0x020E02F4 ldr r2, 0x10B0 str r2, [r0] ; 引脚方向 ldr r0, 0x0209C004 ldr r1, [r0] orr r1, r1, #(1 3) str r1, [r0] bx lr ; ; LED点亮函数拉低GPIO1_IO03引脚低电平点亮 ; led_on: ldr r0, 0x0209C000 ldr r1, [r0] bic r1, r1, #(1 3) str r1, [r0] bx lr ; ; LED熄灭函数拉高GPIO1_IO03引脚高电平熄灭 ; led_off: ldr r0, 0x0209C000 ldr r1, [r0] orr r1, r1, #(1 3) str r1, [r0] bx lr ; ; 简单延时函数通过循环递减实现延时 ; led_delay: ldr r0, 0x7FFFF loop: cmp r0, #0 ble fin sub r0, r0, #1 b loop fin: bx lr四、编译与烧写4.1 手动编译步骤执行以下命令1汇编将.S 文件转为目标文件.oarm-linux-gnueabihf-gcc -c start.S -o start.o -g-c只汇编不链接-o指定输出文件-g保留调试信息2链接将目标文件链接到指定地址IMX6ULL 的 SD 卡启动地址为 0x87800000arm-linux-gnueabihf-ld -Ttext 0x87800000 start.o -o start.elf-Ttext指定代码段起始地址3格式转换将 ELF 文件转为开发板可执行的二进制文件.binarm-linux-gnueabihf-objcopy -O binary -S -g start.elf start.bin-O binary输出二进制格式-S去除符号信息-g去除调试信息4反汇编可选将 ELF 文件转为汇编代码用于调试arm-linux-gnueabihf-objdump -D start.elf start.dis4.2 Makefile 简化编译# 定义工具链变量简化后续命令 COMPILER arm-linux-gnueabihf- CC $(COMPILER)gcc LD $(COMPILER)ld OBJCOPY $(COMPILER)objcopy OBJDUMP $(COMPILER)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 -f start.o start.elf start.bin start.dis # 伪目标烧写程序到SD卡 load: ./imxdownload start.bin /dev/sdb使用方法编译make一键生成 start.bin清理make clean删除所有编译产物烧写make load需提前将 imxdownload 工具拷贝到工程目录并添加执行权限chmod 777 imxdownload4.3 程序烧写与测试4.3.1 SD 卡烧写将 SD 卡插入 Ubuntu 虚拟机通过 USB 读卡器查看 SD 卡设备名ls /dev/sdb通常为 sdb需确认无其他存储设备冲突执行烧写命令./imxdownload start.bin /dev/sdb注意烧写速率需为 KB 级若显示 MB 级速率则失败需拔掉读卡器重启 Ubuntu 后重试4.3.2 开发板测试选择启动模式通过开发板上的拨码开关选择 SD 卡启动参考开发板原理图插入烧写好的 SD 卡到开发板 TF 卡槽上电测试确保开发板电源开关弹起插入电源适配器按下蓝色电源开关观察蓝色电源灯亮起红色 LED 周期性闪烁熄灭状态点亮状态五、核心概念解答1. 在 LED 实验中在对 SOC 引脚配置时都做了哪些工作复用功能配置将引脚从默认功能切换为 GPIO 功能电气特性配置设置引脚驱动能力、上下拉等保证信号稳定GPIO 方向配置设置为输出模式使引脚能主动输出高低电平。2. 什么是编译器、连接器、格式转换器和反汇编器编译器gcc将汇编源文件.S转为目标文件.o进行语法检查和指令翻译链接器ld将目标文件链接到指定内存地址解决符号引用如程序入口 _start格式转换器objcopy将 ELF 文件包含调试 / 符号信息转为开发板可直接执行的二进制文件.bin反汇编器objdump将 ELF 文件转回汇编代码用于调试验证指令是否正确翻译。