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

📄 tlc2543.c

📁 tlc2543的linux驱动程序
💻 C
字号:
#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>//#include <asm/delay.h>#include <linux/types.h>#include <asm/io.h>#include <linux/ioctl.h>#include <linux/fcntl.h>/* O_ACCMODE */#include <linux/cdev.h>#include <asm/uaccess.h>#include <linux/config.h>#include <linux/mm.h>#include <linux/errno.h>#include <asm/segment.h>#include <asm/hardware.h>#include <asm/arch/regs-gpio.h>MODULE_LICENSE("Dual BSD/GPL"); MODULE_AUTHOR("Qlc");int AD_MAJOR = 0;#define AD_NAME "tlc2543"#define CS_AD 			S3C2410_GPF4#define CLK_AD 		S3C2410_GPF5#define INDATA_AD 	S3C2410_GPF6#define OUTDATA_AD 	S3C2410_GPF0//#define EOC_AD S3C2410_GPF8#define CS_AD_CONFIG 		S3C2410_GPF4_OUTP#define CLK_AD_CONFIG 		S3C2410_GPF5_OUTP#define INDATA_AD_CONFIG 	S3C2410_GPF6_OUTP#define OUTDATA_AD_CONFIG	S3C2410_GPF0_INP//#define EOC_AD_CONFIG		S3C2410_GPF8_INP#define AD_IOC_MAGIC 'k'#define CS_ON  		_IO(AD_IOC_MAGIC,0)#define CS_OFF 		_IO(AD_IOC_MAGIC,1)#define CLK_ON			_IO(AD_IOC_MAGIC,2)#define CLK_OFF		_IO(AD_IOC_MAGIC,3)#define INDATA_ON		_IO(AD_IOC_MAGIC,4)#define INDATA_OFF	_IO(AD_IOC_MAGIC,5)static unsigned char key=0;struct cdev cdev;int ad_open (struct inode *inode,struct file *filp){			//printk("open\n");		s3c2410_gpio_cfgpin(CS_AD,CS_AD_CONFIG);		s3c2410_gpio_cfgpin(CLK_AD,CLK_AD_CONFIG);		s3c2410_gpio_cfgpin(INDATA_AD,INDATA_AD_CONFIG);		s3c2410_gpio_cfgpin(OUTDATA_AD,OUTDATA_AD_CONFIG);				s3c2410_gpio_setpin(CS_AD,1);	return 0;}int ad_read(struct file *fp,char * buf, size_t size,loff_t * offt){	key=s3c2410_gpio_getpin(OUTDATA_AD);	put_user(key,buf);	return (int)key;}int ad_release (struct inode *inode,struct file *filp){	s3c2410_gpio_setpin(CS_AD,1);	printk("release\n");	return 0;}static int ad_ioctl(struct inode *inode,struct file *file, unsigned int cmd,						 unsigned long arg){	switch( cmd){	case CS_ON:		{s3c2410_gpio_setpin(CS_AD,1);			break;		}	case CS_OFF:		{s3c2410_gpio_setpin(CS_AD,0);			break;		}	case CLK_ON:		{s3c2410_gpio_setpin(CLK_AD,1);			break;		}	case CLK_OFF:		{s3c2410_gpio_setpin(CS_AD,0);			break;		}	case INDATA_ON:		{s3c2410_gpio_setpin(INDATA_AD,1);			break;		}	case INDATA_OFF:		{s3c2410_gpio_setpin(INDATA_AD,0);			break;		}	default:		{			break;		}	}	return 0;}struct file_operations ad_fops ={		.owner = THIS_MODULE,		.open	 =	ad_open,		.read	 = ad_read,		.ioctl = ad_ioctl,		.release = ad_release,};  //don't forget ";" 	static int __init ad_init(void){	int result,err,devno;	dev_t dev = MKDEV(AD_MAJOR,0);	printk("initing\n");	if(AD_MAJOR)	result = register_chrdev_region(dev,1,AD_NAME);	else {	result = alloc_chrdev_region(&dev,0,1,AD_NAME);	AD_MAJOR=MAJOR(dev);	}	if(result<0){	printk(KERN_WARNING "tlc2543: unable to get major %d\n",AD_MAJOR);	return result;	}	devno=MKDEV(AD_MAJOR,0);	cdev_init(&cdev, &ad_fops);	cdev.owner= THIS_MODULE;	cdev.ops=&ad_fops;	err=cdev_add(&cdev,devno,1);	if(err)	printk(KERN_NOTICE "err adding tlc2543\n");	printk("tlc2543 device installed\n");	return 0;}static void __exit ad_exit(void){		cdev_del(&cdev);	unregister_chrdev_region(MKDEV(AD_MAJOR,0),1);	printk("tlc2543 device uninstalled\n");}module_init(ad_init);module_exit(ad_exit);			

⌨️ 快捷键说明

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