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

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

?? externrtcdriver.c

?? 在uClinux下的外部實時時鐘讀寫驅動
?? C
字號:
/*================================================================================
 Module Name:   externrtcdriver.c 
 General Description:     
==================================================================================
                        Honeywell Confidential Proprietary             
                  ACS - Security (Asia Pacific) R&D Software Operations             
                  (c) Copyright Honeywell 2006, All Rights Reserved             
 Revision History:          
                   Modification     Tracking    
 Author                 Date        Ver Number     Description of Changes
 ----------------   ------------    ----------   ------------------------- 
 Chen Kang      Date: 2006-7-13   Version: ver 1.0.0  

 
 Portability: Indicate if this module is portable to other compilers or 
 platforms. If not, indicate specific reasons why is it not portable.
 ==================================================================================
                                     INCLUDE FILES                   
 ==================================================================================*/

#include "externrtcdriver.h"
#include "LPC2294.h"

/* ==================================================================================
                                     GLOBAL VARIABLES                   
 ==================================================================================*/

volatile uint8  I2C_sla;           // 從機地址
volatile uint8  I2C_suba;          // 子地址
volatile uint8  *I2C_buf;          // 數據緩沖區指針 (讀操作時會被更改)
volatile uint8  I2C_num;           // 操作數據個數 (會被更改)
volatile uint8  I2C_end;           // 操作結束標志,為1時表示操作結束,為0xFF時表示操作失敗 (會被設置)
volatile uint8  I2C_suba_en;       // 子地址使能控制,讀操作時請設置為1,寫操作時請設置為2 (會被更改)

/* ==================================================================================
                                     LOCAL FUNCTIONS DECLARATIONS                   
 ==================================================================================*/


/* =======================================================
 Function Name:***** RTC_init() *****
 Description:     ***** RTC_init() entry func *****
 Created By:     ***** Chen Kang *****
 Created Date:  ***** 2006-7-13 *****
 Calls:             ***** NONE *****
 Called By:       ***** NONE *****
 normal para:    ***** NONE *****
 pointer para:   ***** NONE *****
 Return type:  ***** int *****
 Others:         ***** NONE *****
 ==========================================================*/
static int RTC_init();

/* =======================================================
 Function Name:***** RTC_read() *****
 Description:     ***** RTC_read() entry func *****
 Created By:     ***** Chen Kang *****
 Created Date:  ***** 2006-7-13 *****
 Calls:             ***** NONE *****
 Called By:       ***** NONE *****
 normal para:    *****  size_t count; *****
 pointer para:   ***** struct file *filp; char *buf;loff_t *f_pos; *****
 Return type:  ***** ssize_t *****
 Others:         ***** NONE *****
 ==========================================================*/
static ssize_t RTC_read(struct file *filp, char *buf, size_t count,loff_t *f_pos);


/* =======================================================
 Function Name:***** RTC_write() *****
 Description:     ***** RTC_write() entry func *****
 Created By:     ***** Chen Kang *****
 Created Date:  ***** 2006-7-13 *****
 Calls:             ***** NONE *****
 Called By:       ***** NONE *****
 normal para:    *****  size_t count; *****
 pointer para:   ***** struct file *filp; char *buf;loff_t *f_pos; *****
 Return type:  ***** ssize_t *****
 Others:         ***** NONE *****
 ==========================================================*/
static ssize_t RTC_write(struct file *filp, char *buf, size_t count,loff_t *f_pos);


/* =======================================================
 Function Name:***** RTC_open() *****
 Description:     ***** RTC_open() entry func *****
 Created By:     ***** Chen Kang *****
 Created Date:  ***** 2006-7-13 *****
 Calls:             ***** NONE *****
 Called By:       ***** NONE *****
 normal para:    ***** NONE *****
 pointer para:   ***** struct inode *inode; struct file *filp; *****
 Return type:  ***** int *****
 Others:         ***** NONE *****
 ==========================================================*/
static int RTC_open(struct inode *inode, struct file *filp);


/* =======================================================
 Function Name:***** RTC_irq_handle() *****
 Description:     ***** RTC_irq_handle() entry func *****
 Created By:     ***** Chen Kang *****
 Created Date:  ***** 2006-7-13 *****
 Calls:             ***** NONE *****
 Called By:       ***** NONE *****
 normal para:    ***** void; *****
 pointer para:   ***** NONE *****
 Return type:  ***** int *****
 Others:         ***** NONE *****
 ==========================================================*/
static int RTC_irq_handle(void);

static struct file_operations RTC_fops =        /* driver info  */
{    
      owner:      THIS_MODULE,
      open:      RTC_open,
      read:      RTC_read,    
      write:      RTC_write,
};

/* =======================================================
 Function Name:***** RTC_init() *****
 Description:     ***** RTC_init() entry func *****
 Created By:     ***** Chen Kang *****
 Created Date:  ***** 2006-7-13 *****
 Calls:             ***** NONE *****
 Called By:       ***** NONE *****
 normal para:    ***** NONE *****
 pointer para:   ***** NONE *****
 Return type:  ***** int *****
 Others:         ***** NONE *****
 ==========================================================*/
static int RTC_init()
{
   int ret;	
   I2SCLH = I2SCLL = 55;            // 晶振為11.0592MHz,Fpclk = 2.7648MHz
   
   /* 設置I2C中斷允許 */
   //VICIntSelect = 0x00000000;		// 設置所有通道為IRQ中斷
   //VICVectCntl0 = 0x29;				// I2C通道分配到IRQ slot 0,即優先級最高
   //VICVectAddr0 = (int)IRQ_I2C;	    // 設置I2C中斷向量地址	
   //VICIntEnable |= 0x0200;           // 使能I2C中斷 
   PINSEL0 &= 0xffffff0f; //set to 0000
   PINSEL0 |= 0x00000050;//set to 0101

   ret = register_chrdev(MAJOR_NR,  DEVICE_NAME,  &RTC_fops);    	
   if (ret < 0)
   {	    	
   	printk(KERN_ERR DEVICE_NAME ":init failed. %d\n", MAJOR_NR);	    	
	return ret;	
   }	    	
   printk(KERN_WARNING DEVICE_NAME ": init OK.\n");
   
   ret = request_irq(LPC22xx_INTERRUPT_I2C,RTC_irq_handle,SA_INTERRUPT,DEVICE_NAME,NULL);    	
   if (ret< 0)    	
   {    				
	printk(KERN_ERR DEVICE_NAME ":request irq failed. \n");    		
	return ret;    	 
   }    	
   printk(KERN_WARNING DEVICE_NAME ": register irq OK.\n");    	
   
   return 0;
}

/* =======================================================
 Function Name:***** RTC_open() *****
 Description:     ***** RTC_open() entry func *****
 Created By:     ***** Chen Kang *****
 Created Date:  ***** 2006-7-13 *****
 Calls:             ***** NONE *****
 Called By:       ***** NONE *****
 normal para:    ***** NONE *****
 pointer para:   ***** struct inode *inode; struct file *filp; *****
 Return type:  ***** int *****
 Others:         ***** NONE *****
 ==========================================================*/
static int RTC_open(struct inode *inode, struct file *filp)
{
    return 0;
}


/* =======================================================
 Function Name:***** RTC_irq_handle() *****
 Description:     ***** RTC_irq_handle() entry func *****
 Created By:     ***** Chen Kang *****
 Created Date:  ***** 2006-7-13 *****
 Calls:             ***** NONE *****
 Called By:       ***** NONE *****
 normal para:    ***** void; *****
 pointer para:   ***** NONE *****
 Return type:  ***** int *****
 Others:         ***** NONE *****
 ==========================================================*/
static int RTC_irq_handle(void)
{
   uint8  sta;
   sta = I2STAT;                    // 讀出I2C狀態字
   
   switch(sta)
   {  
      case  0x08:                   // 己發送起始條件
           if(1==I2C_suba_en)
           {
		    I2DAT = I2C_sla&0xFE;    // 指定子地址讀時,先寫入地址
           }
	     else 
	     {
		 	I2DAT = I2C_sla;                     // 否則直接發送從機地址
	     }
	     I2CONCLR = 0x28;        // SI=0
            break;
            
      case  0x10:
            I2DAT = I2C_sla;        // 重啟動總線后,發送從地址
            I2CONCLR = 0x28;        // SI=0
            break;
   
      case  0x18:                   // 已發送SLA+W,并已接收應答
            if(0==I2C_suba_en)      // 無子地址,則直接發送數據
            {  
               if(I2C_num>0)
               {  
                  I2DAT = *I2C_buf++;
                  I2CONCLR = 0x28; 
                  I2C_num--;
               }
               else
               {  
                  I2CONSET = 0x10;  // 無數據發送,結束總線
                  I2CONCLR = 0x28;
                  I2C_end = 1;      // 設置總線操作結束標志
               }
               break;
            }
            if(1==I2C_suba_en)      // 發送子地址
            {  
               I2DAT = I2C_suba;
               I2CONCLR = 0x28;
            }
            if(2==I2C_suba_en)
            {  
               I2DAT = I2C_suba;
               I2CONCLR = 0x28;
               I2C_suba_en = 0;     // 子地址己處理
            }
            break;
            
      case  0x28:                   // 已發送I2C數據,并接收到應答
            if(0==I2C_suba_en)      // 無子地址,則直接發送數據
            {  
               if(I2C_num>0)
               {  
                  I2DAT = *I2C_buf++;
                  I2CONCLR = 0x28; 
                  I2C_num--;
               }
               else
               {  
                  I2CONSET = 0x10;  // 無數據發送,結束總線
                  I2CONCLR = 0x28;
                  I2C_end = 1; 
               }
               break;
            }
            if(1==I2C_suba_en)      // 若是指定地址讀,則重新啟動總線
            {  
               I2CONSET = 0x20;
               I2CONCLR = 0x08;
               I2C_suba_en = 0;     // 子地址己處理
            }
            break;
   
   
      case  0x20:
      case  0x30:
      case  0x38:
            I2CONCLR = 0x28;        // 總線進入不可尋址從模式
            I2C_end = 0xFF;         // 總線出錯,設置標志
            break;
   
   
      case  0x40:                   // 己發送SLA+R,并已接收到應答
            if(1==I2C_num)          // 最后一字節,接收數據后發送非應答信號
            {  
                I2CONCLR = 0x2C;     // AA=0,接收到數據后產生非應答
            }
            else                    // 接收數據并發送應答信號
            {  
               I2CONSET = 0x04;     // AA=1,接收到數據后產生應答
               I2CONCLR = 0x28;
            }
            break;
            
      case  0x50:
            *I2C_buf++ = I2DAT;     // 讀取數據
            I2C_num--;
            if(1==I2C_num)
            {  
                I2CONCLR = 0x2C;     // AA=0,接收到數據后產生非應答
            }
            else
            {   
                I2CONSET = 0x04;     // AA=1,接收到數據后產生應答
                I2CONCLR = 0x28;
            }
            break;
      
      case  0x58:
            *I2C_buf++ = I2DAT;     // 讀取最后一字節數據
            I2CONSET = 0x10;        // 結束總線
            I2CONCLR = 0x28;
            I2C_end = 1; 
            break;
      
      case  0x48:
            I2CONCLR = 0x28;        // 總線進入不可尋址從模式
            I2C_end = 0xFF; 
            break;
            
      default: 
            break;
   }
   VICVectAddr = 0x00;              // 中斷處理結束
  
   return(1);
}


/* =======================================================
 Function Name:***** RTC_read() *****
 Description:     ***** RTC_read() entry func *****
 Created By:     ***** Chen Kang *****
 Created Date:  ***** 2006-7-13 *****
 Calls:             ***** NONE *****
 Called By:       ***** NONE *****
 normal para:    *****  size_t count; *****
 pointer para:   ***** struct file *filp; char *buf;loff_t *f_pos; *****
 Return type:  ***** ssize_t *****
 Others:         ***** NONE *****
 ==========================================================*/
static ssize_t RTC_read(struct file *filp, char *buf, size_t count,loff_t *f_pos)
{ 
   /* 參數設置 */
   
   I2C_sla = CSI24WC02+1;
   I2C_suba = 0x02;
   I2C_buf = buf;
   I2C_num = count;
   I2C_suba_en = 1;
   I2C_end = 0;
   
   I2CONCLR = 0x2C;
   I2CONSET = 0x60;             // 設置為主機,并啟動總線
   
   while(1)
   {
       if(1==I2C_end)
       { 
           return(0);
       }
   }    
}


/* =======================================================
 Function Name:***** RTC_write() *****
 Description:     ***** RTC_write() entry func *****
 Created By:     ***** Chen Kang *****
 Created Date:  ***** 2006-7-13 *****
 Calls:             ***** NONE *****
 Called By:       ***** NONE *****
 normal para:    *****  size_t count; *****
 pointer para:   ***** struct file *filp; char *buf;loff_t *f_pos; *****
 Return type:  ***** ssize_t *****
 Others:         ***** NONE *****
 ==========================================================*/
static ssize_t RTC_write(struct file *filp, char *buf, size_t count,loff_t *f_pos)
{
   I2C_sla = CSI24WC02;
   I2C_suba = 0x02;
   I2C_buf = buf;
   I2C_num = count;
   I2C_suba_en = 2;
   I2C_end = 0;
   
   I2CONCLR = 0x2C;
   I2CONSET = 0x60;             // 設置為主機,并啟動總線
   
   while(1)
   {
       if(1==I2C_end)
       { 
           return(0);
       }
   }    
}

module_init(RTC_init);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美经典一区二区三区| 欧美日韩一二三区| 午夜影院久久久| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲一区二区三区不卡国产欧美| 欧美日韩你懂得| 岛国av在线一区| 偷拍自拍另类欧美| 国产精品亲子乱子伦xxxx裸| 欧美亚洲免费在线一区| 国产在线不卡一卡二卡三卡四卡| ...中文天堂在线一区| 91精品国产色综合久久不卡电影| 99久久久国产精品| 美女视频网站久久| 日韩电影免费在线| 一区二区久久久久久| 亚洲精品在线观看网站| 欧美日韩另类一区| 欧美性猛交一区二区三区精品| 国产99久久久国产精品潘金网站| 久久99国产精品久久99果冻传媒| 亚洲精品日韩综合观看成人91| 久久美女高清视频| 精品日韩一区二区三区免费视频| 欧美一区二区二区| 日韩午夜在线播放| 精品久久久久久久人人人人传媒 | 日日夜夜精品视频天天综合网| 久久五月婷婷丁香社区| 精品人伦一区二区色婷婷| 精品国产免费一区二区三区四区| 欧美喷水一区二区| 欧美一区二区三区成人| 日韩美女在线视频| 欧美mv日韩mv| 中文在线一区二区| 亚洲欧美视频在线观看视频| 综合久久久久久久| 亚洲高清在线视频| 国产日韩欧美a| 日韩免费观看高清完整版| 欧美大片免费久久精品三p| 26uuu色噜噜精品一区| 久久这里只有精品视频网| 国产精品电影院| 日欧美一区二区| 国产精品夜夜嗨| 日本韩国欧美三级| 欧美成人国产一区二区| 国产精品国产三级国产aⅴ原创 | 国产mv日韩mv欧美| 欧美日韩一区二区三区四区| 日韩一区二区三| 日韩美女啊v在线免费观看| 亚洲大型综合色站| 成人avav影音| 久久老女人爱爱| 亚洲色图欧美偷拍| 国产精品亚洲а∨天堂免在线| 91免费版在线| 久久久久久久久久久电影| 午夜精品123| 欧美综合视频在线观看| 欧美激情一区二区三区全黄| 日韩二区在线观看| 91久久精品一区二区二区| 久久久久久久久一| 奇米777欧美一区二区| 日本丶国产丶欧美色综合| 久久综合色播五月| 日本美女一区二区| 色欧美乱欧美15图片| 国产精品美女久久久久aⅴ国产馆| 奇米色777欧美一区二区| 欧美日韩国产片| 午夜精品一区二区三区免费视频 | 日韩美女在线视频| 免费成人美女在线观看| 91麻豆精品国产91久久久使用方法 | 亚洲福利一二三区| 欧美日韩国产综合视频在线观看| 亚洲精品日韩专区silk| 色综合天天综合狠狠| 一区二区三区免费| 欧美日韩黄色影视| 日本中文在线一区| 欧美成人精精品一区二区频| 久久精品免费观看| 欧美国产一区二区| 欧美三级日本三级少妇99| 性感美女久久精品| 欧美另类高清zo欧美| 国内成+人亚洲+欧美+综合在线| 精品国产乱码久久久久久免费 | 欧美日韩在线亚洲一区蜜芽| 亚洲大片在线观看| 国产精品区一区二区三| 欧美午夜电影在线播放| 午夜精品国产更新| 亚洲午夜在线观看视频在线| 91久久精品一区二区二区| 午夜精品免费在线观看| 精品美女一区二区三区| 91在线看国产| 美女脱光内衣内裤视频久久影院| 久久久久久久久久久久久女国产乱 | 国产suv精品一区二区三区| 亚洲欧美日韩中文播放| 精品伦理精品一区| 欧美日韩精品一区二区三区 | 天堂va蜜桃一区二区三区漫画版| 久久综合色之久久综合| 777久久久精品| 日本久久一区二区| 国产精品 欧美精品| 麻豆国产91在线播放| 亚洲一区二区欧美激情| 1000精品久久久久久久久| 欧美成人video| 欧美精品v日韩精品v韩国精品v| 成人av网站在线观看| 国产麻豆视频精品| 久久精品国产**网站演员| 亚洲国产综合色| 亚洲另类色综合网站| 亚洲人吸女人奶水| 国产精品国产成人国产三级 | 97成人超碰视| 成人免费看视频| 加勒比av一区二区| 国产综合色产在线精品| 国产高清久久久| 9久草视频在线视频精品| 99国产精品视频免费观看| 99精品视频一区二区三区| 一本一本久久a久久精品综合麻豆| 99视频超级精品| 91免费在线播放| 欧美日韩免费电影| 欧美一区二区精品久久911| 精品国产成人系列| 精品国产1区二区| 国产目拍亚洲精品99久久精品| 国产亚洲精品aa午夜观看| 亚洲天堂2014| 日韩一区精品视频| 激情五月播播久久久精品| 蜜桃一区二区三区四区| 国产乱妇无码大片在线观看| 99免费精品视频| 欧美午夜一区二区| 精品国产乱码久久久久久闺蜜| 日本一区二区三区四区| 国产视频一区二区在线| 亚洲一区在线观看免费| 日本成人中文字幕| 成人激情动漫在线观看| 欧美视频三区在线播放| 久久免费视频色| 伊人性伊人情综合网| 国产精品中文欧美| 欧美日韩成人高清| 一区二区国产视频| 岛国精品在线播放| 精品国产一区二区三区久久久蜜月 | 久久久精品日韩欧美| 亚洲自拍都市欧美小说| 国产永久精品大片wwwapp | 激情深爱一区二区| 在线观看91av| 亚洲精品乱码久久久久久| 成人小视频在线| 精品国产电影一区二区| 丝袜a∨在线一区二区三区不卡| 色天天综合久久久久综合片| 国产精品成人免费精品自在线观看| 韩国v欧美v日本v亚洲v| 欧美一级欧美三级| 欧美96一区二区免费视频| 色婷婷国产精品久久包臀 | 天堂蜜桃91精品| 欧美日韩www| 男人的天堂久久精品| 精品久久久久久久久久久久久久久久久| 亚洲成人免费av| 欧美日韩在线播放三区四区| 亚洲三级在线免费| 欧美性猛片aaaaaaa做受| 亚洲国产cao| 日韩精品在线一区二区| 国产一区二区不卡在线| 亚洲欧美在线高清| 欧美日韩国产在线播放网站| 日韩精品一二三区| 久久一区二区三区四区| 粉嫩一区二区三区在线看| 亚洲女同ⅹxx女同tv| 91精品欧美福利在线观看 | 日本不卡一二三|