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

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

?? i2c.c

?? lpc2148-keil環境下的各個功能模塊的例程
?? 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 "LPC214x.h"                        /* LPC21xx definitions */
#include "type.h"
#include "irq.h"
#include "i2c.h"

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;

/* 
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 = I20STAT;
    IENABLE;				/* handles nested interrupt */	
    switch ( StatValue )
    {
	case 0x08:			/* A Start condition is issued. */
	I20DAT = I2CMasterBuffer[0];
	I20CONCLR = (I2CONCLR_SIC | I2CONCLR_STAC);
	I2CMasterState = I2C_STARTED;
	break;
	
	case 0x10:			/* A repeated started is issued */
	if (  I2CCmd == GET_DEVICE_ID || I2CCmd == GET_TEMPERATURE )
	{
	    I20DAT = I2CMasterBuffer[2];
	}
	I20CONCLR = (I2CONCLR_SIC | I2CONCLR_STAC);
	I2CMasterState = I2C_RESTARTED;
	break;
	
	case 0x18:			/* Regardless, it's a ACK */
	if ( I2CMasterState == I2C_STARTED )
	{
	    I20DAT = I2CMasterBuffer[1+WrIndex];
	    WrIndex++;
	    I2CMasterState = DATA_ACK;
	}
	I20CONCLR = I2CONCLR_SIC;
	break;
	
	case 0x28:	/* Data byte has been transmitted, regardless ACK or NACK */
	case 0x30:
	if ( WrIndex != I2CWriteLength )
	{   
	    I20DAT = I2CMasterBuffer[1+WrIndex]; /* this should be the last one */
	    WrIndex++;
	    if ( WrIndex != I2CWriteLength )
	    {   
		I2CMasterState = DATA_ACK;
	    }
	    else
	    {
		I2CMasterState = DATA_NACK;
		if ( I2CReadLength != 0 )
		{
		    I20CONSET = I2CONSET_STA;	/* Set Repeated-start flag */
		    I2CMasterState = I2C_REPEATED_START;
		}
	    }
	}
	else
	{
	    if ( I2CReadLength != 0 )
	    {
		I20CONSET = I2CONSET_STA;	/* Set Repeated-start flag */
		I2CMasterState = I2C_REPEATED_START;
	    }
	    else
	    {
		I2CMasterState = DATA_NACK;
	    }
	}
	I20CONCLR = I2CONCLR_SIC;
	break;
	
	case 0x40:	/* Master Receive, SLA_R has been sent */
	I20CONCLR = I2CONCLR_SIC;
	break;
	
	case 0x50:	/* Data byte has been received, regardless following ACK or NACK */
	case 0x58:
	I2CMasterBuffer[3+RdIndex] = I20DAT;
	RdIndex++;
	if ( RdIndex != I2CReadLength )
	{   
	    I2CMasterState = DATA_ACK;
	}
	else
	{
	    RdIndex = 0;
	    I2CMasterState = DATA_NACK;
	}
	I20CONSET = I2CONSET_AA;	/* assert ACK after data is received */
	I20CONCLR = I2CONCLR_SIC;
	break;
	
	case 0x20:			/* regardless, it's a NACK */
	case 0x48:
	I20CONCLR = I2CONCLR_SIC;
	I2CMasterState = DATA_NACK;
	break;
	
	case 0x38:			/* Arbitration lost, in this example, we don't
					deal with multiple master situation */
	default:
	I20CONCLR = 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 ---*/
    I20CONSET = 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 )
{
    I20CONSET = I2CONSET_STO;      /* Set Stop flag */ 
    I20CONCLR = I2CONCLR_SIC;  /* Clear SI flag */ 
            
    /*--- Wait for STOP detected ---*/
    while( I20CONSET & 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( DWORD I2cMode ) 
{
    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;

    /*--- Clear flags ---*/
    I20CONCLR = I2CONCLR_AAC | I2CONCLR_SIC | I2CONCLR_STAC | I2CONCLR_I2ENC;    

    /*--- Reset registers ---*/
    I20SCLL   = I2SCLL_SCLL;
    I20SCLH   = I2SCLH_SCLH;
    if ( I2cMode == I2CSLAVE )
    {
	I20ADR = SE95_ADDR;
    }    

    /* Install interrupt handler */	
    if ( install_irq( I2C0_INT, (void *)I2C0MasterHandler ) == FALSE )
    {
	return( FALSE );
    }
    I20CONSET = I2CONSET_I2EN;
    return( TRUE );
}

/*****************************************************************************
** 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 );      
}

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久久蜜桃app| 5858s免费视频成人| 国产精品久久久久久久蜜臀 | 久久精品国产亚洲高清剧情介绍| 欧美老人xxxx18| 日韩高清一区在线| 久久婷婷一区二区三区| 国产精品自产自拍| 18欧美亚洲精品| 欧美日韩国产美| 国产一区二区在线观看免费 | 亚洲精选在线视频| 欧美剧情片在线观看| 免费xxxx性欧美18vr| 国产喷白浆一区二区三区| 一本色道**综合亚洲精品蜜桃冫 | 亚洲欧美偷拍卡通变态| 91久久一区二区| 美国三级日本三级久久99| 日本一区二区三区在线不卡 | 日本特黄久久久高潮| 亚洲精品一区二区三区香蕉| 成人avav影音| 日本伊人午夜精品| 亚洲欧洲精品一区二区三区| 欧美老女人在线| 成人美女视频在线观看18| 亚洲国产精品久久久男人的天堂| 日韩精品一区二区三区四区| 99国产精品久久久久久久久久久 | 狠狠色2019综合网| 亚洲美女视频在线| 欧美大片免费久久精品三p| 97se亚洲国产综合在线| 麻豆精品一区二区综合av| 亚洲日本韩国一区| 久久尤物电影视频在线观看| 欧美系列亚洲系列| 成人91在线观看| 国产一区久久久| 婷婷国产v国产偷v亚洲高清| 国产精品天干天干在观线| 久久久久99精品国产片| 91国偷自产一区二区开放时间 | 亚洲制服丝袜av| 国产日韩欧美麻豆| 日韩欧美另类在线| 欧美日韩日本视频| 色综合夜色一区| 国产成人在线色| 精品一区二区在线看| 丝袜亚洲另类欧美| 亚洲一区自拍偷拍| 亚洲精品国产一区二区精华液| 久久久777精品电影网影网| 欧美一区二区三区在| 在线观看日韩国产| 91视频免费看| 成人免费视频网站在线观看| 精品写真视频在线观看| 调教+趴+乳夹+国产+精品| 亚洲综合图片区| 曰韩精品一区二区| 亚洲欧美日韩久久| 亚洲精品中文在线观看| 亚洲视频在线观看三级| 国产精品美女久久久久av爽李琼| 久久丝袜美腿综合| 欧美精品一区二区久久婷婷| 91精品国产91热久久久做人人| 91成人网在线| 欧美日韩一区二区三区免费看 | 日欧美一区二区| 亚洲狠狠爱一区二区三区| 中文字幕一区二区三区在线不卡 | 精品一区二区在线播放| 久久成人av少妇免费| 老司机免费视频一区二区| 麻豆传媒一区二区三区| 蜜桃视频一区二区| 麻豆视频观看网址久久| 久久se精品一区二区| 国产精品一区二区无线| 国产精品一品二品| 99久久国产综合精品女不卡| 一本大道久久a久久精二百| 91成人国产精品| 91精品国产高清一区二区三区| 欧美一区二区三区在线看| 日韩美一区二区三区| 国产亚洲一区二区三区四区| 国产精品久久久久四虎| 一区二区三区丝袜| 美国一区二区三区在线播放| 国产呦萝稀缺另类资源| eeuss鲁一区二区三区| 欧洲视频一区二区| 日韩精品一区二区在线| 国产精品美女久久久久久久网站| 自拍av一区二区三区| 亚洲18女电影在线观看| 精品一区二区影视| 成人黄色电影在线| 欧美精品在线一区二区三区| 2021久久国产精品不只是精品| 亚洲国产精品久久久久秋霞影院| 首页国产欧美日韩丝袜| 国产精品夜夜爽| 欧美日韩一区二区在线视频| 精品久久人人做人人爰| 国产精品久久久久婷婷二区次| 午夜久久久久久久久久一区二区| 久久99国产精品久久99果冻传媒| 成人免费视频一区| 欧美卡1卡2卡| 中文字幕色av一区二区三区| 天天爽夜夜爽夜夜爽精品视频 | 成人免费高清视频| 777亚洲妇女| 国产精品灌醉下药二区| 蜜桃视频在线观看一区二区| 成人av手机在线观看| 91精品国产综合久久精品 | 精品国产青草久久久久福利| 国产精品福利在线播放| 久久激情五月婷婷| 欧美专区日韩专区| 国产精品久久久久9999吃药| 麻豆成人久久精品二区三区红| 97aⅴ精品视频一二三区| 精品国产免费久久| 天天av天天翘天天综合网| 不卡的av电影| 久久久久国产一区二区三区四区| 偷拍日韩校园综合在线| 99精品国产一区二区三区不卡| 精品国产乱码久久久久久牛牛| 夜夜夜精品看看| 99久久精品99国产精品| 久久久久久麻豆| 久久99久久99| 日韩一级成人av| 亚洲成人在线观看视频| 日本乱码高清不卡字幕| 国产精品不卡在线观看| 国产精品亚洲综合一区在线观看| 欧美一区日本一区韩国一区| 亚洲男人电影天堂| 成人激情黄色小说| 国产欧美精品一区二区色综合| 久久精品99国产国产精| 欧美日韩久久一区二区| 亚洲在线视频网站| 91国偷自产一区二区三区成为亚洲经典 | 91精品在线观看入口| 一区二区三区资源| 97久久超碰国产精品电影| 中文字幕精品在线不卡| 国产99久久久国产精品潘金| 日韩精品在线一区二区| 麻豆国产欧美日韩综合精品二区| 欧美日韩高清一区二区不卡| 亚洲成国产人片在线观看| 在线免费观看成人短视频| 亚洲丝袜制服诱惑| 色哟哟一区二区三区| 亚洲色图丝袜美腿| 日本高清免费不卡视频| 一级特黄大欧美久久久| 欧美日韩中文字幕一区二区| 亚洲国产aⅴ天堂久久| 欧美三级视频在线播放| 五月婷婷激情综合网| 欧美白人最猛性xxxxx69交| 精品在线免费视频| 久久久99精品免费观看| 成人黄色在线网站| 亚洲图片另类小说| 欧美三级电影一区| 另类综合日韩欧美亚洲| 久久九九久久九九| 97se亚洲国产综合自在线| 亚洲一区二区三区中文字幕| 欧美剧情电影在线观看完整版免费励志电影| 香蕉成人啪国产精品视频综合网| 91麻豆精品国产自产在线 | 亚洲夂夂婷婷色拍ww47| 67194成人在线观看| 韩国一区二区三区| 国产精品护士白丝一区av| 欧美午夜不卡在线观看免费| 青青国产91久久久久久| xf在线a精品一区二区视频网站| 国产精品一区二区91| 亚洲女同女同女同女同女同69| 欧美性大战久久| 激情伊人五月天久久综合| 国产精品美女久久久久久久网站| 欧美综合亚洲图片综合区| 精品一区二区三区在线视频|