【裸机驱动LED】使用汇编代码驱动LED(一)—— 寄存器解析篇

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

为了后续使用C语言驱动LED,事先学习汇编代码驱动LED,有如下好处:

  • 熟悉一些基本的汇编语法
  • 了解驱动LED的基本流程
  • 了解驱动LED需要用到哪些寄存器
  • 作为一个初学者,可以锻炼自己阅读开发文档的能力

本文的主要目的是了解驱动LED的基本流程,以及要驱动LED需要使用哪些寄存器。


目录

一、原理图分析

二、驱动LED的基本流程

三、寄存器设置

1、使能外设时钟(CCGRx)

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值