0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LED裸机驱动电路图设计及编写汇编代码

454398 来源:博客园 作者:Suzkfly 2020-09-27 16:35 次阅读

1. 确定硬件连接

打开OK6410底板电路图,找到LED,可以发现NLEDx为0时LED点亮。

找到LED的控制引脚,发现LED控制引脚通过连接器连到了核心板:

打开核心板电路图,找到对应的连接器中相同位置下的引脚,发现核心板上的命名与底板相同。

注意:设计者为了方便会将核心板与底板连接处的端口命名为相同的名字,但判断两者的连接位置与端口名其实是没有关系的。从底板上可以看出4个LED所在的连接器引脚编号分别为47,49,46和39,因此在核心板上应该找连接器上这几个编号的引脚,核心板连接器上47,49,46和39号引脚才是与底板LED相连的引脚,只不过设计者为了方便,将核心板上这几个引脚也命名为NLED1~4。

继续在核心板上寻找,能找到NLEDx控制的引脚为GPM0~3

2. 确定GPM相关寄存器的地址和要写入的值

打开6410的芯片手册,找到GPM相关寄存器

可以发现有3个寄存器与GPM相关,三个寄存器的地址分别为0x7F008820、0x7F008824、0x7F008828,其中GPMCON用于配置引脚功能

我们要控制LED需要把GPM0~3都配置成输出模式,因此GPMCON的位[15:0]应为0x1111。GPMDAT用于控制引脚输出电平

如果要控制LED全亮,则GPMDAT位[3:0]应为0x0,全灭则为0xF。GPMPUD用于使能引脚的上下拉,一般会将LED控制引脚配置为上拉模式(注意区分信号的输入输出和电流的流入流出,GPMCON配置输出指的是信号从6410输出到外部,当输出信号为0的时候电流会流入6410芯片)。因此GPMPUD的位[7:0]应为0xAA。

3. 编写汇编代码

编写led.s

 1 .section .text
 2 .global _start
 3 _start:
 4     LDR R0, =0x7F008820        @GPMCON,也可以认为是GPM寄存器基地值
 5 
 6     LDR R1, [R0]            @取出GPMCON的值
 7     LDR R2, =0xFFFF
 8     BIC R1, R1, R2
 9     LDR R2, =0x1111
10     ORR R1, R1, R2
11     STR R1, [R0]            @配置GPM0~3为输出模式
12 
13     LDR R1, [R0, #4]        @取出GPMDAT的值
14     ORR R1, R1, #0xF    
15     STR R1, [R0, #4]        @GPMDAT低4位置1,所有LED关闭
16 
17     LDR R1, [R0, #8]        @取出GPMPUD的值
18     BIC R1, R1, #0xFF
19     ORR R1, R1, #0xAA
20     STR R1, [R0, #8]        @GPM0~3使能上拉
21 loop:
22     LDR R1, [R0, #4]
23     BIC R1, R1, #0xF
24     ORR R1, R1, #0xE
25     STR R1, [R0, #4]        @点亮第一个LED
26     BL delay
27     
28     LDR R1, [R0, #4]
29     BIC R1, R1, #0xF
30     ORR R1, R1, #0xD
31     STR R1, [R0, #4]        @点亮第二个LED
32     BL delay
33 
34     LDR R1, [R0, #4]
35     BIC R1, R1, #0xF
36     ORR R1, R1, #0xB
37     STR R1, [R0, #4]        @点亮第三个LED
38     BL delay
39 
40     LDR R1, [R0, #4]
41     BIC R1, R1, #0xF
42     ORR R1, R1, #0x7
43     STR R1, [R0, #4]        @点亮第四个LED
44     BL delay
45     B loop
46 delay:
47     LDR R2, =0x1000000
48 delay_loop:
49     SUB R2, R2, #1
50     CMP R2, #0
51     BNE delay_loop
52     MOV PC, LR
53 
54     .end

输入命令:

arm-none-linux-gnueabi-gcc -c led.s -o led.o

arm-none-linux-gnueabi-ld -Ttext 0 led.o -o led.elf

arm-none-linux-gnueabi-objcopy -O binary led.elf led.bin

此时生成了可执行文件led.bin

4. 下载文件

连接minicom,重启后进入U-boot,输入dnw 50008000

在虚拟机中输入:sudo dnw led.bin

下载成功后在开发板中输入:go 50008000

此时可以看到4个LED呈流水灯效果。

注意:我是利用U-boot下载程序,此时U-boot已经运行起来了,而U-boot已经做了很多初始化工作了,如设置堆栈指针、关闭看门狗、指定外设基地址等,如果想要将程序烧写进Nandflash的0地址,则这些初始化工作必须自己做。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    237

    文章

    22420

    浏览量

    645790
  • 寄存器
    +关注

    关注

    30

    文章

    5020

    浏览量

    117630
  • 连接器
    +关注

    关注

    96

    文章

    12555

    浏览量

    133044
收藏 人收藏

    评论

    相关推荐

    求CS1238差分输入的应用电路图+STM32F103的驱动代码,万分感谢!

    求CS1238差分输入的应用电路图+STM32F103的驱动代码,请发送到邮箱1281509009@qq.com,万分谢谢!!!
    发表于 03-22 15:54

    LED驱动电路图分享

    LED驱动电路是一种用于驱动LED发光的电子电路LED
    的头像 发表于 02-18 16:55 1002次阅读
    <b class='flag-5'>LED</b><b class='flag-5'>驱动</b><b class='flag-5'>电路图</b>分享

    典型LED驱动电路图分享

    LED驱动电路是一种电源电路,用于将输入的电源电压转换为适合LED的直流电压,以驱动
    的头像 发表于 02-07 18:29 1490次阅读
    典型<b class='flag-5'>LED</b><b class='flag-5'>驱动</b><b class='flag-5'>电路图</b>分享

    简单实用的3种led恒流驱动电路图

    简单实用的3种led恒流驱动电路图
    的头像 发表于 01-24 17:51 3438次阅读
    简单实用的3种<b class='flag-5'>led</b>恒流<b class='flag-5'>驱动</b><b class='flag-5'>电路图</b>

    LED电源驱动电路图详解

    电子发烧友网站提供《LED电源驱动电路图详解.doc》资料免费下载
    发表于 11-15 14:25 10次下载
    <b class='flag-5'>LED</b>电源<b class='flag-5'>驱动</b><b class='flag-5'>电路图</b>详解

    智能小车超声波避障代码电路图

    树莓派综合项目2:智能小车(四)超声波避障Python代码电路图,Python3运行环境,配合我的其它相关文章,可以完美搭建出树莓派遥控小车,代码中有详细的注释,边动手边学习。文章中的代码
    发表于 09-21 08:27

    ARMv8-A处理器的裸机引导代码

    硬件验证工程师经常运行裸机测试来验证片上系统(SoC)中与内核相关的功能。 然而,在没有对ARM体系结构上的软件开发有基本了解的情况下,为裸机系统编写引导代码可能是具有挑战性的。 本应
    发表于 08-23 06:20

    如何编写Arm汇编代码

    大多数开发人员使用高级语言(如C和C++)编写大部分代码。然后将此高级源代码编译为在目标设备上运行的机器代码。 然而,有时编写低级
    发表于 08-02 13:01

    基于MP3302的LED驱动电路图

     LED电路对业余爱好者来说非常着迷,并以其吸引力而闻名。LED在闪电中占据了重要位置,因为它消耗的功率低,并且外观也很好。所以这是一个采用ICMP3302的LED
    的头像 发表于 07-02 15:27 2448次阅读
    基于MP3302的<b class='flag-5'>LED</b><b class='flag-5'>驱动</b>器<b class='flag-5'>电路图</b>

    怎么快速把汇编代码和C语言代码对应起来呢?

    分析软件缺陷,有时候需要把ELF文件反汇编汇编代码,然后分析汇编代码,需要把汇编
    的头像 发表于 06-12 16:45 1722次阅读

    单片机设计应用实例电路图代码

    单片机设计应用实例电路图代码
    发表于 05-31 18:39

    汇编驱动IMX6ULL LED

    汇编编写正点原子Linux开发板的Led驱动
    的头像 发表于 05-01 09:19 25.8w次阅读
    <b class='flag-5'>汇编</b><b class='flag-5'>驱动</b>IMX6ULL <b class='flag-5'>LED</b>灯

    Cortex-M反编译入门

    我们在写单片机裸机程序时,在主函数之前,会有一段启动代码,而启动代码是用汇编写的,有些朋友可能看到汇编头都大了,当时要想深入研究底层架构,这
    的头像 发表于 05-01 01:22 4773次阅读
    Cortex-M反编译入门

    RD8T3x汇编语言用定时器中断驱动LED闪灯程序

    在RD8T3X单片机开发板用,用汇编语言,编写一个定时器控制LED的灯的闪烁。
    的头像 发表于 04-30 18:00 1106次阅读

    汇编点亮LED灯——极简的魅力

    介绍4句汇编语言点亮LED
    的头像 发表于 04-27 08:58 78.7w次阅读
    <b class='flag-5'>汇编</b>点亮<b class='flag-5'>LED</b>灯——极简的魅力