Exynos4412裸机开发系列教程--蜂鸣器
2014-08-14 16:58
225 查看
蜂鸣器为一种自激震荡的发声设备,用于各种操作提示,一般都是单频发声,当然也有不带自激震荡的蜂鸣器,需要由处理器产生各种频率的方波,以驱动蜂鸣器发声。
普通IO口是无法直接驱动任何蜂鸣器的,一般都需要通过三极管来增强驱动能力,下图即是蜂鸣器的最简单应用电路,通过设置pwm1管脚电平能打开或关闭蜂鸣器。
![](http://img.blog.csdn.net/20140814161144093?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb2JvYm9kb2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
同样,更Led流水灯类似,我们需要编写一个函数能控制蜂鸣器,方便以后的调用,实现如下:
当然在操作蜂鸣器之前,我们需要初始化相关IO,输出上拉模式
接下来,我们来看看主程序:
很简单,死循环,每隔500毫秒改变蜂鸣器的状态,并可听到滴滴声。
是不是很简单呢,发现跟单片机编程没什么两样啊。是这样的,只要我们将各种外设模块包装好各种库,开发裸机,跟开发各种应用软件,没有任何差异,专心做好业务逻辑层面就可以了。
贴上完整源码参考吧,有兴趣的自行下载编译,测试。有问题的请留言。
Exynos4412裸机系列教程源码之蜂鸣器
普通IO口是无法直接驱动任何蜂鸣器的,一般都需要通过三极管来增强驱动能力,下图即是蜂鸣器的最简单应用电路,通过设置pwm1管脚电平能打开或关闭蜂鸣器。
同样,更Led流水灯类似,我们需要编写一个函数能控制蜂鸣器,方便以后的调用,实现如下:
enum beep_status { BEEP_STATUS_OFF = 0, BEEP_STATUS_ON = 1, }; void beep_set_status(enum beep_status status) { if(status == BEEP_STATUS_ON) writel(EXYNOS4412_GPD0_BASE + EXYNOS4412_GPIO_DAT, (readl(EXYNOS4412_GPD0_BASE + EXYNOS4412_GPIO_DAT) & ~(0x1<<1)) | (0x1<<1)); else if(status == BEEP_STATUS_OFF) writel(EXYNOS4412_GPD0_BASE + EXYNOS4412_GPIO_DAT, (readl(EXYNOS4412_GPD0_BASE + EXYNOS4412_GPIO_DAT) & ~(0x1<<1)) | (0x0<<1)); }
当然在操作蜂鸣器之前,我们需要初始化相关IO,输出上拉模式
/* * Beep Pin -> EXYNOS4_GPD0(1) */ void beep_initial(void) { writel(EXYNOS4412_GPD0_BASE + EXYNOS4412_GPIO_CON, (readl(EXYNOS4412_GPD0_BASE + EXYNOS4412_GPIO_CON) & ~(0xf<<4)) | (0x1<<4)); writel(EXYNOS4412_GPD0_BASE + EXYNOS4412_GPIO_PUD, (readl(EXYNOS4412_GPD0_BASE + EXYNOS4412_GPIO_PUD) & ~(0x3<<2)) | (0x2<<2)); writel(EXYNOS4412_GPD0_BASE + EXYNOS4412_GPIO_DAT, (readl(EXYNOS4412_GPD0_BASE + EXYNOS4412_GPIO_DAT) & ~(0x1<<1)) | (0x0<<1)); }
接下来,我们来看看主程序:
int tester_beep(int argc, char * argv[]) { while(1) { beep_set_status(BEEP_STATUS_ON); mdelay(500); beep_set_status(BEEP_STATUS_OFF); mdelay(500); } return 0; }
很简单,死循环,每隔500毫秒改变蜂鸣器的状态,并可听到滴滴声。
是不是很简单呢,发现跟单片机编程没什么两样啊。是这样的,只要我们将各种外设模块包装好各种库,开发裸机,跟开发各种应用软件,没有任何差异,专心做好业务逻辑层面就可以了。
贴上完整源码参考吧,有兴趣的自行下载编译,测试。有问题的请留言。
Exynos4412裸机系列教程源码之蜂鸣器
相关文章推荐
- Exynos4412裸机开发系列教程--启动流程
- Exynos4412裸机开发系列教程--中断管理
- Exynos4412裸机开发系列教程--LED流水灯
- Exynos4412裸机开发系列教程--源码下载
- Exynos4412裸机开发系列教程--时钟管理
- Exynos4412裸机开发系列教程--TICK机制
- S5P4418裸机开发系列教程--源代码下载
- S5P4418裸机开发系列教程--源码下载
- Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序
- mos开发系列教程十:说明
- 系列教程:DB2 9 应用开发(733)认证指南
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—教程索引】★★★
- Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序(二)
- 使用VTEditor软件快速开发网站系列教程四 模块公共属性篇
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(一)让物体动起来①
- 使用VTEditor软件快速开发网站系列教程五 模块篇
- 使用VTEditor软件快速开发网站系列教程七 自定义页面篇
- 使用VTEditor软件快速开发网站系列教程一 原理篇
- Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序
- Ruby on rails开发从头来系列教程(附ruby电子书下载)