mini2440 蜂鸣器驱动

蜂鸣器驱动代码如下:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
#include <linux/ioctl.h>
#include <linux/gpio.h>

#include <mach/regs-gpio.h>

#include "buzzer.h"

static int buzzer_open(struct inode *inode, struct file *file)
{
	s3c2410_gpio_cfgpin(S3C2410_GPB(0), S3C2410_GPIO_OUTPUT);
	s3c2410_gpio_setpin(S3C2410_GPB(0), 0); /* turn off buzzer */

	return 0;
}

static int buzzer_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{
	switch (cmd) {
	case BUZZER_ON:
		s3c2410_gpio_setpin(S3C2410_GPB(0), 1);
		return 0;
	case BUZZER_OFF:
		s3c2410_gpio_setpin(S3C2410_GPB(0), 0);
		return 0;
	default:
		return -EINVAL;
	}
}

static struct file_operations buzzer_fops = {
	.owner = THIS_MODULE,
	.open = buzzer_open,
	.ioctl = buzzer_ioctl,
};

static struct miscdevice buzzer_misc = {
	.minor = MISC_DYNAMIC_MINOR,
	.name = "buzzer",
	.fops = &buzzer_fops,
};

static int buzzer_init(void)
{
	return misc_register(&buzzer_misc);
}

static void buzzer_exit(void)
{
	misc_deregister(&buzzer_misc);
}

MODULE_LICENSE("Dual BSD/GPL");

module_init(buzzer_init);
module_exit(buzzer_exit);

蜂鸣器驱动代码同led驱动代码完全类似,它是通过GPB0来控制,当GPB0输出高电平时蜂鸣器发声。


头文件buzzer.h如下:

#ifndef __LED_H
#define __LED_H

#define BUZZER_ON		_IO('b', 0)
#define BUZZER_OFF		_IO('b', 1)

#endif /* __LED_H */

测试代码如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdio.h>

#include "buzzer.h"

int main(void)
{
	int fd;

	fd = open("/dev/buzzer", O_RDWR);

	if (fd < 0) {
		printf("No such device!\n");
		return -1;
	}

	printf("buzzer on\n");
	ioctl(fd, BUZZER_ON);
	sleep(5);
	printf("buzzer off\n");
	ioctl(fd, BUZZER_OFF);

	close(fd);

	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值