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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? i2c_final_ok_080804_pass1sttest.c.bak

?? 應用于S3C2440芯片的I2C設備驅動程序
?? BAK
?? 第 1 頁 / 共 2 頁
字號:
/* *********I2c Driver Test Program***************************************
 Program Name:IIC Driver Test Program
 Function:test IIC based MCU writing & reading function
 Designer:Donglei (ICL of Peking Uni.)
 Description:Not using kernel's driver,new driver for MCU read operation test
 Edition:2.0  8_5_08 Moring 
 Problem:
 In addition:
 ***************************************************************************/
#include <linux/mm.h>#include <linux/config.h>
#include <linux/spinlock.h>#include <linux/miscdevice.h>#include <linux/delay.h>
#include <asm/uaccess.h>#include <linux/slab.h>#include <linux/clocks.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/poll.h>
#include <linux/wait.h>
#include <asm/io.h>
#include <linux/interrupt.h>
#include <linux/sched.h>#include <asm/irq.h>
#include <asm/arch/irqs.h>#define bWTCOM(Nb)               __REG(0x53000000+(Nb))
#define WTCON                   bWTCON(0)
#define WTDAT                   bWTCON(4)
#define WTCTN                   bWTCON(8) 
#define VA_IIC_BASE		  io_p2v(0x54000000)
#define S3C_IICCON  	          (VA_IIC_BASE + 0x0)
#define S3C_IICSTAT       	  (VA_IIC_BASE + 0x4)
#define S3C_IICADD        	  (VA_IIC_BASE + 0x8)
#define S3C_IICDS                 (VA_IIC_BASE + 0xc)

#define __REG_B(x)               (*(volatile unsigned char *)(x))
#define IICCON			__REG_B(VA_IIC_BASE + 0x0)
#define IICSTAT			__REG_B(VA_IIC_BASE + 0x4)
#define IICADD			__REG_B(VA_IIC_BASE + 0x8)
#define IICDS			__REG_B(VA_IIC_BASE + 0xc)
#define S3C_IICLC                 (VA_IIC_BASE + 0x10)
#define IICLC			__REG_B(VA_IIC_BASE + 0x10)
#define DEVICE_NAME          "i2c_test"
#define POLLACK     0       //Test ACK signal received or not
#define SETRDADDR   3 #define UNIT         (1000*1000)   //clock transunit define for PCLK
#define HIGHSCALE     0x40      //PCLK's 512 prescale for IICCLK set
#define LOWSCALE      0x00      //PCLK's 16 prescale for IICCLK set

static volatile unsigned long PCLK;   //PC clock
static volatile int iicMode;//Operation mode select flag
static volatile int iicStatus;//IIC status flag
static volatile int NoAckF;//ACK signal get flag
static volatile int iicDataCount;//Data trans Number
static volatile int iicRDTransNum;//The data number of READ transforation
static volatile int iicWRTransNum;//The data number of WRITE transforation
static volatile int delayLoopCount; //for the Delay() function
static volatile int writedataF;    //Write data start flag
static volatile int readdataF;     //Read data start flag

__u16 SaveGPECON;    //For GPECON register save 
__u16 SaveGPEUP;     //For GPEUP register save
__u8 slaveAddr;             //Slave device address
__u8 SCALE_Base;         //Prescale for IICCLK base number
__u8 ConSet;             //The Backup of IICCON set
char *page;                  //IIC device Data buffer
static int IIC_test_open(struct inode *inode,struct file *filp)
{
MOD_INC_USE_COUNT;
return 0;
}
static int IIC_test_release(struct inode *inode,struct file *filp)
{
MOD_DEC_USE_COUNT;
return 0;
}/****************************Delay Function**********************************************/
void Delay(int time)
{
      	// time=0: adjust the Delay function by WatchDog timer.
      	// time>0: the number of loop time
      	// resolution of time is 100us.
 	int i, adjust=0;

    	if(time==0)
    	{
       	time   = 200;
        adjust = 1;
        delayLoopCount = 800;

         //PCLK/1M,Watch-dog disable,1/64,interrupt disable,reset disable
        	WTCON = ((PCLK/1000000-1)<<8)|(2<<3); 
        	WTDAT = 0xffff;                              //for first update
        	WTCNT = 0xffff;                              //resolution=64us @any PCLK 
		WTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); //Watch-dog timer start
    	}

    	for(;time>0;time--)
       	for(i=0;i<delayLoopCount;i++);

    	if(adjust==1)
    	{
        	WTCON = ((PCLK/1000000-1)<<8)|(2<<3); //Watch-dog timer stop
        	i = 0xffff - WTCNT;                     //1count->64us, 200*800 cycle runtime = 64*i us

        	delayLoopCount = 16000000/(i*64);         //200*800:64*i=1*x:100 -> x=160000*100/(64*i)   
    	}
    		
}
/****************************i2c bus release(for MasRx & MasTx mode)**********************************/
void ReleaseRXBus(void)
{    IICSTAT=0x90; 
    Delay(1);                        //Wait until stop condtion is in effect.
    //GPECON=SaveGPECON;                 
    //GPEUP=SaveGPEUP;
}
void ReleaseTXBus(void)
{    IICSTAT=0xd0;
    Delay(1);                        //Wait until stop condtion is in effect.
    //GPECON=SaveGPECON;
    //GPEUP=SaveGPEUP;
}

/****************************IRQ serve segment********************************/
static void i2c_isr(int irq,void *dev_id, struct pt_regs *regs)
{    __u32 delayF;
    __u32 iicSt;    int i;
    INTMSK=INTMSK|(0x01<<27);            //Disable IIC interrupts,when ioctl cmd takes effect mask set to 0
    iicSt   = IICSTAT; //When some errors happen wait until the stop condition takes effect
    
    if(iicSt & 0x1)    
    {           NoAckF=1;             //When ACK isn't received
       if((writedataF==1)||(readdataF==1))       
      { 
        NoAckF=0;       }      
    }   
    if(iicMode==POLLACK)            //if interrupt polled out the ack signal the operation will stop test,then into the send data step
           {
           	 if(NoAckF)
            { 
            	 NoAckF =0;
            }        
            else
            {
                 iicStatus = 1;    
            }
          }   
      SRCPND=SRCPND&~(0x1<<27);     //clear pending
      INTPND=INTPND&~(0x1<<27);
      INTMSK = INTMSK&~(0x1<<27);  //open IIC Interrupt
 }
/****************************Initialization segment******************************************************/
static int i2c_Initialization(void) 
{     
	 int ret;   int i;
	 NoAckF = 0;	 writedataF=0;
	 readdataF=0;	/*field protection has fetal problem.If add following 2 statments, system can't wake up the second interrupt. I don't know why.          It needs consideration & experiment*/
	 //SaveGPECON = GPECON;                 //Save the GPE pin settment
         //SaveGPEUP  = GPEUP;                  //Save the GPE pin statment         SRCPND = SRCPND&~(0x01<<27);
	 INTPND = INTPND&~(0x01<<27);
	 INTPND ;
	 INTMSK = INTMSK&~(0x01<<27);
	 free_irq(IRQ_IIC,NULL);         
	    Delay(1);
    	ret = request_irq(IRQ_IIC, i2c_isr, SA_INTERRUPT, "i2c_test", NULL);
        if (ret) 
        {
          printk (KERN_ERR "i2c_test: IRQ %d is already in use.\n",IRQ_IIC);
        }        
        printk("i2c_isr is set!\n");                PCLK=elfin_get_bus_clk(GET_PCLK);        PCLK/=UNIT;                printk("%03ld Mhz\n",PCLK);        
        GPEUP  |= 0xc000;                  //Pull-up disable
        GPECON |= 0xa00000;                //GPE15:IICSDA , GPE14:IICSCL
        
         /**Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
           If PCLK 50.7MHz, IICCLK = 3.17MHz, Tx Clock = 0.198MHz**/
        IICCON = (1<<7) | (1<<5) | (0xf)|SCALE_Base;	//prescaler 16 TCV set
        ConSet=IICCON;
        IICSTAT = 0x10;                    //IIC bus data output enable(Rx/Tx); clear status flag
        IICADD	= 0x00;		           //IIC Master address
        IICLC  = (1<<2)|(1);  	           // Filter enable, 15 clocks SDA output delay
        IICDS = 0x00;	
    printk("Initialized!\n") ;
    return 0;
   
}
/*****************************Read system call for i2c_test*****************************************/
static int i2c_test_read(struct file *filp, const char *buf,size_t count,loff_t *ppos)
{
     int i,j,n;
    __u32 k,m;
    k=0;
    m=0;
    n=0;                              
     iicStatus = 0;
     iicMode = POLLACK;  
     i2c_Initialization();              //Initialization for i2c bus operation
     iicDataCount = 1;
     IICSTAT =0x90;                    //Set MasRx Mode
     IICDS   = slaveAddr;
     IICSTAT = 0xb0;                    //MasTx,Start  
      //Clearing the pending bit isn't needed because the pending bit has been cleared.
     while(iicStatus!=1)   {
     	      if(m==400000)
         {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合久久综合久久| 国产精品私人自拍| jizz一区二区| 视频一区视频二区在线观看| 国产精品久久久久久久久果冻传媒| 欧美三日本三级三级在线播放| 国产精品中文字幕日韩精品| 亚洲妇女屁股眼交7| 国产精品久久久久影院亚瑟 | 不卡一区二区三区四区| 亚洲一区二区三区视频在线播放| 久久久久久免费| 欧美一区午夜视频在线观看| 日本乱人伦aⅴ精品| 成人国产亚洲欧美成人综合网 | 国产一区二区福利| 亚洲成人tv网| 亚洲一区二区三区小说| 亚洲大片免费看| 国产精品二三区| 国产无人区一区二区三区| 日韩欧美卡一卡二| 91精品国产全国免费观看| 91福利国产精品| 99国产精品久久久久久久久久| 国产乱人伦精品一区二区在线观看| 午夜精品一区二区三区免费视频| 亚洲精品中文在线影院| ●精品国产综合乱码久久久久| 久久久影视传媒| 欧美大片在线观看一区| 日韩精品影音先锋| 精品日韩av一区二区| 精品日韩一区二区三区| 日韩三级免费观看| 91精品国产91久久综合桃花| 欧美高清www午色夜在线视频| 欧美日韩一区二区三区高清| 欧美在线色视频| 欧美日韩精品三区| 欧美一区二区三区四区视频| 91精品国产欧美一区二区成人 | 日韩久久久久久| 日韩一区二区三区三四区视频在线观看| 欧美日韩在线播| 欧美美女一区二区在线观看| 91精品在线观看入口| 日韩一区二区精品在线观看| 精品久久人人做人人爽| 国产日韩欧美综合一区| 欧美国产精品一区二区| 亚洲色图视频免费播放| 亚洲午夜成aⅴ人片| 亚洲成精国产精品女| 奇米影视一区二区三区小说| 99热国产精品| 色爱区综合激月婷婷| 欧美猛男gaygay网站| 日韩久久久精品| 中文字幕av一区二区三区| 亚洲欧美国产高清| 日韩av一区二区在线影视| 精品一区精品二区高清| 成人网男人的天堂| 欧美丝袜丝nylons| 2020国产精品自拍| 成人欧美一区二区三区1314| 亚洲va韩国va欧美va| 国产在线视频一区二区| av一区二区不卡| 欧美一区二区精品在线| 久久久久久久久岛国免费| 亚洲视频一二三| 看片网站欧美日韩| 成人国产亚洲欧美成人综合网| 欧美午夜视频网站| 久久久精品日韩欧美| 亚洲乱码国产乱码精品精的特点 | 国产真实精品久久二三区| 91网站视频在线观看| 538在线一区二区精品国产| 国产午夜精品一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 精品一区免费av| 欧美亚洲另类激情小说| 国产午夜精品久久久久久久 | 91尤物视频在线观看| 日韩欧美自拍偷拍| 亚洲人吸女人奶水| 国产一区二区三区国产| 欧美日韩中文精品| 天天操天天色综合| aa级大片欧美| 久久久亚洲精华液精华液精华液 | 国产宾馆实践打屁股91| 精品视频一区二区不卡| 国产精品久99| 激情成人午夜视频| 91精选在线观看| 亚洲综合久久久久| av中文字幕一区| 久久综合九色综合97婷婷| 亚洲不卡av一区二区三区| 99精品视频一区| 中文字幕国产精品一区二区| 精品影视av免费| 日韩一区二区三区视频在线观看| 亚洲精品大片www| 成人avav在线| 亚洲国产经典视频| 国产美女在线观看一区| 日韩欧美一二区| 琪琪久久久久日韩精品| 欧美日韩国产bt| 亚洲午夜免费视频| 在线观看免费一区| 亚洲精品视频观看| av影院午夜一区| 国产精品久久久久一区| 国产大片一区二区| 久久久午夜电影| 麻豆精品国产91久久久久久| 欧美剧情电影在线观看完整版免费励志电影 | 国产色综合一区| 精品一区二区三区在线播放视频| 91精品国产aⅴ一区二区| 婷婷国产在线综合| 777午夜精品免费视频| 香港成人在线视频| 欧美一区二区三区视频| 日本麻豆一区二区三区视频| 欧美一区二区三级| 乱中年女人伦av一区二区| 日韩一区二区三区电影| 美女视频黄免费的久久 | 国产福利一区二区三区视频| 久久午夜色播影院免费高清| 国产一区二区导航在线播放| 国产日产欧美一区二区视频| 国产精品1区2区| 亚洲欧洲av在线| 一本久道中文字幕精品亚洲嫩| 亚洲欧美一区二区三区极速播放 | 国产精品久久久久7777按摩| 不卡视频一二三| 亚洲综合偷拍欧美一区色| 欧美日韩一级视频| 久久精品国产**网站演员| 久久精品一区二区三区不卡牛牛 | 国产盗摄一区二区| 亚洲欧美综合网| 色哟哟一区二区| 亚洲国产cao| 欧美sm极限捆绑bd| 国产aⅴ精品一区二区三区色成熟| 中文欧美字幕免费| 欧洲亚洲精品在线| 美女高潮久久久| 国产精品第四页| 欧美日韩久久一区| 狠狠久久亚洲欧美| 日韩码欧中文字| 制服丝袜国产精品| 国产福利视频一区二区三区| 亚洲欧美成aⅴ人在线观看| 884aa四虎影成人精品一区| 国产精品原创巨作av| 伊人色综合久久天天| 欧美不卡激情三级在线观看| 99视频有精品| 日日夜夜精品视频免费| 国产欧美一区二区精品性色| 日本黄色一区二区| 久草在线在线精品观看| 亚洲人成人一区二区在线观看| 91精品国产一区二区三区蜜臀| 国产91露脸合集magnet| 亚洲一区二区视频在线观看| 欧美mv和日韩mv国产网站| 91一区二区在线| 久久精品国产精品亚洲精品| 亚洲美女电影在线| 欧美tickle裸体挠脚心vk| 一本到一区二区三区| 国产一区啦啦啦在线观看| 亚洲激情校园春色| 国产日韩精品一区二区三区在线| 欧美色图天堂网| www..com久久爱| 老司机一区二区| 亚洲成人av一区二区| 国产精品久久久一本精品| 欧美成人精品二区三区99精品| 91浏览器打开| 成人黄色777网| 久久精品国产久精国产| 五月激情丁香一区二区三区| 乱中年女人伦av一区二区| 一区二区三区免费看视频| 国产亚洲午夜高清国产拍精品 |