s3c2440 linux3.0下PWM使用之蜂鸣器驱动移植
来源:互联网 发布:snow软件下载 编辑:程序博客网 时间:2024/06/04 19:06
这篇文档拖了好久了,都有点淡忘了。这段时间考试加实验太忙了,但还是先粗略的记录,归纳一下吧。
交叉编译器环境:arm-linux-gcc-4.5.4
开发板平台:FL2440
Linux内核版本: 3.0
先贴上修改过的地方。文件:mach-smdk2440.c
+#include <linux/gpio.h> //add by handy 5.20+/* beeper add by Handy 2015.5.20 */+static struct platform_device smdk2440_beeper_device= {+ .name= "pwm-beeper",+ .dev= {+ .parent = &s3c_device_timer[0].dev, //采用具有PWM脉冲宽度调制功能的定时器0;+ .platform_data = 0,+ },+ .id= 0,+}; static struct platform_device *smdk2440_devices[] __initdata = { &s3c_device_ohci, &s3c_device_lcd, &s3c_device_iis,+ &s3c_device_rtc,+ &uda1340_codec,/* add UDA1341 by Handy */ + &smdk2440_audio,/* add UDA1341 by Handy */+ &samsung_asoc_dma,/* add DM9000 by Handy */+ &smdk2440_device_eth,/* add DM9000 by Handy */+ &s3c_device_adc,/* add Touch Screen driver by Handy,2015.5.14 */+ &s3c_device_ts, /* add Touch Screen driver by Handy,2015.5.14 */+ &s3c_device_timer,/* add timer by Handy */ + &smdk2440_beeper_device,/* add beeper by Handy */ }; static void __init smdk2440_machine_init(void) { s3c24xx_fb_set_platdata(&smdk2440_fb_info);+ s3c24xx_ts_set_platdata(&smdk2440_ts_cfg);/* add Touch screen info by Handy,2015.5.14 */ s3c_i2c0_set_platdata(NULL);-+ /* PWM beeper add by Handy 2015.5.20*/+ gpio_request(S3C2410_GPB(0),"beeper"); //IO口使用GPB0 + s3c_gpio_setpull(S3C2410_GPB(0), S3C_GPIO_PULL_NONE);+ s3c_gpio_cfgpin(S3C2410_GPB(0), S3C2410_GPB0_TOUT0); //设置为TOUT0 PWM输出模式+ /* PWM beeper add by Handy 2015.5.20 */
蜂鸣器可以发声,靠的不仅仅是蜂鸣器硬件的驱动,还有linux下的PWM(脉冲宽度调制)这种变频技术,靠改变脉冲宽度来控制输出电压,通过改变周期来控制其输出频率。通过改变频率可以使蜂鸣器发出不同的声音。
上面我们最基本可以知道的是定时器0,1,2,3都具有PWM脉冲宽度调制功能。当然还有定时器的操作时序等,但这些问题在这里不深究,具体看2440datesheet.
通过S3C2440原理图可知蜂鸣器接2440的GPB0/TOUT0.即我们的蜂鸣器是通过GPB0 IO口使用PWM信号驱动工作的,而且GPB0口是一个复用的IO口,要使用它得把他设置成TOUT0 PWM输出模式。另外s3c_gpio_setpull()函数和s3c_gpio_cfgpin()这两个控制GPIO口的函数在内核中,我做驱动移植并没有深入研究,待日后再深入追踪。
代码部分的修改已经完毕,接下来便是内核配置:
我们linux内核已经带有基于PWM蜂鸣器的通用驱动程序pwm-beeper.c(位于drivers/input/misc目录下),它属于input子系统。所以我们在make menuconfig配置的时候需要选上 PWM beeper support这个选项。
于是我们进到drivers/input/misc目录下的Kconfig文件中找到并修改注释掉.让这个选项不依赖于其他文件就可以勾选。
还有就是beeper support的部分驱动支持选项要选上
SystemType --->
[ * ] PWM device support
DeviceDrivers --->
Input device support --->
[* ] Miscellaneous devices --->
< * > PWM beeper support
- * - Pules-Width Modulation (PWM) Supprot --->
--- Pulse-Width Modulation (PWM) Support
- *- Samsung pwmsupport
到此,蜂鸣器的简单驱动配置就已经完成了,烧进内核中重启后在启动内核成功时就能听到哔的一声了。当然这是最简单的,并没有调整修改频率而发出来的声音。
参考网上的文档知道我们还可以通过改变event.value的值来发出不同的声音。往后有时间我要再写个应用程序测试一下。
Referrence:
http://blog.csdn.net/zhaocj/article/details/8843892
http://blog.chinaunix.net/uid-26942706-id-3269636.html
- s3c2440 linux3.0下PWM使用之蜂鸣器驱动移植
- s3c2440 PWM使用之蜂鸣器驱动移植
- Linux3.5下的PWM蜂鸣器驱动测试 (2)
- 基于S3C2440的Linux-3.6.6移植 PWM蜂鸣器驱动
- 基于S3C2440的Linux-3.6.6移植——PWM蜂鸣器驱动
- smart210 linux3.0.8内核蜂鸣器pwm驱动分析
- linux下基于S3C2440的PWM蜂鸣器移植以及驱动程序分析
- Linux3.5下的蜂鸣器驱动测试
- 基于S3C2440芯片linux系统下的pwm波驱动蜂鸣器
- 05-S3C2440学习之内核(移植)linux3.4.2移植(4)支持LED驱动、按键驱动
- linux-2.6.32在mini2440开发板上移植(18)之移植PWM蜂鸣器驱动
- 利用S3C2440中的Timer0的PWM输出驱动蜂鸣器
- linux驱动开发之pwm蜂鸣器
- linux驱动开发之pwm蜂鸣器
- linux驱动开发之pwm蜂鸣器
- linux3.0内核移植(S3C2440)
- 移植PWM蜂鸣器驱动到GEC2440开发板
- pwm控制蜂鸣器驱动移植及初步认识Kconfig
- android 自定义view,绘制与onTouchEvent事件(一)
- 无线网络(WLAN)- Wi-Fi
- 摄像头的工作原理
- iOS捕获异常,常用的异常处理方法
- mahout0.9 分布式推荐算法ALS-MR
- s3c2440 linux3.0下PWM使用之蜂鸣器驱动移植
- 【七】栈的应用实例(一)
- Windows server 2008 R2中安装MySQL !
- Android 自定义ProgressBar
- 计算机系统知识--CPU
- ActiveAndroid-含有容器的插入删除
- 创业这么热,为何站长消失了?
- OC视频笔记3(OC常用类型)
- identity 读取用户表