亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
免费在线观看精品| 在线观看成人小视频| 3751色影院一区二区三区| 亚洲精品国产无天堂网2021 | 8x8x8国产精品| 亚洲欧美一区二区三区极速播放 | 成人av综合在线| 日韩欧美自拍偷拍| 伦理电影国产精品| 欧美日韩一区二区在线观看 | 一本久道中文字幕精品亚洲嫩| 国产日产欧美一区| 成人精品国产福利| 亚洲天堂成人在线观看| 色婷婷综合久久久久中文一区二区| 欧美激情综合五月色丁香| 99热在这里有精品免费| 亚洲午夜av在线| 精品国产一区二区三区忘忧草 | 最新国产の精品合集bt伙计| 高清免费成人av| 亚洲免费观看高清完整版在线| 欧洲人成人精品| 国内精品伊人久久久久影院对白| 久久免费午夜影院| 在线观看精品一区| 国产精品一品视频| 亚洲综合在线视频| 日韩欧美视频一区| 色综合咪咪久久| 久久精品999| 亚洲精品自拍动漫在线| 欧美一卡二卡三卡四卡| 大尺度一区二区| 午夜精品123| 1区2区3区欧美| 欧美一级日韩一级| 91一区在线观看| 精品制服美女久久| 亚洲成人av福利| 国产精品美女一区二区在线观看| 99精品久久久久久| 国产一区二区三区四| 亚洲国产欧美日韩另类综合| 2021久久国产精品不只是精品| k8久久久一区二区三区| 亚洲国产成人av好男人在线观看| 欧美精品一区二区三区四区| 色噜噜夜夜夜综合网| 午夜精品久久久久久久| 国产精品久久久久婷婷二区次| 欧美男男青年gay1069videost| 国产一区二区网址| 一区二区三区 在线观看视频| 国产视频不卡一区| 欧美性猛交xxxx乱大交退制版| 日本中文在线一区| 亚洲综合精品自拍| 亚洲综合999| 国产欧美综合在线观看第十页| 欧美一区日本一区韩国一区| 99国产精品视频免费观看| 丁香六月久久综合狠狠色| 国产精品久线观看视频| 精品处破学生在线二十三| 欧美在线播放高清精品| 国产成人在线视频网址| 日韩电影免费一区| 欧美韩日一区二区三区四区| 自拍偷在线精品自拍偷无码专区| 国产日韩v精品一区二区| 亚洲午夜久久久久久久久电影院 | 色久综合一二码| 欧美丝袜自拍制服另类| 精品第一国产综合精品aⅴ| 精品电影一区二区三区| 国产精品久久久久久户外露出 | 成人免费毛片aaaaa**| 日日欢夜夜爽一区| 久久视频一区二区| 久久嫩草精品久久久精品一| 日韩一区二区视频在线观看| 日韩三级视频中文字幕| 粉嫩av一区二区三区在线播放| 国产乱码精品一区二区三| 久久国产精品色婷婷| 国产91丝袜在线观看| 精品亚洲国内自在自线福利| 成人黄色大片在线观看| 91网址在线看| 色呦呦国产精品| 91麻豆.com| 成人动漫一区二区三区| 久久福利视频一区二区| 国产精品一区二区久久精品爱涩| 精品一区二区免费视频| 美女脱光内衣内裤视频久久影院| 亚洲福利视频一区| 国产福利电影一区二区三区| 日韩理论片在线| 国产91对白在线观看九色| 在线观看日韩精品| 日韩欧美国产一区在线观看| 久久一留热品黄| 成人免费在线视频观看| 日韩综合小视频| 久久国产日韩欧美精品| 欧美午夜精品电影| 精品国产1区2区3区| 精品国产污污免费网站入口 | 欧美浪妇xxxx高跟鞋交| 亚洲欧洲在线观看av| 手机精品视频在线观看| 欧美一级艳片视频免费观看| 五月婷婷色综合| 日韩美女视频在线| 日韩av一级片| 亚洲精品在线观看网站| 国产欧美一区二区在线| 青青草成人在线观看| 欧美日韩成人综合天天影院 | 国产亚洲欧洲一区高清在线观看| 国产亚洲福利社区一区| 成人白浆超碰人人人人| proumb性欧美在线观看| 亚洲午夜激情av| 91免费国产在线观看| 亚洲精品久久7777| 午夜激情久久久| 日韩欧美国产综合一区| 美女视频一区二区| 欧美成人r级一区二区三区| 亚洲日本丝袜连裤袜办公室| 91极品美女在线| 偷偷要91色婷婷| 久久久久久久综合狠狠综合| 亚洲综合精品久久| 精品捆绑美女sm三区| 亚洲精品午夜久久久| 欧美国产国产综合| 欧洲激情一区二区| 美腿丝袜在线亚洲一区| 一本一道久久a久久精品| 午夜在线电影亚洲一区| 日韩免费高清视频| 久久精品国产在热久久| 欧美一区二区精品| 欧美精品v日韩精品v韩国精品v| 亚洲乱码精品一二三四区日韩在线| 99久久精品免费看国产| 美女看a上一区| 国产午夜精品久久久久久久| 国产福利一区二区三区视频| 亚洲三级免费观看| 94-欧美-setu| 美女性感视频久久| 亚洲不卡一区二区三区| 在线观看日韩电影| 精一区二区三区| 肉丝袜脚交视频一区二区| ...xxx性欧美| 在线观看日韩av先锋影音电影院| 懂色av一区二区夜夜嗨| 天堂资源在线中文精品| 日韩欧美专区在线| 国产成人精品亚洲日本在线桃色| 国产欧美日韩另类视频免费观看| 欧美mv日韩mv| 中文字幕免费观看一区| 欧美日韩综合不卡| 91香蕉视频在线| 色综合久久综合网欧美综合网 | 91精品国产一区二区三区香蕉 | 亚洲久草在线视频| 亚洲一区二区不卡免费| 午夜成人免费电影| 国产成人av电影| 国产精品一区二区你懂的| 成人亚洲一区二区一| 成人免费va视频| 欧美日韩成人激情| jlzzjlzz亚洲日本少妇| 正在播放亚洲一区| 欧美日韩国产高清一区二区三区 | 欧美日韩国产综合久久| 欧美日韩色一区| 欧美一区二区三区四区视频| 在线观看中文字幕不卡| 欧美男生操女生| 久久久国产精华| 欧美激情一区二区三区蜜桃视频| 亚洲成人一区二区在线观看| 国产一区二区三区视频在线播放| 久久爱另类一区二区小说| 国产精品1区2区| 成人午夜看片网址| 国产精品婷婷午夜在线观看| 亚洲亚洲精品在线观看| 美女视频网站黄色亚洲| 欧美一区二区精品久久911|