为了后续使用C语言驱动LED,事先学习汇编代码驱动LED,有如下好处:
- 熟悉一些基本的汇编语法
- 了解驱动LED的基本流程
- 了解驱动LED需要用到哪些寄存器
- 作为一个初学者,可以锻炼自己阅读开发文档的能力
本文的主要目的是了解驱动LED的基本流程,以及要驱动LED需要使用哪些寄存器。
目录
2、设置IO复用(IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03)
3、初始化 IO 复用(IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03)
4、初始化GPIO(GPIOx_GDIR、GPIOx_DR)
一、原理图分析
我们先在《imx6ull 底板原理图》上找到 LED 模块,底板上LED名称为 LED0。

然后我们在《核心板原理图》上找一下 LED0 连到了核心板的哪个引脚。我们发现是 GPIO_3,那么这里就表示的是 GPIO1_3,即 GPIO1 的第3个引脚。(这个可以在后面设置 IO 复用得到验证)
![]()
当LED0 给低电平的时候,二极管导通了,此时LED0亮;当LED0给高电平时,二极管阻断,此时LED0灭。
二、驱动LED的基本流程
既然是和GPIO相关,那就可以往设置GPIO的方向考虑。stm32驱动LED的基本流程为:
- 使能外设时钟
- 设置IO复用,将其复用为GPIO。(GPIO只是IO众多功能的一种)
- 初始化复用引脚。即设置引脚的电气属性,比如设置输入还是输出、上下拉、速度等
- 初始化GPIO。即设置 GPIO 输出高电平还是低电平。
对于 imx6ull, 我们驱动 LED 可以采取和stm32一样的步骤。
三、寄存器设置
接下来我们将针对每一步,详细了解寄存器的设置方法。
1、使能外设时钟(CCGRx)
led灯闪烁,说白了就是高低电平的转换,但是每隔多久转换一次,这就需要时钟来控制了。我们要去《IMX6ULL参考手册》第18章CCM了解时钟源的初始化。不同模块对应的时钟源是不一样的,我们可以在 18.4 找到GPIO模块对应的时钟源。
![]()
从下图我们可以看到,GPIO模块的时钟源使能由寄存器 CCGRx 控制,GPIO模块有 5 组。CCGR1 寄存器的 CG13(即第27-16 bit)控制着 GPIO1 的时钟源。(其他类似)

方式一:仅初始化CCGR1 的 bit 27- 26
时钟源(寄存器): CCGR1
起始地址: 0x20C406C # 一个时钟源占32bit,即4字节(0x20C406C - 0x20C4068 = 4)
初始化值操作:
CCGR1 |= (3 << 26);
C语言驱动LED:从汇编基础到寄存器配置

本文介绍了通过学习汇编代码来理解驱动LED的基本流程,包括分析原理图、熟悉驱动流程和寄存器设置。详细探讨了使能外设时钟、设置IO复用、初始化GPIO的步骤,并给出了针对IMX6ULL平台的寄存器配置示例。
最低0.47元/天 解锁文章
1722

被折叠的 条评论
为什么被折叠?



