亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? s3c44b0iic.c

?? S3C44B0 I2C的uCLINUX的驅(qū)動程序(鐵電存儲器FM24系列
?? C
字號:
#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/miscdevice.h>#include <linux/sched.h>#include <linux/delay.h>#include <linux/poll.h>#include <linux/spinlock.h>#include <linux/delay.h>#include <asm/irq.h>#include <asm/hardware.h>#define U32 unsigned int#define U16 unsigned short#define S32 int#define S16 short int#define U8 unsigned char/* I/O PORT */#define PCONF		(*(volatile unsigned *)0x1d20034)#define PDATF		(*(volatile unsigned *)0x1d20038)#define PUPF		(*(volatile unsigned *)0x1d2003c)#define IICCON         (*(volatile unsigned *)0x1d60000)#define IICSTAT        (*(volatile unsigned *)0x1d60004)#define IICADD         (*(volatile unsigned *)0x1d60008)#define IICDS          (*(volatile unsigned *)0x1d6000c)#ifdef CONFIG_DEVFS_FSstatic devfs_handle_t devfs_iic_dir, devfs_iicraw;#endif#define SKQ_IIC_MODULE_NAME     "IICBUS"/*60--63,120--127,240--254*/#define IICBUS_MAJOR    240#define IICBUSRAW_MINOR	1#define IICBUS_INT	INT_IICstatic char *IICBUD_id = "SKQ IICBUS driver v1.0 (2005-06-02)<psc@hualiangtech.com>";/* debug macros */#undef DEBUG//#define DEBUG#ifdef DEBUG#define DPRINTK( x... )	printk("SKQ IICBUS: " ##x)#else#define DPRINTK( x... )#endif#define WRDATA	    (1)#define POLLACK     (2)#define RDDATA	    (3)#define SETRDADDR   (4)#define IICBUFSIZE 2048char IICBUS_Buf[IICBUFSIZE];static int opencount=0;static int tsMajor = 0;static loff_t newpos=0;int WriteFM24CL16(char * buffer, size_t count,int address)	{	unsigned long timeo;	U16 i;	U16 PageAdd;	char slvAddr,tempIICCON,tempIICSTAT;	IICCON=(1<<7)|(0<<6)|(1<<5)|(0xf);	IICSTAT=0x10;		slvAddr=0xa0;	PageAdd=address;	/*發(fā)送起始位和設(shè)備地址和頁地址*/	PageAdd>>=7;	PageAdd&=0x0e;	slvAddr=(char )PageAdd;	slvAddr|=0xa0;	IICDS=slvAddr;//0xa0  	IICSTAT=0xf0; //MasTx,Start	    timeo = jiffies + (HZ/100);  while(1)  	{  	tempIICCON=IICCON;  	tempIICCON&=0x10;	/*pending*/  	tempIICSTAT=IICSTAT;  	tempIICSTAT&=0x01;/*ack*/  	if((tempIICCON==0x10)) break	;//&&(tempIICSTAT==0x00)  	if(time_after(jiffies, timeo))  		{  			IICSTAT=0xd0;   			IICCON=0xaf;  			udelay(200);  			IICCON=0xaf;				IICSTAT=0x10;  			 return -1;  			}  	};  IICCON=0xaf;/*clr pending*/    IICDS=(char )address;//0xa0  timeo = jiffies + (HZ/100);  while(1){  	tempIICCON=IICCON;  	tempIICCON&=0x10;	  	tempIICSTAT=IICSTAT;  	tempIICSTAT&=0x01;  	if((tempIICCON==0x10)) break	;//&&(tempIICSTAT==0x00)  	if(time_after(jiffies, timeo))   		{  			IICSTAT=0xd0;   			IICCON=0xaf;  			udelay(200);  			IICCON=0xaf;				IICSTAT=0x10;  			 return -1;  			}  	};  IICCON=0xaf;    for(i=0;i<count;i++)  	{  	IICDS=buffer[i];  	timeo = jiffies + (HZ/100);  	while(1){  		tempIICCON=IICCON;  		tempIICCON&=0x10;	  		tempIICSTAT=IICSTAT;  		tempIICSTAT&=0x01;  		if((tempIICCON==0x10)&&(tempIICSTAT==0x00)) break	;  		if(time_after(jiffies, timeo))  			{  			IICSTAT=0xd0;   			IICCON=0xaf;  			udelay(200);  			IICCON=0xaf;				IICSTAT=0x10;  			 return -1;  			}  		};  	IICCON=0xaf;/*clr pending*/	  	}  IICSTAT=0xd0;   IICCON=0xaf;  udelay(200);  IICCON=0xaf;IICSTAT=0x10;	return count;			}int ReadFM24CL16(char * buffer, size_t count,int address)	{	unsigned long timeo;	U16 i;	U8 slvAddr,tempIICCON,tempIICSTAT;	U16 PageAdd;	PageAdd=address;	/*發(fā)送起始位和設(shè)備地址和頁地址*/	PageAdd>>=7;	PageAdd&=0x0e;	slvAddr=(char )PageAdd;	slvAddr|=0xa0;	IICDS=slvAddr;//0xa0  IICSTAT=0xf0; //MasTx,Start	  timeo = jiffies + (HZ/100);  while(1){  	tempIICCON=IICCON;  	tempIICCON&=0x10;	  	//tempIICSTAT=rIICSTAT;  	//tempIICSTAT&=0x01;  	if((tempIICCON==0x10)) break	;//&&(tempIICSTAT==0x00)  	if(time_after(jiffies, timeo))  		{  			IICSTAT=0x90;   			IICCON=0xaf;  			udelay(200);  			IICCON=0xaf;				IICSTAT=0x10;				return -1;  		}  	};  IICCON=0xaf;  /*發(fā)送地址低8位*/  IICDS=(char )address;  timeo = jiffies + (HZ/100);  while(1){  	tempIICCON=IICCON;  	tempIICCON&=0x10;	  	tempIICSTAT=IICSTAT;  	tempIICSTAT&=0x01;  	if((tempIICCON==0x10)) break	;//&&(tempIICSTAT==0x00)  	if(time_after(jiffies, timeo))  		{  			IICSTAT=0x90;   			IICCON=0xaf;  			udelay(200);  			IICCON=0xaf;				IICSTAT=0x10;				return -1;  		}  	};  IICCON=0xaf;  //IICSTAT&=0xef;   /*發(fā)送起始位和設(shè)備地址和頁地址*/  PageAdd>>=7;	PageAdd&=0x0e;	slvAddr=(char )PageAdd;	slvAddr|=0xa1;  IICDS=slvAddr;  IICSTAT=0xb0;//MasRx,Start  timeo = jiffies + (HZ/100);  while(1){  	tempIICCON=IICCON;  	tempIICCON&=0x10;	  	tempIICSTAT=IICSTAT;  	tempIICSTAT&=0x01;  	if((tempIICCON==0x10)) break	;//&&(tempIICSTAT==0x00)  	if(time_after(jiffies, timeo))  		{  			IICSTAT=0x90;   			IICCON=0xaf;  			udelay(200);  			IICCON=0xaf;				IICSTAT=0x10;				return -1;  		}  	};  IICCON=0xaf;    for(i=0;i<count;i++)  	{		IICDS=slvAddr;  	//timeo = jiffies + (HZ/100);   while(1){  	tempIICCON=IICCON;  	tempIICCON&=0x10;	  	tempIICSTAT=IICSTAT;  	tempIICSTAT&=0x01;  	if((tempIICCON==0x10)) break	;//&&(tempIICSTAT==0x00)  	//else  	//	{  	//	if((tempIICCON==0x10)&&(i==count-1) ) break	;  	//	}  	if(time_after(jiffies, timeo))  		{  			IICSTAT=0x90;   			IICCON=0xaf;  			udelay(200);  			IICCON=0xaf;				IICSTAT=0x10;				return -1;  		}  	};  buffer[i]=IICDS;	  if(i==count-1) IICCON=0x2f;  else  IICCON=0xaf;	      	}  	  IICSTAT=0x90;   IICCON=0xaf;  udelay(200);  IICCON=0xaf;	IICSTAT=0x10;		return count;			}loff_t IICBUS_llseek(struct file *filp, loff_t off, int whence){            switch(whence) {      case 0: /* SEEK_SET */        newpos = off;        break;      default: /* can't happen */        return -EINVAL;    }    if (newpos<0) return -EINVAL;    return newpos;}	static ssize_t IICBUS_write(struct file *file, const char *buffer, size_t count, loff_t * ppos){		int ret;	int address=(int)newpos;	if(count>2048) return 0;	///copy_from_user(&address, ppos, sizeof(loff_t));	//address=(int )*ppos;	//printk("IICBUS_write address=%ld\n",address);	if(address+count>2048) return 0;	copy_from_user(IICBUS_Buf,buffer, count);	ret=WriteFM24CL16(IICBUS_Buf, count,address);	return ret;}static ssize_t IICBUS_read(struct file *filp, char *buffer, size_t count, loff_t *ppos){		int len;	int address=(int)newpos;	//int address1;	if(count>2048) return 0;	//copy_from_user(&address, ppos, sizeof(loff_t));	//address=(int )*ppos;	//printk("IICBUS_read address=%d\n",address);	if(address+count>2048) return 0;	//address1=(int)*ppos;	//printk("IICBUS_read address1=%ld\n",address);	//printk("IICBUS_read ppos=%ld\n",ppos);	len=ReadFM24CL16(IICBUS_Buf, count,address);	copy_to_user(buffer,IICBUS_Buf,len);	DPRINTK("read data=%d\n", data);	return len;}static int IICBUS_open(struct inode *inode, struct file *file){	//if(opencount==1)	//	return -EBUSY;	opencount++;	MOD_INC_USE_COUNT;	DPRINTK("device open\n");	return 0;}static int IICBUS_release(struct inode *inode, struct file *filp){	opencount--;	MOD_DEC_USE_COUNT;	DPRINTK("device release\n");	return 0;}static struct file_operations s3c44b0_iicbus_fops  = {	owner:	THIS_MODULE,	llseek: IICBUS_llseek,	write:	IICBUS_write,		read:		IICBUS_read,		open:		IICBUS_open,	release:IICBUS_release,};static int __init IICBUS_init(void){	int ret;	int flags;	local_irq_save(flags);	/* Port F */	/*  Bit8	7		6		5		 4		3		2		1		0		*/   	/*  SPICLK	SPIMISO		SPICS		SPIMOSI		INCARD2		NC		NC		IICSDA		IICSCL	*/    	PCONF |=0x0a;	//PF0:IICSCL, PF1:IICSDA    	PUPF |=0x03;	//pull-up disable    	IICCON=(1<<7)|(0<<6)|(0<<5)|(0xf);    	//Enable interrupt, IICCLK=MCLK/16, Enable ACK    	//40Mhz/16/(15+1) = 257Khz	    	IICADD=0x10;   // S3C44B0X slave address    	IICSTAT=0x10;	local_irq_restore(flags);	opencount=0;	ret = register_chrdev(IICBUS_MAJOR, SKQ_IIC_MODULE_NAME, &s3c44b0_iicbus_fops);	if (ret < 0) {	  printk(__FUNCTION__ ": can't get major number\n");        return -1;	}	tsMajor = ret;#if 0	if ( 0 != request_irq(IICBUS_INT, IICBUS_isr ,SA_INTERRUPT,IICBUD_id, NULL))    {	printk(KERN_WARNING "tce44b0_usb: failed to get IRQ\n");	return 1;   }#endif   #ifdef CONFIG_DEVFS_FS	devfs_iic_dir = devfs_mk_dir(NULL, SKQ_IIC_MODULE_NAME, NULL);	devfs_iicraw = devfs_register(devfs_iic_dir, "0", DEVFS_FL_DEFAULT,			tsMajor, IICBUSRAW_MINOR, S_IFCHR | S_IRUSR | S_IWUSR,			&s3c44b0_iicbus_fops , NULL);#endif	printk(SKQ_IIC_MODULE_NAME " initialized\n");	return 0;}static void __exit IICBUS_exit(void){	printk(__FUNCTION__ ": SKQ IIC Exit.\n");  	free_irq(IICBUS_INT,IICBUD_id);	devfs_unregister_chrdev(IICBUS_MAJOR, SKQ_IIC_MODULE_NAME );}module_init(IICBUS_init);module_exit(IICBUS_exit);MODULE_DESCRIPTION("SKQ IIC driver");MODULE_AUTHOR("pengshicao <psc@hualiangtech.com>");MODULE_LICENSE("GPL");                                                                                                                                                                                 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区在线| 亚洲综合色成人| 欧美专区日韩专区| 国产一区二区在线影院| 亚洲乱码中文字幕综合| 26uuu国产电影一区二区| 欧美中文字幕亚洲一区二区va在线 | 国产一区二区三区国产| 一区二区免费在线播放| 久久久99免费| 日韩一级黄色大片| 欧美亚洲一区二区在线| 成人免费高清在线| 国产精品一区一区三区| 日韩av电影免费观看高清完整版 | 99精品视频在线免费观看| 免费成人性网站| 午夜在线成人av| 一区二区三区.www| 一色屋精品亚洲香蕉网站| 精品国内片67194| 日韩一级视频免费观看在线| 日本精品一区二区三区高清 | 中文字幕国产一区| 久久你懂得1024| 欧美mv日韩mv国产网站app| 欧美性猛交xxxx乱大交退制版 | 日本丶国产丶欧美色综合| 国产福利一区二区三区| 久久er99热精品一区二区| 亚洲不卡av一区二区三区| 一区二区日韩电影| 亚洲色图制服诱惑| 亚洲视频狠狠干| 亚洲欧美另类小说| 亚洲特级片在线| 亚洲日本乱码在线观看| 国产精品国产自产拍高清av| 国产精品久久久久久亚洲毛片| 久久久久国产精品麻豆| 26uuu国产在线精品一区二区| 精品国偷自产国产一区| 2021国产精品久久精品| 日韩欧美国产一区二区三区 | 成人18视频日本| 成人ar影院免费观看视频| 成人黄色小视频| 成人福利视频在线看| 99精品欧美一区二区蜜桃免费| 成人国产精品视频| 色综合一区二区| 91福利区一区二区三区| 欧美日韩五月天| 欧美一级一区二区| 久久久综合精品| 国产精品福利av| 亚洲一区二区三区四区的| 午夜精品免费在线| 精品亚洲国产成人av制服丝袜 | 日本不卡一区二区| 精品一区二区三区香蕉蜜桃| 国产盗摄一区二区| 97se亚洲国产综合自在线| 色综合久久久久综合体| 欧美老年两性高潮| 337p粉嫩大胆噜噜噜噜噜91av| 久久综合九色综合欧美亚洲| 国产精品色在线观看| 亚洲午夜精品17c| 久久91精品国产91久久小草| 不卡的av中国片| 欧美日韩一区二区欧美激情 | 国产精品每日更新| 亚洲欧美日韩电影| 奇米色一区二区| 国产精品99久久久久久似苏梦涵| 丁香婷婷综合激情五月色| 99re这里都是精品| 欧美精选午夜久久久乱码6080| 日韩亚洲欧美在线| 综合欧美一区二区三区| 亚洲电影一级黄| 成人综合婷婷国产精品久久免费| 欧美在线看片a免费观看| 欧美视频你懂的| 337p日本欧洲亚洲大胆精品| 一区二区三区国产精品| 精品一区二区三区影院在线午夜| 不卡影院免费观看| 在线综合亚洲欧美在线视频| 中文在线免费一区三区高中清不卡 | 精品国产区一区| 一区二区三区中文字幕电影 | 亚洲国产精品久久人人爱蜜臀| 精品在线免费视频| 欧美写真视频网站| 欧美激情中文字幕一区二区| 亚洲国产日韩精品| 国产高清一区日本| 日韩欧美第一区| 亚洲最大色网站| av成人老司机| 久久精品水蜜桃av综合天堂| 亚洲va欧美va人人爽午夜| av不卡一区二区三区| 26uuu精品一区二区| 日韩中文字幕亚洲一区二区va在线| 成人免费视频一区二区| 日韩女优视频免费观看| 亚洲成人一二三| 91免费看片在线观看| 国产亚洲1区2区3区| 激情五月婷婷综合| 欧美色图在线观看| 亚洲免费三区一区二区| 成人午夜av影视| 国产亚洲综合av| 久久av资源站| 欧美大片拔萝卜| 青青草精品视频| 欧美肥妇毛茸茸| 亚洲aaa精品| 91国产视频在线观看| 日韩美女视频一区| 成人99免费视频| 国产精品福利av | 精品国产乱码久久久久久牛牛 | 韩国欧美国产一区| 91精品综合久久久久久| 午夜精品在线视频一区| 欧美日韩一区视频| 亚洲成av人片在线观看无码| 欧美手机在线视频| 午夜精品福利视频网站| 欧美亚洲国产一区二区三区 | 亚洲国产成人91porn| 欧美三级在线看| 天天综合色天天| 日韩视频一区在线观看| 看国产成人h片视频| 日韩精品最新网址| 韩国女主播一区| 国产日韩欧美麻豆| 本田岬高潮一区二区三区| 国产精品午夜久久| 9色porny自拍视频一区二区| 国产精品久久久久久久久免费丝袜| 成人av免费在线播放| 亚洲激情一二三区| 欧美精品色综合| 老汉av免费一区二区三区| 精品国产百合女同互慰| 国产盗摄视频一区二区三区| 国产精品国产三级国产普通话蜜臀 | 日韩一区二区在线免费观看| 精品无人区卡一卡二卡三乱码免费卡| 欧美精品一区二| 成人午夜电影小说| 亚洲一区二区三区免费视频| 在线观看91精品国产麻豆| 精品在线免费观看| 中文字幕一区二区三区蜜月| 国产精品久久久久久久久快鸭| 99久久婷婷国产综合精品电影 | 欧美激情综合在线| 91国偷自产一区二区三区成为亚洲经典 | av在线一区二区三区| 五月综合激情婷婷六月色窝| 日韩欧美二区三区| av中文字幕一区| 日韩电影在线一区二区三区| 国产丝袜欧美中文另类| 91免费观看在线| 欧美a一区二区| 国产精品蜜臀av| 91国产视频在线观看| 国产一区高清在线| 综合亚洲深深色噜噜狠狠网站| 欧美日韩精品欧美日韩精品一综合| 久久99久久99精品免视看婷婷 | 91精品国产91久久久久久最新毛片| 国产伦精品一区二区三区免费迷| 国产精品视频线看| 欧美一区二区大片| 99国产欧美久久久精品| 青娱乐精品在线视频| 亚洲欧洲无码一区二区三区| 日韩一区二区免费视频| 91在线丨porny丨国产| 免费成人性网站| 亚洲一区二区在线免费观看视频| 欧美videos中文字幕| 91九色最新地址| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲五月六月丁香激情| 久久久亚洲综合| 欧美视频在线一区二区三区| 粉嫩嫩av羞羞动漫久久久| 男女男精品视频| 亚洲一区二区视频|