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

📄 s3c44b0-key.c

📁 44b0和linux操作系统下的按键中断驱动程序
💻 C
字号:
#include	<linux/config.h>#include	<linux/module.h>#include	<linux/kernel.h>#include	<linux/init.h>#include	<asm/delay.h>#include	<asm/uaccess.h>#include	<linux/fs.h>#include	<linux/devfs_fs_kernel.h>#include	<linux/sched.h>#include	<asm/hardware.h>//#undef	DEBUG#define		DEBUG#ifdef		DEBUG#define		DPRINTK(x... )	printk("s3c44b0_key:"##x)#else	#define		DPRINTK(x...)#endif#define 	DEVICE_NAME	"s3c44b0-key"#define		KEYMinor	1static 	int	KEYMajor = 0;static 	int	s3c44b0_KEY_read(struct file *filp, char *buf, size_t count,loff_t *f_pos){	return 0;}static	int	s3c44b0_KEY_open(struct inode *inode,struct file *filp){	MOD_INC_USE_COUNT;	DPRINTK("open\n");	return 0;}static	int	s3c44b0_KEY_release(struct inode *inode, struct file *filp){	MOD_DEC_USE_COUNT;	DPRINTK("release\n");	return 0;}static	struct	file_operations s3c44b0_fops = {	owner:	THIS_MODULE,	open:	s3c44b0_KEY_open,	write:  s3c44b0_KEY_read,	release:s3c44b0_KEY_release,};static	void	s3c44b0x_KEY_isr(int irq,void *dev_id,struct pt_regs *regs){	switch(irq)	{		case 24:			printk("A\n");			break;		case 25:			printk("B\n");			break;	} 	*((volatile unsigned int*)S3C44B0X_I_ISPC)=(0x1<<irq);}#ifdef CONFIG_DEVFS_FSstatic	devfs_handle_t	devfs_s3c44b0_dir,devfs_s3c44b0raw;#endifstatic	int	__init	s3c44b0_KEY_init(void){	int ret;		ret = register_chrdev(KEYMajor,DEVICE_NAME,&s3c44b0_fops);	if(ret<0)	{		printk(DEVICE_NAME "can't get major number\n");		return ret;	}	KEYMajor = ret;#ifdef	CONFIG_DEVFS_FS        devfs_s3c44b0_dir=devfs_mk_dir(NULL,"key",NULL);	devfs_s3c44b0raw=devfs_register(devfs_s3c44b0_dir,"0",DEVFS_FL_DEFAULT,KEYMajor,\					KEYMinor,S_IFCHR|S_IRUSR|S_IWUSR,&s3c44b0_fops,NULL);#endif	if(request_irq(24,s3c44b0x_KEY_isr,SA_INTERRUPT,DEVICE_NAME,NULL)<0)	DPRINTK("Failed to register IRQ 24\n");	if(request_irq(25,s3c44b0x_KEY_isr,SA_INTERRUPT,DEVICE_NAME,NULL)<0)	DPRINTK("Failed to register IRQ 25\n");		printk(DEVICE_NAME "initialized IRQ 24 25\n");	return 0;}static	void	__exit	s3c44b0_KEY_exit(void){	free_irq(24,NULL);	free_irq(25,NULL);#ifdef	CONFIG_DEVFS_FS	devfs_unregister(devfs_s3c44b0raw);	devfs_unregister(devfs_s3c44b0_dir);#endif	unregister_chrdev(KEYMajor, DEVICE_NAME);	}module_init(s3c44b0_KEY_init);module_exit(s3c44b0_KEY_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("ZCY");MODULE_DESCRIPTION("SEG7 driver fo EB44b0");

⌨️ 快捷键说明

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