本文通过TQ2440开发板上可外接的GPIO口GPG14连接蜂鸣器,通过控制GPG14引脚的高低电平的输出和高低电平输出之间的时间间隔来使蜂鸣器发出不同的声音。
1.打开S3C2440的底板原理图找到GPIO,如下图所示:
使用万用表先找到VDD5V那个引脚,然后对照图找到GPG14,将蜂鸣器的正极连上GPG14,负极连上GND接地。
2.蜂鸣器驱动程序源代码My_Beep.c:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/irq.h>
#include <mach/regs-gpio.h> //定义s3c2410的GPIO
#include <mach/hardware.h> //定义操作s3c2410的GPIO的函数
#include <linux/device.h> //自动创建设备文件应该包含的头文件
#define DEVICE_NAME "My_Beep" //加载模块后执行cat/proc/devices中看到的设备名称
#define Beep_MAJOR 104 //主设备号
#define Beep_High 1
#define Beep_Low 0
static int My_Beep_open(struct inode *inode,struct file *file)
{
s3c2410_gpio_cfgpin(S3C2410_GPG14,S3C2410_GPG14_OUTP);//配置GPG14为输出功能
printk("My_Beep open\n");
return 0;
}
static int My_Beep_ioctl(struct inode * inode, struct file * file,unsigned int cmd)
{
switch(cmd)
{
case Beep_High:
s3c2410_gpio_setpin(S3C2410_GPG14, 1);//设置GPG14引脚为输出电平为1
return 0;
case Beep_Low:
s3c2410_gpio_setpin(S3C2410_GPG14, 0);//设置GPG14引脚为输出电平为0
return 0;
default:
return -1;
}
}
//定义文件操作 file_operations
static struct file_operations My_Beep_fops =
{
.owner = THIS_MODULE,
.open = My_Beep_open,
.ioctl = My_Beep_ioctl,
};
static struct class *Beep_class;
static int __init My_Beep_init(v