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
    +关注

    关注

    243

    文章

    24438

    浏览量

    687496
  • 存储器
    +关注

    关注

    39

    文章

    7715

    浏览量

    170864
  • LED驱动
    +关注

    关注

    73

    文章

    1054

    浏览量

    142175
  • 蜂鸣器
    +关注

    关注

    12

    文章

    897

    浏览量

    47606
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入解析NCL30486B:高效智能LED驱动控制器的卓越之选

    LED照明领域,款性能卓越的驱动控制器对于实现高效、稳定且智能的照明系统至关重要。onsemi的NCL30486B就是这样款备受瞩目的产品,它专为隔离式恒流
    的头像 发表于 12-08 15:15 93次阅读
    深入<b class='flag-5'>解析</b>NCL30486B:高效智能<b class='flag-5'>LED</b><b class='flag-5'>驱动</b>控制器的卓越之选

    ‌NCV78703多相升压LED驱动器技术解析与应用指南

    专为具有NCV78723(双通道降压)/713(单通道)的大电流LED而设计。这为驱动电压高达60V的多个led灯串提供了完整的解决方案。NCV78703驱动器IC包括
    的头像 发表于 11-22 11:44 1076次阅读
    ‌NCV78703多相升压<b class='flag-5'>LED</b><b class='flag-5'>驱动</b>器技术<b class='flag-5'>解析</b>与应用指南

    X-NUCLEO-LED12A1 LED驱动器扩展板技术解析与应用指南

    STMicroelectronics X-NUCLEO-LED12A1 LED驱动器扩展板用于STM32 Nucleo,具有四个LED1202器件,可
    的头像 发表于 10-31 15:13 274次阅读
    X-NUCLEO-<b class='flag-5'>LED</b>12A1 <b class='flag-5'>LED</b><b class='flag-5'>驱动</b>器扩展板技术<b class='flag-5'>解析</b>与应用指南

    解析LED显示屏背后的驱动方案

    当前,各式各样的LED显示屏正以创新的显示效果与丰富造型,拓展着人们感知视觉世界的维度。而这些视觉盛宴的背后,都离不开“幕后操控者”——LED驱动技术。
    的头像 发表于 10-27 15:04 3745次阅读
    <b class='flag-5'>解析</b><b class='flag-5'>LED</b>显示屏背后的<b class='flag-5'>驱动</b>方案

    ‌基于TLC6984 LED驱动器的微间距LED显示技术解析

    Texas Instruments TLC6984 48x16矩阵LED显示驱动器是款高度集成的共阴极矩阵LED显示驱动器,具有48个恒流
    的头像 发表于 09-04 10:23 428次阅读
    ‌基于TLC6984 <b class='flag-5'>LED</b><b class='flag-5'>驱动</b>器的微间距<b class='flag-5'>LED</b>显示技术<b class='flag-5'>解析</b>

    TLC6983EVM LED矩阵驱动评估模块技术解析

    Texas Instruments TLC6983EVM LED驱动器评估模块(EVM)用作TLC6983工程演示和评估的参考。TLC6983是款高度集成的共阴极矩阵LED显示
    的头像 发表于 08-26 11:15 725次阅读
    TLC6983EVM <b class='flag-5'>LED</b>矩阵<b class='flag-5'>驱动</b>评估模块技术<b class='flag-5'>解析</b>

    德州仪器LP5810 4通道RGBW LED驱动器技术解析

    Texas Instruments LP5810 4通道RGBW LED驱动器具有超低常规工作电流,点亮LED时的典型电流为0.4mA。这些驱动器与1.8V、3.3V和5V电压范围逻辑
    的头像 发表于 08-11 10:29 694次阅读
    德州仪器LP5810 4通道RGBW <b class='flag-5'>LED</b><b class='flag-5'>驱动</b>器技术<b class='flag-5'>解析</b>

    LP5812 4×3矩阵RGB LED驱动器技术解析与应用指南

    Texas Instruments LP5812 RGB LED驱动器是4 x 3矩阵驱动器,具有I^2^C和自主动画引擎控制功能。这些驱动器生成6MHz时钟信号,并使用它来同步多个设
    的头像 发表于 08-08 16:18 924次阅读
    LP5812 4×3矩阵RGB <b class='flag-5'>LED</b><b class='flag-5'>驱动</b>器技术<b class='flag-5'>解析</b>与应用指南

    关于有源蜂鸣器及无源蜂鸣器的区别及驱动各类单片机案例

    本文主要介绍了有源无源蜂鸣器的本质区别,引脚判断和对应的驱动程序,对我们选用蜂鸣器元件指引了方向
    的头像 发表于 07-22 09:45 1931次阅读
    关于有源<b class='flag-5'>蜂鸣器</b>及无源<b class='flag-5'>蜂鸣器</b>的区别及<b class='flag-5'>驱动</b>各类单片机案例

    浮思特 | LED显示屏驱动IC技术解析,基础原理与创新应用

    在每块惊艳的LED显示屏背后,驱动IC如同精密控制电流的“神经中枢”,默默决定着画面的流畅度、色彩的真实感与能耗的高低。从户外巨幕的强韧可靠,到室内高清屏的细腻呈现,再到虚拟拍摄的零瑕疵要求
    的头像 发表于 06-20 09:59 2361次阅读
    浮思特 | <b class='flag-5'>LED</b>显示屏<b class='flag-5'>驱动</b>IC技术<b class='flag-5'>解析</b>,基础原理与创新应用

    从简单光效到复杂互动,玩具LED驱动芯片方案盘点

    电子发烧友网报道(/黄山明)如今的不少AI玩具已经开始在市面中进行售卖,而不论是AI玩具,还是普通玩具,只要能够使用电源驱动,必少不了各种光效的加持,而这背后,需要的事LED驱动器来
    的头像 发表于 06-19 00:02 5052次阅读

    读懂:LED 驱动电路二极管挑选要点

    读懂:LED 驱动电路二极管挑选要点
    的头像 发表于 02-06 14:47 1091次阅读

    LED驱动板是如何工作的

      市面上LED产品百花齐放,应用场景非常多样化。很多LED产品需要个核心部件,就是LED驱动板,本期主要讲解它是如何工作的。
    的头像 发表于 12-22 14:23 2204次阅读
    <b class='flag-5'>LED</b><b class='flag-5'>驱动</b>板是如何工作的