⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 beep.c

📁 ARM9200在LINUX2.4.19下的蜂鸣器驱动程序,经过验证,直接可以应用.
💻 C
字号:
/* 
* ----------------------------------------------------------------------------
*          ATMEL Microcontroller Software Support  -  ROUSSET  -
* ----------------------------------------------------------------------------
*  The software is delivered "AS IS" without warranty or condition of any
*  kind, either express, implied or statutory. This includes without
*  limitation any warranty or condition with respect to merchantability or
*  fitness for any particular purpose, or against the infringements of
*  intellectual property rights of others.
* ----------------------------------------------------------------------------
* File Name             : beep.c
* Object                : AT91RM9200 / BUZZ definitions
* Generated             : AT91 SW Application Group  01/17/2003 (13:41:22)
* AUTHOR		:Sun Qigang
* DATA			:2006-12-4
* ----------------------------------------------------------------------------
*/
#include <linux/fs.h>#include <linux/iobuf.h>#include <linux/major.h>
#include <linux/blkdev.h>
#include <linux/capability.h>
#include <linux/init.h>#include <linux/module.h>
#include <linux/kernel.h>#include <asm/uaccess.h>#include <asm/hardware.h>#include <asm/io.h>
#include <asm/hardware.h>
#include <asm/arch/AT91RM9200_SYS.h>
#undef DEBUG//#define DEBUG#ifdef DEBUG#define DPRINTK(x...)    printk("arm9200-beep:"##x)#else#define DPRINTK(x...)#endif#define BEEP		AT91C_PIO_PD11#define DEVICE_NAME    "rm9200-beep"#define BEEP_MAJOR 	220#define IOWRITE	0xf021#define IOCLEAR	0xf022typedef char beep_device_t;	static long beep_addr;static devfs_handle_t 	beep_devfs_dir;static beep_device_t	beep_devices[256];static int rm9200_beep_open(struct inode *, struct file *);static int rm9200_beep_release(struct inode *inode, struct file *filp);static int rm9200_beep_ioctl(struct inode *, struct file *, unsigned int, unsigned long);static struct file_operations rm9200_fops = {	//owner:	THIS_MODULE,	ioctl:	rm9200_beep_ioctl,	open:	rm9200_beep_open,	release:	rm9200_beep_release,};/* set beep related gpio */ static int rm9200_beep_open(struct inode *inode, struct file *filp){	int minor;	//MOD_INC_USE_COUNT;		//mode counts inc 1	minor = MINOR(inode -> i_rdev);	(void *)(beep_addr) = ioremap(0xfffffa00, 0x8);	//printk("port addr is %x\n", beep_addr);	*(volatile unsigned int *)(beep_addr) |= 0x00000800;	iounmap((void *)(beep_addr));		(void *)(beep_addr) = ioremap(0xfffffa10, 0x8);	//printk("port addr is %x\n", beep_addr);	*(volatile unsigned int *)(beep_addr) |= 0x00000800;	printk("beep open\n");	beep_devices[minor]++;	return 0;}/**  if buf[i] == 0 BEEP_OFF *  else BEEP_ON */ int rm9200_beep_ioctl(struct inode *inode, struct file *flip, unsigned int command, unsigned long arg){	int err = 0;	//int minor = MINOR(inode -> i_rdev);	switch(command){		case IOWRITE:			(void *)(beep_addr) = ioremap(0xfffffa38, 0x8);			*(volatile unsigned int *)(beep_addr) &= ~0x00000800;			/* printk("IO: beep write ok\n"); */			return 0;		case IOCLEAR:			(void *)(beep_addr) = ioremap(0xfffffa38, 0x8);			*(volatile unsigned int *)(beep_addr) |= 0x00000800;			/* printk("IO: beep clear ok\n"); */			return 0;		default:			err = -EINVAL;	}	iounmap((void *)(beep_addr));		return err;}static int rm9200_beep_release(struct inode *inode, struct file *filp){	int minor;	//MOD_DEC_USE_COUNT;	//mode counts dec 1	iounmap((void *)(beep_addr));	minor = MINOR(inode -> i_rdev);	if(beep_devices[minor])		beep_devices[minor]--;		//printk("beep release\n");	return 0;}static int __init rm9200_beep_init(void){	//int ret, i;	//ret = register_chrdev(0, DEVICE_NAME, &rm9200_fops);	beep_devfs_dir = devfs_register(NULL, DEVICE_NAME, DEVFS_FL_DEFAULT, BEEP_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, &rm9200_fops, NULL);/*	if(ret < 0){		printk(DEVICE_NAME "can't get major number\n");		return ret;	}	DbBeepMajor = ret;*/	//printk(DEVICE_NAME "initialized\n");		return 0;}static void __exit rm9200_beep_exit(void){	//unregister_chrdev(DbBeepMajor, DEVICE_NAME);	//iounmap((void *)(beep_addr));	devfs_unregister(beep_devfs_dir);	//printk("beep driver uninstalled ok\n");}module_init(rm9200_beep_init);module_exit(rm9200_beep_exit);MODULE_AUTHOR("Sun Qigang");MODULE_DESCRIPTION("gpio(beep) driver for at91rm9200");MODULE_LICENSE("GPL");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -