汇编LED原理分析

汇编LED原理分析

ALPHA开发板LED灯硬件原理分析

I.MX6ULL IO初始化:

​ ①、使能时钟,CCGR0CCGR6这7个寄存器控制着6ULL所有外设时钟的使能。为了简单,设置CCGR0CCGR6这7个寄存器全部为0XFFFFFFFF,相当于使能所有外设时钟。

​ ②、IO复用,将寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03的bit3~0设置为0101=5,这样GPIO1_IO03就复用为GPIO。

​ ③、寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03是设置GPIO1_IO03的电气属性。包括压摆率、速度、驱动能力、开漏、上下拉等。

​ ④、配置GPIO功能,设置输入输出。设置GPIO1_DR寄存器bit3为1,也就是设置为输出模式。设置GPIO1_DR寄存器的bit3,为1表示输出高电平,为0表示输出低电平。

在这里插入图片描述

在这里插入图片描述

可以看到下面还有CCGR0-CCGR6七个寄存器。

首先来初始化CCGR0。

.global _start @全局标号

_start:
    /*初始化使能所有外设时钟*/
    ldr r0, =0x020c4068 @CCGR0
    ldr r1, =0xfffffff @要向CCGR0写入的数据
    str r1, [r0]       @将0xffffffff写入到CCGR0中

初始化使能所有外设时钟

r0是要写入的地址,r1是要写入的值

ldr r0, =0x020c4068 @CCGR0也就是第一个寄存器CCGR0的地址

要向CCGR0写入的数据

然后通过str指令,将数据写到寄存器中。

其中ldr和str的指令介绍如下:
在这里插入图片描述

再看第二个寄存器CCGR1

地址为十六进制,因此将CCGR0的地址加4即可得到CCGR1的地址为0x020c406c

在这里插入图片描述

同理将其他的寄存器全部初始化,代码为:

	ldr r0, =0x020c406c @CCGR1
    str r1, [r0]

    ldr r0, =0x020c4070 @CCGR2
    str r1, [r0]

    ldr r0, =0x020c4074 @CCGR3
    str r1, [r0]

    ldr r0, =0x020c4078 @CCGR4
    str r1, [r0]

    ldr r0, =0x020c407c @CCGR5
    str r1, [r0]

    ldr r0, =0x020c4080 @CCGR6
    str r1, [r0]

这样就把0xffffffff全部写入到各个寄存器中,即把全部的时钟使能。

接下来就是IO复用

将GPIO1_IO03就复用为GPIO,

配置 GPI01_IO03 PIN的复用为GPI0

初始化寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03

将其 bit3~0 设置为 0101=5 即可

在这里插入图片描述

找到GPIO1_IO03,将bit0-3也就是MUX_MODE设置为 5。
在这里插入图片描述

这个寄存器的地址在图中可以看到为20E_0068h

同上一样的方式

代码为:

	ldr r0, =0X020E0068 @IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03
    ldr r1, =0x5        @要写入的数据为5
    str r1, [r0]        @将5写入到IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03中

这样复用功能就配置好了。

接下来配置电器属性

寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03是设置GPIO1_IO03的电气属性。

包括压摆率、速度、驱动能力、开漏、上下拉等。

在这里插入图片描述

下面来看具体配置:

在这里插入图片描述

首先是bit0,有低速率和高速率两种,我们这里选择低速率,即设置为0。
在这里插入图片描述

bit2-1是保留的,不用管。
在这里插入图片描述

再看bit5-3 是设置驱动能力的。数值越大,驱动能力越强。

我们这里选择110,即R0/6。

在这里插入图片描述

再看bit7-6 是设置速度的。

我们这里设置中速medium,10 100Mhz的速度
在这里插入图片描述

接着是bit10-8,保留,不用管。

在这里插入图片描述

然后是bit11,是设置开路输出

我们这里设置为0,即关闭开路输出。

在这里插入图片描述

再看bit12,是设置拉/保持使能字段。

我们这里设置为1,使能pull/kepper开启

在这里插入图片描述

bit13,设置上拉还是保持

我们设置为0,kepper保持
在这里插入图片描述

bit15-14是选择电阻

设置上下拉阻值,我们设置为00,100k下拉
在这里插入图片描述

最后是bit16

设置hys,我们这里选择关闭,设置为0。

整体的值换算为十六进制为:10b0

代码为:

	ldr r0, =0x020e02f4
    ldr r1, =0x10b0
    str r1, [r0]

接下来,配置GPIO功能

设置输入输出。设置GPIO1_DR寄存器bit3为1,也就是设置为输出模式。设置GPIO1_DR寄存器的bit3,为1表示输出高电平,为0表示输出低电平。

在这里插入图片描述

设置GPIO1_GDIR寄存器,设置GPIO1_GPIO03为输出

GPIO1_GDIR寄存器地址为0x0209c004,设置GPIO1_GDIR寄存器bit3为1

也就是设置GPIO1_IO03为输出

在这里插入图片描述

代码为:

	ldr r0, =0x0209c004
    ldr r1, =0x8
    str r1, [r0]

最后设置一个开灯码

打开LED,也就是设置GPIO1_IO03为0,就输出低电平,灯就会亮

GPIO1_DR寄存器地址为0x0209c000

在这里插入图片描述

代码为:

    ldr r0, =0x0209c000
    ldr r1, =0
    str r1, [r0]

死循环

用一个loop函数,让CPU处于可知状态。

代码为:

loop:
    b loop

最后完整代码如下:


.global _start @全局标号

_start:
    /*初始化使能所有外设时钟*/
    ldr r0, =0x020c4068 @CCGR0
    ldr r1, =0xfffffff @要向CCGR0写入打数据
    str r1, [r0]       @将0xffffffff写入到CCGR0中

    ldr r0, =0x020c406c @CCGR1
    str r1, [r0]

    ldr r0, =0x020c4070 @CCGR2
    str r1, [r0]

    ldr r0, =0x020c4074 @CCGR3
    str r1, [r0]

    ldr r0, =0x020c4078 @CCGR4
    str r1, [r0]

    ldr r0, =0x020c407c @CCGR5
    str r1, [r0]

    ldr r0, =0x020c4080 @CCGR6
    str r1, [r0]

    /*配置 GPI01_IO03 PIN的复用为GPI0,也就是设置
     * IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03=5
     * IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03寄存器的地址为0X020E0068
     */
    ldr r0, =0X020E0068 @IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03
    ldr r1, =0x5        @要写入的数据
    str r1, [r0]        @将5写入到IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03中

    /* 配置GPIO1_IO03的电气属性 也就是寄存器:
     * IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03
     * IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03寄存器地址为0x020e02f4
     *
     * bit0:    0 低速率
     * bit5:3:  110 R0/6驱动能力
     * bit7:6:  10 100MHz速度
     * bit11:   0 关闭开路输出
     * bit12:   1 使能pull/kepper
     * bit13:   0 kepper
     * bit15:14: 00 100K下拉
     * bit16:   0 关闭hys
    */
    ldr r0, =0x020e02f4
    ldr r1, =0x10b0
    str r1, [r0]

    /* 设置GPIO
     * 设置GPIO1_GDIR寄存器,设置GPIO1_GPIO03为输出
     * GPIO1_GDIR寄存器地址为0x0209c004,设置GPIO1_GDIR寄存器bit3为1,
     * 也就是设置GPIO1_IO03为输出。
    */
    ldr r0, =0x0209c004
    ldr r1, =0x8
    str r1, [r0]

    /* 打开LED,也就是设置GPIO1_IO03为0
     * GPIO1_DR寄存器地址为0x0209c000
     *
    */

    ldr r0, =0x0209c000
    ldr r1, =0
    str r1, [r0]

loop:
    b loop

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值