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

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

?? i2c.c

?? ARM9的ZLG7290的模塊 在液晶上顯示數字
?? C
字號:
/******************************************************************************************************
** File Name: I2C.c
** Description: S3C2410的I2C軟件包
**              查詢控制方式
********************************************************************************************************/
#define  IN_I2C
#include  "config.h"

// I2C總線設置宏定義
#define	  IICCON_DACK		((1<<7) | (1<<6) | (1<<5) | (3<<0))	/* 使能ACK位,IICCLK=PCLK/512=97656 */
#define	  IICCON_DNACK		((0<<7) | (1<<6) | (1<<5) | (3<<0))	/* 中斷使能(這樣才能正確操作I2C) */



/*********************************************************************************************************
** Function name: InitI2C
** Descriptions: 初始化總線 (100KHz總線速率)
**               設FCLK=200MHz,HCLK=100MHz,PCLK=50MHz。
** Input: 無
** Output: 無
********************************************************************************************************/
void  InitI2C(void)
{  	
    // 設置管腳連接  
    rGPECON = (rGPECON & 0x0FFFFFFF) | 0xA0000000;	// 設置I2C口使能
    rGPEUP = rGPEUP | 0xC000;		// 禁止內部上拉電阻           
       
    // 設置I2C控制寄存器 (使能ACK位時才能接收從機的應答位)
    rIICCON = IICCON_DACK;          
    
    // 設置I2C為主機模式
    rIICSTAT = (3<<6)|(1<<4); 
    
    // 從機地址 (作主機時沒有用)
    rIICADD = 0x10;         
}



/*********************************************************************************************************
** Function name: START_I2C
** Descriptions: 啟動總線,發送從機地址,并發送從機地址
** Input: sla		從機動地址
** Output: 操作成功返回TRUE,仲載失敗/無從機應答返回FALSE
** Note: sla位最低位為讀寫控制位
********************************************************************************************************/
int  StartI2C(uint8 sla)
{	
    uint32  i;	

	rIICDS = sla;		// 設置從機地址				
	if(sla&0x01)
	{	
	    rIICSTAT = (2<<6)|(1<<5)|(1<<4);	// 主接收模式,發送使能,啟動總線
		rIICCON = IICCON_DACK;				// 若是重啟總線,則需要有此操作
    }
    else
    {	
        rIICSTAT = (3<<6)|(1<<5)|(1<<4);	// 主發送模式,發送使能,啟動總線 
    }
      
    // 等待操作完成
    while((rIICCON&0x10) == 0);    
    
    // 判斷操作是否成功 (總線仲裁和從機應答)
   	if((rIICSTAT&0x09) == 0)
   	{  	
   	    return(TRUE);   		
   	}
   	else
   	{  	
   	    // 發送結束信號
   		if(sla&0x01) rIICSTAT = (2<<6)|(0<<5)|(1<<4);	
		  else  rIICSTAT = (3<<6)|(0<<5)|(1<<4);	
		rIICCON = IICCON_DACK;	
   	
   		for(i=0; i<5000; i++);				// 等待結束信號產生完畢
   		return(FALSE);
   	} // end of if((rIICSTAT&0x09) == 0)...else... 
}		    
	
	

/*********************************************************************************************************
** Function name: I2C_SendByte
** Descriptions: 發送一字節數據,并接收應答位
** Input: dat		要發送的數據
** Output: 操作成功返回TRUE,仲載失敗/無從機應答返回FALSE
********************************************************************************************************/
int  I2C_SendByte(uint8 dat)
{	
    uint32  i;

	rIICDS = dat;				// 將數據寫入I2C數據寄存器
	rIICCON = IICCON_DACK;		// 清除中斷標志,允許發送數據操作
	
	// 等待操作完成
    while((rIICCON&0x10) == 0);
    
    // 判斷操作是否成功 (總線仲裁和從機應答)
   	if((rIICSTAT&0x09) == 0)
   	{  	
   	    return(TRUE);   		
   	}
   	else
   	{  	
   	    // 發送結束信號	
		rIICSTAT = (3<<6)|(0<<5)|(1<<4);	
		rIICCON = IICCON_DACK;
		
		for(i=0; i<5000; i++);	// 等待結束信號產生完畢
   		return(FALSE);
   	}
}



/*********************************************************************************************************
** Function name: I2C_RcvByteNA
** Descriptions: 接上I2C總線上一字節數據,并發送非應答位
** Input: dat		用于接收數據的指針
** Output: 操作成功返回TRUE,仲載失敗/無從機應答返回FALSE
********************************************************************************************************/
int  I2C_RcvByteNA(uint8 *dat)
{	
    uint32  i;
	
	// 允許接收數據
	rIICCON = IICCON_DNACK;	
	
	// 等待接收數據操作完成
    while((rIICCON&0x10) == 0);
    
    // 判斷操作是否成功 (總線仲裁)
   	if((rIICSTAT&0x08) != 0)   	
   	{  	
   	    // 發送結束信號	
		rIICSTAT = (2<<6)|(0<<5)|(1<<4);	
		rIICCON = IICCON_DACK;
		
		for(i=0; i<5000; i++);	// 等待結束信號產生完畢
		return(FALSE);
   	}
   	
	*dat = rIICDS;		// 讀取數據	
	return(TRUE);   	
}



/*********************************************************************************************************
** Function name: I2C_RcvByteA
** Descriptions: 接上I2C總線上一字節數據,并發送應答位
** Input: dat		用于接收數據的指針
** Output: 操作成功返回TRUE,仲載失敗/無從機應答返回FALSE
********************************************************************************************************/
int  I2C_RcvByteA(uint8 *dat)
{	
    uint32  i;

	// 允許接收數據
	rIICCON = IICCON_DACK;
	
	// 等待接收數據操作完成
    while((rIICCON&0x10) == 0);
    
    // 判斷操作是否成功 (總線仲裁)
   	if((rIICSTAT&0x08) != 0)   	
   	{  	
   	    // 發送結束信號	
		rIICSTAT = (2<<6)|(0<<5)|(1<<4);	
		rIICCON = IICCON_DACK;
		
		for(i=0; i<5000; i++);	// 等待結束信號產生完畢
		return(FALSE);
   	}

	*dat = rIICDS;		// 讀取數據
	return(TRUE);  
}



/*********************************************************************************************************
** Function name: STOP_I2C
** Descriptions: 結束總線
** Input: send	    I2C當前模模式。主發送模式時為1,否則為0(主接收模式)
** Output: 無
********************************************************************************************************/
void  StopI2C(uint8 send)
{	
    uint32  i;

	if(send)
	{	
	    rIICSTAT = (3<<6)|(0<<5)|(1<<4);// 發送結束信號
	}
	else
	{	
	    rIICSTAT = (2<<6)|(0<<5)|(1<<4);// 發送結束信號
	}
  	rIICCON = IICCON_DACK;	
	for(i=0; i<5000; i++);				// 等待結束信號產生完畢
}



/*********************************************************************************************************
** Function name: ISendStr
** Descriptions: 使用硬件I2C發送數據。
** Input: sla		從機地址
**		  suba	    器件子地址(第一字節用來表示子地址字節個數)
**		  s		    發送數據緩沖區
**		  no		發送數據個數
** Output: 操作成功返回TRUE,仲載失敗/無從機應答返回FALSE
** Note: 使用前設置好參數。程序不會更改s、suba緩沖區的數據
********************************************************************************************************/
int  ISendStr(uint8 sla, uint8 *suba, uint8 *s, uint8 no)
{	
    int  bak;

	sla = sla & 0xFE;
	if(!StartI2C(sla)) 
	{	 
	    if(!StartI2C(sla)) return(FALSE);		// 啟動總線,發送從機地址
	}
	
	// 發送器件子地址
	bak = *suba++;
	for(; bak>0; bak--)
	{	
	    if(!I2C_SendByte(*suba++)) return(FALSE);
	}
	
	// 發送數據
	for(; no>0; no--)
	{	
	    if(!I2C_SendByte(*s)) return(FALSE); 
		s++;
	} 
	
	StopI2C(1);		// 結束總線
	
	return(TRUE);
}



/*********************************************************************************************************
** Function name: IRcvStr
** Descriptions: 使用硬件I2C讀取數據。
** Input: sla		從機地址
*		  suba	    器件子地址緩沖區指針(第一字節用來表示子地址字節個數)
*		  s		    接收數據緩沖區
*		  no		接收數據個數
** Output: 操作成功返回TRUE,仲載失敗/無從機應答返回FALSE
** Note: 使用前設置好參數。程序不會更改suba緩沖區的數據
********************************************************************************************************/
int  IRcvStr(uint8 sla,uint8 *suba,uint8 *s,uint8 no)
{  	
    int  bak;

	bak = *suba++;	// 子地址個數
	if(bak > 0)
	{	
	    sla = sla & 0xFE;
		if(!StartI2C(sla)) 
		{	 
		    if(!StartI2C(sla)) return(FALSE);	// 啟動總線,發送從機地址(寫)
		}
	
		// 發送器件子地址	
		for(; bak>0; bak--)
		{	
		    if(!I2C_SendByte(*suba++)) return(FALSE);
		}
	}
	
	// 重啟總線
	sla = sla | 0x01;
	if(!StartI2C(sla)) return(FALSE);		// 啟動總線,發送從機地址(讀)
	
	// 讀取數據	
	for(; no>1; no--)
	{	
	    if(!I2C_RcvByteA(s)) return(FALSE); // 發送數據
		s++;
	}	
	if(!I2C_RcvByteNA(s)) return(FALSE);	
	
	StopI2C(0);		// 結束總線
	
	return(TRUE);
}

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一级片网站| 亚洲精品日韩一| 伊人婷婷欧美激情| 精品在线播放免费| 一本大道av伊人久久综合| 精品久久久久香蕉网| 亚洲欧美偷拍三级| 国产精选一区二区三区| 欧美日韩一区二区三区不卡| 国产日韩在线不卡| 午夜国产不卡在线观看视频| 成年人午夜久久久| 精品粉嫩aⅴ一区二区三区四区| 中文字幕亚洲一区二区av在线| 日本少妇一区二区| 91久久精品一区二区三区| 久久久久久久久久久电影| 日日夜夜一区二区| 色噜噜狠狠色综合中国| 国产欧美在线观看一区| 免费亚洲电影在线| 欧美人狂配大交3d怪物一区| 亚洲毛片av在线| 国产91精品久久久久久久网曝门| 777a∨成人精品桃花网| 亚洲午夜激情av| 在线视频一区二区免费| 综合自拍亚洲综合图不卡区| 大胆亚洲人体视频| 欧美高清在线精品一区| 国产尤物一区二区| 精品国产91洋老外米糕| 蜜桃av一区二区| 日韩欧美一二三四区| 日韩高清不卡一区二区| 在线成人免费观看| 奇米888四色在线精品| 欧美日韩mp4| 无码av中文一区二区三区桃花岛| 欧美影院一区二区三区| 亚洲地区一二三色| 在线观看av一区二区| 伊人性伊人情综合网| 在线欧美日韩国产| 亚洲午夜久久久久久久久久久| 在线精品观看国产| 午夜欧美2019年伦理 | 亚洲色图都市小说| jiyouzz国产精品久久| 国产精品久久一卡二卡| 91玉足脚交白嫩脚丫在线播放| 亚洲欧洲一区二区三区| 91国产成人在线| 无码av免费一区二区三区试看| 91精选在线观看| 精品一区二区免费视频| 久久久精品国产99久久精品芒果| 大美女一区二区三区| 亚洲精品国久久99热| 欧美色图12p| 国内外成人在线| 国产精品污污网站在线观看| 91精品办公室少妇高潮对白| 日韩精品免费视频人成| 亚洲精品在线免费观看视频| 成人18精品视频| 午夜欧美电影在线观看| 26uuu亚洲综合色| 一本大道久久a久久综合婷婷| 亚洲成人av资源| 久久精品一区二区三区av| 97精品视频在线观看自产线路二| 亚洲不卡一区二区三区| 欧美白人最猛性xxxxx69交| 成人av电影观看| 青青国产91久久久久久| 欧美国产亚洲另类动漫| 欧美视频一区在线| 国产精品亚洲专一区二区三区| 亚洲三级电影网站| 日韩网站在线看片你懂的| 99久久免费精品| 久久精品国产99| 亚洲综合免费观看高清完整版 | 午夜久久福利影院| 欧美成人三级在线| 在线一区二区三区四区五区| 国产毛片一区二区| 亚洲成人av电影| 国产欧美日韩视频一区二区| 欧美精品乱码久久久久久按摩| 成人app软件下载大全免费| 日韩不卡一区二区| 亚洲色图制服丝袜| 国产日韩欧美不卡| 日韩精品专区在线| 欧美人妖巨大在线| 色综合久久综合中文综合网| 国产不卡视频在线播放| 日本伊人色综合网| 午夜亚洲国产au精品一区二区| 中文字幕永久在线不卡| 26uuu国产电影一区二区| 欧美日韩免费观看一区二区三区| www.欧美.com| 国产91在线看| 麻豆91免费看| 日韩精品亚洲专区| 亚洲成精国产精品女| 亚洲视频 欧洲视频| 国产精品麻豆久久久| 国产日韩欧美一区二区三区乱码 | 久久综合色播五月| 日韩一级片网站| 欧美一级片免费看| 欧美丰满嫩嫩电影| 欧美日韩中文字幕一区二区| 91美女视频网站| 99精品在线观看视频| 国产成人午夜精品影院观看视频 | 亚洲免费观看在线视频| 亚洲欧美综合在线精品| 中文字幕 久热精品 视频在线 | 国产精品一区二区在线观看不卡 | 国产高清不卡一区二区| 国产一区二区三区高清播放| 国产麻豆精品theporn| 国产在线精品国自产拍免费| 国产一区二区三区精品视频| 韩国av一区二区三区| 粉嫩高潮美女一区二区三区| 成人高清免费在线播放| 成人三级在线视频| 99精品视频一区二区三区| 99精品视频免费在线观看| 一本大道久久a久久精二百 | 成人三级在线视频| 91啪亚洲精品| 欧美日韩精品一区二区天天拍小说| 欧美午夜精品久久久久久超碰| 在线不卡中文字幕| 久久精品欧美一区二区三区不卡| 国产日韩成人精品| 亚洲裸体xxx| 日本美女视频一区二区| 国产不卡在线视频| 91久久线看在观草草青青| 欧美一级生活片| 国产精品天干天干在线综合| 亚洲精品一二三四区| 青青草成人在线观看| 国产福利精品导航| 在线视频你懂得一区二区三区| 欧美一区二区三区四区在线观看| 亚洲高清中文字幕| 国内外成人在线| 欧美专区亚洲专区| 久久综合狠狠综合| 亚洲综合在线五月| 久久超级碰视频| 欧美影院午夜播放| 久久久久青草大香线综合精品| 伊人夜夜躁av伊人久久| 久久99国产乱子伦精品免费| 99re这里都是精品| 欧美成人精品福利| 亚洲精品一卡二卡| 国产精品自产自拍| 欧美日韩国产一二三| 国产欧美日本一区视频| 日本亚洲一区二区| 在线看日本不卡| 国产欧美综合在线观看第十页| 婷婷开心久久网| 色婷婷久久久综合中文字幕| 久久久久久亚洲综合| 天天做天天摸天天爽国产一区| 成人高清av在线| 久久夜色精品一区| 欧美aaaaa成人免费观看视频| 一本久久a久久精品亚洲| 精品国产不卡一区二区三区| 午夜电影久久久| 日本精品视频一区二区| 国产欧美一区二区精品秋霞影院| 日韩成人av影视| 欧美人伦禁忌dvd放荡欲情| 亚洲欧洲国产日韩| 成人动漫在线一区| 久久嫩草精品久久久久| 天天亚洲美女在线视频| 欧美体内she精视频| 亚洲精品一二三| 91美女在线看| 亚洲欧美一区二区久久| 99re这里都是精品| 国产精品二三区| 成a人片亚洲日本久久| 日本一区二区免费在线观看视频 | 欧美亚洲自拍偷拍|