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

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

3天内不再提示

一文解析蜂鸣器驱动及LED驱动编写

454398 来源:博客园 作者:z572089387 2020-09-23 15:30 次阅读

一:LED驱动编写

要编写LED驱动,首先的知道开发板的构造;开发板分为核心板与底板;编写驱动的第一步就是要看开发板,找到LED灯在开发板上的位置及所对应的名字;第一步就要查看核心板电路图,以及底板电路图;最后就是查看开发板手册,然后进行程序编写:

通过看开发板我们可以知道LED灯的位置的核心板上,在核心板上找到LED的电路图,Ctrl+F可以在文档中快捷查找:

通过电路图我们可以看出:LED灯的一端已经接高电平,只要给另一端加低电平LED就会被点亮。

然后查看LED在核心板上的引脚:

一文解析蜂鸣器驱动及LED驱动编写

由上图我们可以看出,LED1对应的是GPM4_0

然后通过芯片数据手册可以查到它的具体用法:

通过手册我们可以看出:GPM4CON 置一输出,表示控制,置零输入,表示检测,GPM4DAT表示它的值和引脚的电压状态对于,值为一时表示高电平,值为零时表示底电平,下面贴出代码:

 1     .global main
 2 main:
 3     mov ip, sp
 4     sub sp, sp, #12
 5     stmdb sp!, {fp, ip, lr}
 6     add fp, sp, #8
 7 
 8     ldr r3, gpmcon
 9     ldr r0, =0x1
10     str r0, [r3]
11 
12     ldr r3, gpmdat
13     ldr r0, =0x0
14     str r0, [r3]
15 
16     add sp, fp, #4
17     ldmdb sp, {fp, sp, pc}    
18 
19 gpmcon:
20     .word 0x110002e0
21 
22 gpmdat:
23     .word 0x110002e4

下面的用C语言代码是实现四个LED灯的闪烁

 1 #define GPM4CON (*(unsigned long *)0x110002e0)//宏定义
 2 #define GPM4DAT (*(unsigned long *)0x110002e4)
 3 
 4 void (*udelay)(int) = 0xc3e25f90;
 5 int main()
 6 {
 7     GPM4CON &= ~0xffff;
 8     GPM4CON |= 0x1111;
 9     
10     while(1) {
11         GPM4DAT |= 0xf;//led off
12         udelay(250000);
13         GPM4DAT &= ~0xf;
14         udelay(250000);//led on
15     }    
16 }

跑马灯:

 1 #define GPM4CON (*(unsigned long *)0x110002e0)
 2 #define GPM4DAT (*(unsigned long *)0x110002e4)
 3 
 4 void (*udelay)(int) = 0xc3e25f90;
 5 
 6 int main()
 7 {
 8     
 9     GPM4CON &= ~0xffff;
10     GPM4CON |= 0x1111;
11     unsigned long tmp = 0xf;
12 
13     while(1) {
14 
15         if((tmp & 0xf) == 0) {
16             tmp = 0xf;
17         }
18 
19         GPM4DAT = tmp << 1;
20         tmp = GPM4DAT;
21         udelay(250000);
22 
23     }
24 
25 }

流水灯:

 1 #define GPM4CON (*(unsigned long *)0x110002e0)
 2 #define GPM4DAT (*(unsigned long *)0x110002e4)
 3 
 4 void (*udelay)(int) = 0xc3e25f90;
 5 
 6 int main()
 7 {
 8     
 9     GPM4CON &= ~0xffff;
10     GPM4CON |= 0x1111;
11     unsigned long i = 0;
12     while(1) {
13         GPM4DAT = 0xf;
14         GPM4DAT &= ~(1 << i);//流水
15         udelay(500000);//延时
16         i++;
17         if(i == 4) {
18             i = 0;
19         } 
20     }
21 
22 }

上面程序总用到的延时函数udelay(),由于U-Boot作为嵌入式Linux系统的引导,不具有标准C库中的内容。要使用像printf函数,延时函数udelay(),就需要u-boot中提供的。u-boot函数内容在u-boot源码文件中就需要u-boot中提供的。u-boot函数内容在u-boot源码文件中的System.map文件中。System.map文件是被内核所使用的符号表。符号表是一个在符号名称与它们的存储器位置间的查询表格。符号名称可能是变量的名称或是函数名称。当要查询符号名称的位置或是特定位置的符号名称时,就会需要System.map。找到函数的对应地址,就可以对它进行使用了;

二:蜂鸣器驱动编写:

通过开发板我们可以看出蜂鸣器位于底板:

查看电路图:

通过查看底板手册可知,当XpwmTOUT0处于高电平是蜂鸣器就会响起;通过XpwmTOUT0我们在核心板上找到它的引脚

然后查看芯片手册:

由图我们可以看出GPD0CON为0x1时控制控制:GPD0DAT为1为高电平:下面贴出汇编代码:

 1     .global main
 2 main:
 3     mov ip, sp
 4     sub sp, sp, #12
 5     stmdb sp!, {fp, ip, lr}
 6     add fp, sp, #8
 7 
 8     ldr r3, gpdcon
 9     ldr r0, =0x1
10     str r0, [r3]
11 
12     ldr r3, gpmdat
13     ldr r0, =0x1
14     str r0, [r3]
15 
16     add sp, fp, #4
17     ldmdb sp, {fp, sp, pc}    
18 
19 gpdcon:
20     .word 0x114000a0
21 
22 gpmdat:
23     .word 0x114000a4

C语言的代码:

 1 #define GPD0CON (*(volatile unsigned long*)0x114000a0)
 2 #define GPD0DAT (*(volatile unsigned long*)0x114000a4)
 3 
 4 void (*udelay)(int) = 0xc3e25f90;
 5 int main(void)
 6 {   
 7     GPD0CON =  0x0001;
 8     while(1){
 9         GPD0DAT = 0x1;
10         udelay(250000);
11         GPD0DAT = 0x0;
12         udelay(250000);//延时
13     }
14     
15     return 0;
16 }
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    237

    文章

    22449

    浏览量

    645872
  • 存储器
    +关注

    关注

    38

    文章

    7148

    浏览量

    161984
  • LED驱动
    +关注

    关注

    71

    文章

    943

    浏览量

    137432
  • 蜂鸣器
    +关注

    关注

    12

    文章

    850

    浏览量

    45303
收藏 人收藏

    评论

    相关推荐

    LED驱动电路图分享

    LED驱动电路是一种用于驱动LED发光的电子电路。LED(发光二极管)是一种特殊的半导体器件,具有长寿命、高光效、安全环保、方
    的头像 发表于 02-18 16:55 1085次阅读
    <b class='flag-5'>LED</b><b class='flag-5'>驱动</b>电路图分享

    LED驱动电源的分类与特性解析

    LED驱动电源负责为LED提供恒定的电流,确保其稳定运行。如同心脏对人体的重要性一般,LED驱动电源对于
    的头像 发表于 02-01 14:27 309次阅读
    <b class='flag-5'>LED</b><b class='flag-5'>驱动</b>电源的分类与特性<b class='flag-5'>解析</b>

    最简单的led驱动电路介绍

    LED驱动电路是用于控制LED灯的亮度和颜色的一种电子电路。在这篇文章中,我们将介绍最简单的LED驱动电路——恒流
    的头像 发表于 12-30 15:28 1706次阅读
    最简单的<b class='flag-5'>led</b><b class='flag-5'>驱动</b>电路介绍

    蜂鸣器驱动电路的工作原理

    蜂鸣器驱动电路是一种将电信号转换为声音信号的电路。它常用于警报系统、计时器、电子游戏等设备中,用于发出警报音、提醒声音等。 蜂鸣器驱动电路通常由振荡器、功放和
    的头像 发表于 12-08 11:32 1169次阅读

    分析五种蜂鸣器驱动电路

    蜂鸣器:发声元件,在其两端施加直流电压(有源蜂鸣器)或者方波(无源蜂鸣器)就可以发声,其主要参数是外形尺寸、发声方向、工作电压、工作频率、工作电流、驱动方式(直流方波)等。这些都需要根
    的头像 发表于 10-16 15:45 1.2w次阅读
    分析五种<b class='flag-5'>蜂鸣器</b><b class='flag-5'>驱动</b>电路

    LED驱动IC——FP7125应用

    LED驱动
    jf_34149045
    发布于 :2023年10月16日 09:12:59

    Linux模块相关命令 Linux驱动模块的编写与挂载

    Linux模块相关命令 Linux驱动模块的编写与挂载
    发表于 10-01 12:20 197次阅读
    Linux模块相关命令 Linux<b class='flag-5'>驱动</b>模块的<b class='flag-5'>编写</b>与挂载

    如何实现Linux下的LED驱动

    LED驱动 我们以imx6ull pro开发板的板载led为例,其板载了一个可控制的Led2,原理图如下: LED2进行上拉电阻,另外一个管
    的头像 发表于 09-27 11:03 314次阅读
    如何实现Linux下的<b class='flag-5'>LED</b><b class='flag-5'>驱动</b>

    led驱动电源维修技巧

    LED驱动电源一般有三种驱动方式:分布式驱动电源系统、直接恒流驱动、恒压/恒流驱动方式。①分布
    发表于 09-16 12:43 8160次阅读
    <b class='flag-5'>led</b>灯<b class='flag-5'>驱动</b>电源维修技巧

    基于OpenHarmony编写GPIO平台驱动和应用程序

    该程序是基于OpenHarmony标准系统编写的基础外设类:GPIO驱动
    的头像 发表于 09-12 10:04 471次阅读
    基于OpenHarmony<b class='flag-5'>编写</b>GPIO平台<b class='flag-5'>驱动</b>和应用程序

    如何设计个高亮LED驱动电路#硬件设计

    LED驱动电路
    小鱼教你模数电
    发布于 :2023年07月18日 06:57:16

    单个I/O口驱动单个LED教程

    单个LED驱动,可以使用I/O口和限流电阻来实现。根据LED在电路中的接法,驱动程序也不尽相同,但驱动方法基本类似。
    的头像 发表于 07-12 11:50 2706次阅读
    单个I/O口<b class='flag-5'>驱动</b>单个<b class='flag-5'>LED</b>教程

    LED驱动电路有哪些

    LED驱动器是一种电气设备,用于调节LED或一串(或多串)LED的功率。LED驱动器通过向
    的头像 发表于 07-04 16:42 1407次阅读

    一种常见的蜂鸣器驱动电路

     Hello,大家好,今天我们聊一聊众多工程师眼里似乎毫不起眼的蜂鸣器(Buzzer, Beep)。 首先来看一下最常见的蜂鸣器驱动电路,也就是将蜂鸣器串联在三极管开关电路中,如下图所
    的头像 发表于 05-15 17:36 3192次阅读
    一种常见的<b class='flag-5'>蜂鸣器</b><b class='flag-5'>驱动</b>电路

    汇编驱动IMX6ULL LED

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