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

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

?? i2c_24c04.c

?? LCD驅動示列,在連接LCD與MCU時,請參考main.c文件中的注釋,以及LCD_PortConfig.h中管腳的定義情況.
?? C
字號:
/*****************************************************************************
 *   i2c.c:  I2C C file for Philips LPC214x Family Microprocessors
 *
 *   Copyright(C) 2006, Philips Semiconductor
 *   All rights reserved.
 *
 *   History
 *   2005.10.01  ver 1.00    Prelimnary version, first Release
 *
*****************************************************************************/
#include "LPC213x.h"                        /* LPC21xx definitions */
#include "type.h"
#include "irq.h"
//#include "i2c.h"

#define BUFSIZE			0x20
#define MAX_TIMEOUT		0x00FFFFFF

#define I2CMASTER		0x01
#define I2CSLAVE		0x02

/* For more info, read Philips's SE95 datasheet */
#define SE95_ADDR		0x9E
#define SE95_ID			0x05
#define SE95_CONFIG		0x01
#define SE95_TEMP		0x00
#define RD_BIT			0x01

#define GET_DEVICE_ID		0x01
#define GET_TEMPERATURE		0x02
#define SET_CONFIGURATION	0x03

#define I2C_IDLE		0
#define I2C_STARTED		1
#define I2C_RESTARTED		2
#define I2C_REPEATED_START	3
#define DATA_ACK		4
#define DATA_NACK		5

#define I2CONSET_I2EN		0x00000040  /* I2C Control Set Register */
#define I2CONSET_AA		0x00000004
#define I2CONSET_SI		0x00000008
#define I2CONSET_STO		0x00000010
#define I2CONSET_STA		0x00000020

#define I2CONCLR_AAC		0x00000004  /* I2C Control clear Register */
#define I2CONCLR_SIC		0x00000008
#define I2CONCLR_STAC		0x00000020
#define I2CONCLR_I2ENC		0x00000040

#define I2DAT_I2C		0x00000000  /* I2C Data Reg */
#define I2ADR_I2C		0x00000000  /* I2C Slave Address Reg */
#define I2SCLH_SCLH		0x000000c8  /* I2C SCL Duty Cycle High Reg */
#define I2SCLL_SCLL		0x000000c8  /* I2C SCL Duty Cycle Low Reg */

/*
DWORD I2CMasterState = I2C_IDLE;
DWORD I2CSlaveState = I2C_IDLE;

DWORD I2CCmd;
DWORD I2CMode;

BYTE I2CMasterBuffer[BUFSIZE];
BYTE I2CSlaveBuffer[BUFSIZE];
DWORD I2CCount = 0;
DWORD I2CReadLength;
DWORD I2CWriteLength;

DWORD RdIndex = 0;
DWORD WrIndex = 0;
*/
BYTE IIC_Chip_Addr;					//第一個送至24C04的數據
									//為24C04的地址以及讀寫操作的最高位地址,及讀寫控制信號
BYTE IIC_Addr;						//第二個送至24C04的數據
									//為讀寫操作的地址數據
BYTE IIC_Byte_Number;				//數據個數
BYTE IIC_Data;						//數據緩沖器
BOOL IIC_Busy = FALSE;					//IIC忙標志位

/* 
From device to device, the I2C communication protocol may vary, 
in the example below, the protocol uses repeated start to read data from or 
write to the device:
For master read: the sequence is: STA,Addr(W),offset,RE-STA,Addr(w),data...STO 
for master write: the sequence is: STA,Addr(W),length,RE-STA,Addr(r),data...STO
Thus, in state 8, the address is always WRITE. in state 10, the address could 
be READ or WRITE depending on the I2CCmd.
*/   

/*****************************************************************************
** Function name:		I2C0MasterHandler
**
** Descriptions:		I2C0 interrupt handler, deal with master mode
**				only.
**
** parameters:			None
** Returned value:		None
** 
*****************************************************************************/
void I2C0MasterHandler (void) __irq 
{
    BYTE StatValue;

    /* this handler deals with master read and master write only */
    StatValue = I2C0STAT; 		//讀取IIC狀態,以便后面針對不同狀態進行分支處理
//    IENABLE;
	//
    switch ( StatValue )
    {
		case 0x08:		//IIC 啟動條件已發送完畢,緊接要發送從器件地址
			I2C0DAT = IIC_Chip_Addr&(~0x01);//I2CMasterBuffer[0];  //發送從器件地址以及讀寫標志位
			I2C0CONCLR = (I2CONCLR_SIC | I2CONCLR_STAC);	//清標志
			break;
	
		case 0x10:		//讀操作重發,當讀操作時,在啟動條件后發送完從器件地址
			I2C0DAT = IIC_Chip_Addr;
			I2C0CONCLR = (I2CONCLR_SIC | I2CONCLR_STAC);
			break;
	
		case 0x18:		//從器件地址發送完后,接收到ACK,接著要發送操作地址
	    	I2C0DAT = IIC_Addr;
			I2C0CONCLR = I2CONCLR_SIC;
			break;
	   case 0x20:
	   		I2C0CONSET = I2CONSET_STO;//
			I2C0CONSET = I2CONSET_STA;
			I2C0CONCLR = I2CONCLR_SIC;
			break;

		case 0x28:	/* Data byte has been transmitted, regardless ACK or NACK */
		case 0x30:
			if(IIC_Byte_Number)
			{
				if(IIC_Chip_Addr&0x01)
				{
					I2C0CONSET = I2CONSET_STA;	//讀重發	
				}
				else
				{
					I2C0DAT = IIC_Data;			//發送有效數據
					IIC_Byte_Number--;
				}
			}
			else
			{
				if(IIC_Chip_Addr&0x01)
				{
					I2C0CONSET = I2CONSET_STA;	//讀重發	
				}
				else
				{
					I2C0CONSET = I2CONSET_STO;//
					IIC_Busy = FALSE;
				}
			}
		
			I2C0CONCLR = I2CONCLR_SIC;
			break;
		case 0x40:	//主接收器,讀重發已發完,收到ACK,這里將設置在接收到數據后發NACK
			I2C0CONCLR = I2CONCLR_AAC;
			I2C0CONCLR = I2CONCLR_SIC;
			break;
	
		case 0x50:	/* Data byte has been received, regardless following ACK or NACK */
		case 0x58:
			IIC_Data = I2C0DAT;
			IIC_Busy = FALSE;
			//這里也一樣,應將IIC停掉
//			I2C0CONSET = I2CONSET_AA;	/* assert ACK after data is received */
			I2C0CONSET = I2CONSET_STO;
			I2C0CONCLR = I2CONCLR_SIC;
			while( I2C0CONSET & I2CONSET_STO );
			break;

		case 0x48:
			I2C0CONSET = I2CONSET_STO;//
			I2C0CONSET = I2CONSET_STA;
			I2C0CONCLR = I2CONCLR_SIC;
			break;
	
		case 0x38:
		default:
			I2C0CONSET = I2CONSET_STO;//
			I2C0CONCLR = I2CONCLR_SIC;	
			break;
    }
 //   IDISABLE;
    VICVectAddr = 0;		/* Acknowledge Interrupt */
}

/*****************************************************************************
** Function name:		I2CStart
**
** Descriptions:		Create I2C start condition, a timeout
**				value is set if the I2C never gets started,
**				and timed out. It's a fatal error. 
**
** parameters:			None
** Returned value:		true or false, return false if timed out
** 
*****************************************************************************/
/*
DWORD I2CStart( void )
{
    DWORD timeout = 0;
    DWORD returnValue = FALSE;
 
    //--- Issue a start condition ---
    I2C0CONSET = I2CONSET_STA;	// Set Start flag //
    
    //--- Wait until START transmitted ---
    while( 1 )
    {
		if ( I2CMasterState == I2C_STARTED )
		{
	   	 	returnValue = TRUE;
	    	break;	
		}
		if ( timeout >= MAX_TIMEOUT )
		{
	   	 	returnValue = FALSE;
	    	break;
		}
		timeout++;
    }
    return ( returnValue );
}
*/
/*****************************************************************************
** Function name:		I2CStop
**
** Descriptions:		Set the I2C stop condition, if the routine
**				never exit, it's a fatal bus error.
**
** parameters:			None
** Returned value:		true or never return
** 
*****************************************************************************/
/*
DWORD I2CStop( void )
{
    I2C0CONSET = I2CONSET_STO;      // Set Stop flag 
    I2C0CONCLR = I2CONCLR_SIC;  // Clear SI flag 
            
    //--- Wait for STOP detected ---
    while( I2C0CONSET & I2CONSET_STO );
    return TRUE;
}*/

/*****************************************************************************
** Function name:		I2CInit
**
** Descriptions:		Initialize I2C controller
**
** parameters:			I2c mode is either MASTER or SLAVE
** Returned value:		true or false, return false if the I2C
**				interrupt handler was not installed correctly
** 
*****************************************************************************/
DWORD I2CInit( void) 
{
    PINSEL0 = 0x50;	/* set PIO0.2 and PIO0.3 to I2C0 SDA and SCK */
    IODIR0 = 0x0C;	/* set port 0.2 and port 0.3 to output, high */
    IOSET0 = 0x0C;

    I2C0CONCLR = I2CONCLR_AAC | I2CONCLR_SIC | I2CONCLR_STAC | I2CONCLR_I2ENC;    

    I2C0SCLL   = I2SCLL_SCLL;
    I2C0SCLH   = I2SCLH_SCLH;

    if ( install_irq( I2C0_INT, (void *)I2C0MasterHandler ) == FALSE )
    {
		return( FALSE );
    }
    I2C0CONSET = I2CONSET_I2EN;
    return( TRUE );
}
//=====================================================================//
//函數:char SM_Receive (unsigned int byte_address)
//描述:讀單字節數據從指定的AT24C04的地址空間
//參數:byte_address	地址,9位有效	
//返回:Dat		數據
//注意:無        
//=====================================================================//
unsigned char SM_Receive (unsigned int byte_address)
{
	unsigned char ucTemp;
	ucTemp = (unsigned char)(byte_address>>7);
	ucTemp = ucTemp&0x02;
	while (IIC_Busy); 					// 等待總線空閑
//	I2CMasterState = I2C_IDLE;
	IIC_Busy = TRUE; 						//占用SMBus(設置為忙)
//	SMB0CN = 0x44; 						// 允許SMBus,應答周期發ACK
	IIC_Byte_Number = 1; 					// 1 地址字節
	IIC_Chip_Addr = (0xA0|0x01|ucTemp); 		// 片選+ READ + 一個高位的地址
	IIC_Addr = (unsigned char)(byte_address&0x00FF); // 8 位地址
	I2C0CONSET = I2CONSET_STA;//I2CStart(); 							// 啟動傳輸過程
	while (IIC_Busy==TRUE); 					// 等待傳輸結束
	while( I2C0CONSET & I2CONSET_STO );
	return IIC_Data;
}
//=====================================================================//
//函數:void SM_Send (unsigned int byte_address, unsigned char out_byte)
//描述:寫單字節數據至指定的AT24C04的地址空間
//參數:byte_address	地址,9位有效
//		out_byte		數據
//返回:無
//注意:無        
//=====================================================================//
// SMBus 字節寫函數-----------------------------------------------------
void SM_Send (unsigned int byte_address, unsigned char out_byte)
{
	unsigned char ucTemp;
	ucTemp = (unsigned char)(byte_address>>7);
	ucTemp = ucTemp&0x02;
	while (IIC_Busy==TRUE); 			// 等待SMBus 空閑
	IIC_Busy = 1; 						// 占用SMBus(設置為忙)

	IIC_Byte_Number = 1; 					// 1 地址字節
	IIC_Chip_Addr = (0xA0|ucTemp); 		// 片選+ READ + 一個高位的地址
	IIC_Addr = (unsigned char)(byte_address&0x00FF); // 8 位地址
	IIC_Data = out_byte; 					// 待寫數據
	I2C0CONSET = I2CONSET_STA;//I2CStart(); 							// 啟動傳輸過程
	while (IIC_Busy==TRUE); 					// 等待傳輸結束
	while( I2C0CONSET & I2CONSET_STO );
}
/*****************************************************************************
** Function name:		I2CEngine
**
** Descriptions:		The routine to complete a I2C transaction
**				from start to stop. All the intermitten
**				steps are handled in the interrupt handler.
**				Before this routine is called, the read
**				length, write length, I2C master buffer,
**				and I2C command fields need to be filled.
**				see i2cmst.c for more details. 
**
** parameters:			None
** Returned value:		true or false, return false only if the
**				start condition can never be generated and
**				timed out. 
** 
*****************************************************************************/
/*
DWORD I2CEngine( void ) 
{
    I2CMasterState = I2C_IDLE;
    RdIndex = 0;
    WrIndex = 0;
    if ( I2CStart() != TRUE )
    {
	I2CStop();
	return ( FALSE );
    }
    while ( 1 )
    {
	if ( I2CMasterState == DATA_NACK )
	{
	    I2CStop();
	    break;
	}
    }    
    return ( TRUE );      
}  */


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美视频一区二区| 2019国产精品| 精品一区二区国语对白| 午夜精品一区二区三区电影天堂 | 91啦中文在线观看| 国产成人日日夜夜| 国产精品亚洲综合一区在线观看| 奇米在线7777在线精品| 美女一区二区在线观看| 秋霞电影一区二区| 青青草视频一区| 久久精品国产色蜜蜜麻豆| 青青青爽久久午夜综合久久午夜| 日韩成人免费电影| 丝袜诱惑亚洲看片| 韩国av一区二区| 国产精品一二三| youjizz久久| 91首页免费视频| 色噜噜狠狠色综合欧洲selulu| 91视频免费观看| 日本韩国精品在线| 在线不卡免费欧美| 日韩精品最新网址| 欧美国产乱子伦 | 99免费精品在线| 欧美专区日韩专区| 在线播放视频一区| 久久久久亚洲蜜桃| 亚洲精品一二三区| 日本女优在线视频一区二区| 国产寡妇亲子伦一区二区| 97超碰欧美中文字幕| 51精品久久久久久久蜜臀| 国产亚洲精品久| 亚洲精品日韩一| 美女视频黄 久久| 北条麻妃国产九九精品视频| 欧美日韩精品欧美日韩精品一 | 精品美女在线播放| 亚洲色欲色欲www| 日韩一区精品视频| 丰满放荡岳乱妇91ww| 欧美日韩免费一区二区三区 | 久久久久久久久久久黄色| 亚洲欧美一区二区三区孕妇| 奇米影视在线99精品| av午夜一区麻豆| 欧美刺激午夜性久久久久久久| 国产精品国产三级国产| 蜜臀va亚洲va欧美va天堂| 91在线云播放| 久久综合99re88久久爱| 亚洲一区二区视频在线观看| 国产一区二区毛片| 91麻豆精品国产自产在线观看一区 | 久久不见久久见免费视频7| 99国产欧美另类久久久精品| 欧美精品一区二区久久婷婷| 亚洲国产一区二区三区青草影视 | 国产精品69毛片高清亚洲| 欧美优质美女网站| 国产精品国产馆在线真实露脸| 精品影院一区二区久久久| 欧美三级欧美一级| 亚洲激情自拍偷拍| www.爱久久.com| 国产欧美一区二区精品性色超碰| 青青草国产精品97视觉盛宴| 欧美三级一区二区| 伊人开心综合网| a美女胸又www黄视频久久| 国产亚洲短视频| 国产成人午夜精品影院观看视频 | 久久av资源网| 3d动漫精品啪啪一区二区竹菊| 亚洲愉拍自拍另类高清精品| 一本色道**综合亚洲精品蜜桃冫| 国产精品久久二区二区| 成人免费视频app| 国产精品免费视频网站| 风间由美一区二区av101| 国产欧美日韩另类一区| 国产成人在线影院| 亚洲国产岛国毛片在线| 99在线精品视频| 中文字幕一区二区不卡| 91蝌蚪porny| 亚洲综合视频在线| 欧美日韩国产另类不卡| 天堂av在线一区| 日韩手机在线导航| 精品无人码麻豆乱码1区2区| 精品国产不卡一区二区三区| 国产成人亚洲精品狼色在线| 国产精品国产三级国产专播品爱网 | 欧美精品久久久久久久久老牛影院| 午夜精品久久久| 精品久久久久久久久久久久久久久久久| 美女视频一区二区三区| 欧美精品一区二区三区蜜桃视频| 国内不卡的二区三区中文字幕| 欧美极品xxx| 色综合久久中文字幕综合网 | 欧美日韩www| 极品美女销魂一区二区三区免费| 久久久久久97三级| 91啪亚洲精品| 亚洲国产视频直播| 久久亚洲欧美国产精品乐播 | 中文字幕中文字幕一区| 欧美亚洲高清一区| 国模娜娜一区二区三区| 一区二区三区四区在线免费观看 | 午夜精品久久久久久久久 | 国产精品1区2区3区| 亚洲精品videosex极品| 精品理论电影在线| 欧美性猛交一区二区三区精品| 精品中文av资源站在线观看| 亚洲精品美国一| 精品久久久久99| 欧美在线观看一区| 国产精品69毛片高清亚洲| 亚洲国产一区二区a毛片| 中文字幕高清不卡| 日韩欧美一区二区免费| 色综合一个色综合| 国产精品一二三区| 日本v片在线高清不卡在线观看| 亚洲欧洲av另类| 久久久久久免费网| 3d动漫精品啪啪1区2区免费| 91影视在线播放| 国产一区二区三区综合| 婷婷久久综合九色国产成人| 亚洲精品自拍动漫在线| 国产欧美日韩麻豆91| 精品久久人人做人人爽| 欧美另类一区二区三区| 日本高清无吗v一区| 99国产精品国产精品毛片| 国产乱子轮精品视频| 蜜桃精品在线观看| 日韩精品一二三区| 性感美女极品91精品| 亚洲综合视频在线观看| 亚洲免费成人av| 亚洲人成网站色在线观看| 国产欧美一区二区精品性色超碰 | 国产成人精品亚洲日本在线桃色 | 欧美精品一区在线观看| 日韩情涩欧美日韩视频| 日韩午夜在线播放| 51精品视频一区二区三区| 欧美欧美午夜aⅴ在线观看| 欧美性大战久久| 欧美性高清videossexo| 欧美视频在线观看一区| 欧美日韩一区二区三区高清| 欧美日韩亚洲国产综合| 欧美精品tushy高清| 51精品视频一区二区三区| 制服丝袜国产精品| 欧美精品在线一区二区| 91精品在线观看入口| 日韩美女在线视频| 久久久国产一区二区三区四区小说| 久久影视一区二区| 中文字幕第一页久久| 亚洲欧美日韩国产一区二区三区| 亚洲日本va在线观看| 亚洲一级在线观看| 美国一区二区三区在线播放| 美女爽到高潮91| 福利电影一区二区| 91传媒视频在线播放| 日韩三级高清在线| 国产日韩欧美电影| 亚洲精品国产成人久久av盗摄 | 欧美一级艳片视频免费观看| 日韩一卡二卡三卡国产欧美| 久久亚洲一级片| 亚洲女同女同女同女同女同69| 亚洲va韩国va欧美va精品| 久久精品国产99| 北条麻妃国产九九精品视频| 欧美理论片在线| 久久综合丝袜日本网| 亚洲日本在线看| 美国十次综合导航| 97久久精品人人做人人爽50路| 6080国产精品一区二区| 国产精品嫩草99a| 三级一区在线视频先锋| 成人精品视频网站| 91麻豆精品国产91久久久久久久久 | 在线区一区二视频| 精品欧美一区二区久久| 亚洲欧美偷拍三级|