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

📄 da.c

📁 a/d驱动实验与d/a驱动实验 基于清华大学的TEB-44B0实验平台
💻 C
字号:
#include <linux/module.h>#include <linux/kernel.h>#include <linux/ioport.h>#include <linux/sched.h>#include <linux/signal.h>#include <linux/errno.h>#include <linux/random.h>#include <linux/miscdevice.h>#include <linux/fs.h>#include <linux/interrupt.h>#include <linux/delay.h>            #include <linux/wait.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/system.h>#include <asm/uaccess.h>	/* get_user, copy_to_user */#include <asm/segment.h>//#include <asm/MC68VZ328.h>#include <asm/arch/s3c44b0x.h>#define DA_DEBUG#define  my_get(a)		(*(volatile unsigned char*) (a))#define  my_put(v, a)	(*(volatile unsigned char*) (a) = (v))#define  DA_BASE 	0x04400000int da_major = 70;              /* Select 0 for Dynamic adressing */void da_convert(unsigned char dav){	my_put(dav, DA_BASE);	//udelay(20);}static int da_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg){	switch(cmd)	{		// begin convert			case 0:		       {			unsigned char val;			val = *(unsigned char *)arg;			//printk("\nval = :%x\n",val);			da_convert(val);			return 1;			       }		default:			return -EINVAL;	}	return 1;}/* Open-Function des Devices */static int da_open(struct inode *inode, struct file *file){       #ifdef DA_DEBUG	outl(inl(S3C44B0X_BANKCON2)&(~(0x7fff)), S3C44B0X_BANKCON2);	outl(inl(S3C44B0X_BANKCON2)|(0x1480), S3C44B0X_BANKCON2);	printk("\ndac0832 is open!\n");#endif 	return 0;}/* Close-Function des Devices */static void da_close(struct inode *inode, struct file *file){#ifdef DA_DEBUG        outl(inl(S3C44B0X_BANKCON2)&(~(0x7fff)), S3C44B0X_BANKCON2);	outl(inl(S3C44B0X_BANKCON2)|(0x14bc), S3C44B0X_BANKCON2);   	printk("\ndac0832 is closed!\n");#endif}struct file_operations da_fops ={        ioctl: da_ioctl,	open: da_open,        release: da_close,};                               int insert_da(void){	int rc;		outl(inl(S3C44B0X_PCONB)|((0x01)<<7), S3C44B0X_PCONB); 		rc = register_chrdev(da_major, "da", &da_fops);	if(rc < 0)	{#ifdef DA_DEBUG		printk("Panic! Could not register DA-Driver\n");#endif		return rc;	};	return 0;}int da_init(void){	int rc;	rc = insert_da();	if(rc)	{#ifdef DA_DEBUG		printk("Panic! DA-driver could not be loaded!\n");#endif	}	else 	{#ifdef DA_DEBUG		printk("DA-driver init OK\n");#endif	}	return rc;}

⌨️ 快捷键说明

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