ZeroOne AI
← 返回文章列表

IMX6ULL 裸机开发学习(一):汇编点亮 LED

👁 44
分类:工业互联网

基于野火 IMX6ULL mini 开发板,用 GNU ARM 汇编完成 LED 闪烁实验:CCM 时钟使能、IOMUX 复用配置、GPIO 方向与数据寄存器操作,配套 Makefile 与 imxdownload 烧写流程。

IMX6ULL 裸机开发学习(一):汇编点亮 LED

一、项目背景

IMX6ULL 是 NXP 推出的低功耗 Cortex-A7 应用处理器,广泛应用于工业 HMI、物联网网关与入门级 Linux 开发板。对于嵌入式初学者而言,裸机开发是理解芯片底层工作原理的最佳路径——没有操作系统屏蔽细节,每一个寄存器都要亲手配置。

本文基于野火 IMX6ULL mini 开发板,通过 GNU ARM 汇编实现 LED 闪烁,完整走通"时钟使能 → IO 复用 → 电气属性 → GPIO 方向 → 电平输出"的 GPIO 控制链路。

二、技术方案:环境与硬件

GPIO 点亮 LED 的本质:配置引脚复用为 GPIO 功能、设置电气属性、将引脚方向设为输出、向数据寄存器写 0/1 控制电平。

三、系统架构:寄存器配置链路

LED 控制的完整寄存器链路:

步骤寄存器地址说明
1CCM_CCGR0~CCGR60x020C4068~0x020C4080使能外设时钟(全部置 0xffffffff)
2IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER30x02290014引脚复用为 GPIO5_IO03(ALT5)
3IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER30x02290058电气属性:压摆率/驱动/速度/开漏
4GPIO5_GDIR0x020AC004方向寄存器,BIT3=1 设为输出
5GPIO5_DR0x020AC000数据寄存器,BIT3=0 点亮 / =1 熄灭

四、实施过程:汇编代码

4.1 主程序 led.s

/*******************
*文件名:  led.s
*描述  :裸机实验测试1 汇编点亮led灯
 ********************/

.global  _start      @全局标号

_start:

  /***** 1.使能控制时钟 *****/
ldr r0, =0x020c4068      @ CCM_CCGR0
ldr r1, =0xffffffff
str r1, [r0]

ldr r0, =0x020c406C      @ CCM_CCGR1
ldr r1, =0xffffffff
str r1, [r0]

ldr r0, =0x020c4070      @ CCM_CCGR2
ldr r1, =0xffffffff
str r1, [r0]

ldr r0, =0x020c4074      @ CCM_CCGR3
ldr r1, =0xffffffff
str r1, [r0]

ldr r0, =0x020c4078      @ CCM_CCGR4
ldr r1, =0xffffffff
str r1, [r0]

ldr r0, =0x020c407C      @ CCM_CCGR5
ldr r1, =0xffffffff
str r1, [r0]

ldr r0, =0x020c4080      @ CCM_CCGR6
ldr r1, =0xffffffff
str r1, [r0]

  /***** 2.GPIO5_IO03 复用功能配置GPIO (ALT5) *****/
ldr r0, =0x02290014      @ IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3
ldr r1, =0x5             @ ALT5 -> GPIO5_IO03
str r1, [r0]

  /***** 3.GPIO5_IO03 配置IO电气属性 *****/
  /* 0x08B0: BIT0压摆率慢速, BIT5-3驱动R0/6, BIT7-6速度100MHz,
     BIT11开漏输出使能, BIT12关闭上下拉, BIT15-14 100K上拉, BIT16关闭hys */
ldr r0, =0x02290058      @ IOMUXC_SNVS_SW_PAD_CTL_PAD_SNVS_TAMPER3
ldr r1, =0x08B0
str r1, [r0]

/***** 4.设置GPIO5_IO03 为输出 *****/
ldr r0, =0x020AC004      @ GPIO5_GDIR
ldr r1, =0x08            @ BIT3
str r1, [r0]

/***** 5.主循环:LED闪烁 *****/
loop:
   ldr r0, =0x020AC000   @ GPIO5_DR
   ldr r1, =0x00         @ BIT3=0 开灯
   str r1, [r0]
   bl delay              @ 延时

   ldr r0, =0x020AC000   @ GPIO5_DR
   ldr r1, =0x08         @ BIT3=1 关灯
   str r1, [r0]
   bl delay

   b loop

/**
 * 简单汇编延时
*/
delay:
   ldr r2, =0xfffff
   ldr r3, =0x0
delay_loop:
   sub r2, r2, #1
   cmp r2, r3
   bne delay_loop
   mov pc, lr            @ 返回主函数

4.2 Makefile 与烧写

led.bin : led.s
	arm-linux-gnueabihf-gcc -g -c led.s -o led.o
	arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf
	arm-linux-gnueabihf-objcopy -O binary -S -g led.elf led.bin

clean:
	rm -rf *.o led.bin led.elf led.dis

dump:
	arm-linux-gnueabihf-objdump -D led.elf > led.dis

dowmload:
	./imxdownload led.bin /dev/sdb

关键点:

五、应用价值

六、SEO关键词

IMX6ULL、裸机开发、汇编点亮LED、野火开发板、GPIO、ARM汇编、CCM时钟、IOMUX复用、imxdownload、嵌入式入门

推荐阅读

更多工业 AI、智能制造与技术实践文章

机器人自动化

手把手做ROS2机器人系统开发(一):开发环境搭建

机器人操作系统(ROS2)是当前机器人应用开发的主流平台,凭借分布式节点架构、丰富的生态组件和良好的实时性支持,被广泛用于工业机器人、移动机器人和智能装备的研发。本系列教程将带领大家从零开始,完成一套完整的ROS2机器人系统开发:以驱动常用工业机器人(SCARA)实现动态抓取目标为最终目标,既支持实

机器人自动化

TRIO-Basic 从入门到精通(十七):设置连接TRIO运动控制器并输入激活码

本文介绍TRIO运动控制器的首次连接与功能激活方法:设置电脑IP与控制器同网段,通过Motion Profect V4以工具模式连接,在Enable Features界面输入商务提供的激活码,开通轴数、机器人、IEC等功能,并用EX命令验证激活结果,适用于控制器启用前的初始配置。

机器人自动化

TRIO-Basic 从入门到精通(十八):Trio运动控制器UDP快速交换数据通讯

本文介绍TRIO运动控制器之间基于UDP的快速数据交换通讯方案:将初始化与收发数据核心代码封装为SINOLIB.BAL库,通过dgram数据报通道与IEEE浮点编解码,实现两台MC405控制器周期性实时交换数据,无需预建立连接,通讯稳定不断线。

MES

MES + 工业打印机:让每一件产品“自动生成身份证”,从生产到追溯真正闭环

在传统注塑工厂,MES记录生产、打印机打印标签,两套系统各自独立运行,人工重复录入容易出错。本文以实际工业场景为例,介绍如何构建 MES + 工业打印机自动打印网关:MES作为生产数据唯一来源,通过MQTT触发打印,打印网关自动拉取设备与生产数据并转换为打印协议,经TCP下发工业打印机完成产品标识,并把打印结果纳入追溯体系,真正实现“生产—打印—追溯”闭环。

工业AI

MCP、A2A、AG-UI:一篇讲清 Agent 协议栈

随着 Agent 从单一聊天窗口走向企业系统,MCP、A2A、AG-UI、A2UI、UCP、AP2 等协议构成了 2026 年的 Agent 协议栈。本文从通信对象出发,逐层讲清每个协议解决什么问题、不解决什么问题,并结合端到端案例、选型六问与架构检查清单,帮助开发者设计可靠的多系统协作架构。

AI视觉

YOLO目标检测模型调参入门:从训练参数到检测效果优化

YOLO目标检测模型调参入门指南:详解 epochs、imgsz、batch、模型大小、conf、IoU 等核心参数的作用与调节方法,给出工业视觉、疲劳驾驶、缺陷检测等 AI 项目的调参顺序与实验对比思路,帮助初学者在精度、速度与显存之间找到平衡。

评论(0)