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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? i2c.c

?? ARM LPC214X例程全包括
?? 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 "target.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
******************************************************************************/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆视频网站| 99久精品国产| 亚洲欧美自拍偷拍色图| 欧美日韩一区二区欧美激情| 国产毛片精品国产一区二区三区| 国产99久久久国产精品免费看| 亚洲蜜桃精久久久久久久| 日韩免费视频线观看| 在线观看www91| 国产精品一区二区不卡| 香蕉久久夜色精品国产使用方法 | 2024国产精品| 欧美网站大全在线观看| 成人毛片在线观看| 精一区二区三区| 亚洲一区二区三区视频在线播放| 国产日韩欧美一区二区三区乱码| 91麻豆精品国产91久久久久| 一本在线高清不卡dvd| 国产成人一级电影| 久久精品av麻豆的观看方式| 午夜伊人狠狠久久| 亚洲精选在线视频| 国产精品免费视频网站| 亚洲精品一线二线三线无人区| 在线不卡免费av| 在线观看日韩av先锋影音电影院| 成人免费黄色在线| 国产成人精品一区二区三区网站观看| 免费高清不卡av| 视频一区二区国产| 亚洲一区成人在线| 一个色在线综合| 亚洲精品国产第一综合99久久| 国产精品成人一区二区三区夜夜夜| 久久久久国产精品厨房| 欧美大片一区二区| 日韩一级免费观看| 欧美一区二区大片| 日韩丝袜情趣美女图片| 日韩一级大片在线| 日韩亚洲欧美高清| 欧美一区二区不卡视频| 日韩欧美中文字幕公布| 精品久久一二三区| 精品国产91洋老外米糕| 久久综合色婷婷| 26uuu另类欧美| 国产午夜亚洲精品理论片色戒| 久久综合精品国产一区二区三区| 欧美电影免费观看高清完整版在线观看| 91麻豆精品国产自产在线观看一区 | 91美女福利视频| 成人动漫中文字幕| 成人av电影在线网| 欧美日本视频在线| 一区二区三区免费看视频| 欧美三级三级三级| 精品影视av免费| 国产精品久久久久久久午夜片| 欧美性淫爽ww久久久久无| 欧美日免费三级在线| 欧美电影影音先锋| 2022国产精品视频| 亚洲国产精品一区二区久久| 91精品国产综合久久久久久久久久| 久久99国产精品成人| 欧美激情一二三区| 欧美在线999| 国产原创一区二区| 亚洲精品免费在线观看| 日韩三级中文字幕| 不卡大黄网站免费看| 日韩成人午夜电影| 最近中文字幕一区二区三区| 欧美日韩日本视频| 成人自拍视频在线| 天天免费综合色| 国产欧美一区二区在线| 欧美日韩一级片网站| 欧美日韩免费视频| 欧美色国产精品| 精品久久一区二区| 亚洲一区免费视频| 亚洲精品国产一区二区精华液| 91色porny在线视频| 久久草av在线| 亚洲欧美日韩国产成人精品影院| 亚洲黄色尤物视频| 亚洲va在线va天堂| 国产一区二区三区在线观看精品| 99精品1区2区| 97精品久久久午夜一区二区三区| 成人欧美一区二区三区白人| 精品理论电影在线| 6080午夜不卡| 在线观看网站黄不卡| 9久草视频在线视频精品| 精品亚洲国产成人av制服丝袜 | 波多野结衣中文一区| 激情文学综合丁香| 日韩国产精品久久久| 亚洲永久免费av| 亚洲女爱视频在线| 国产精品久久久久久久久快鸭 | 又紧又大又爽精品一区二区| 国产欧美精品一区| 久久久欧美精品sm网站| 日韩视频一区二区三区在线播放| 欧美日韩一级视频| 欧美色综合久久| 欧美午夜不卡视频| 欧美无人高清视频在线观看| 一本色道a无线码一区v| av在线免费不卡| 成人美女视频在线观看| 成人黄色在线看| 成人国产精品免费网站| 成人免费视频网站在线观看| 成人激情图片网| 白白色 亚洲乱淫| www.99精品| 色综合天天做天天爱| 99久久婷婷国产综合精品电影 | 国产欧美一二三区| 国产亲近乱来精品视频| 国产精品国产三级国产三级人妇| 国产精品理论片| 亚洲免费观看高清完整版在线观看| 亚洲免费在线观看视频| 亚洲国产一区在线观看| 日本一不卡视频| 激情成人午夜视频| 成人综合婷婷国产精品久久| 99精品国产热久久91蜜凸| 欧美在线视频全部完| 欧美放荡的少妇| 精品99久久久久久| 国产精品久久久久一区| 一区二区不卡在线视频 午夜欧美不卡在| 艳妇臀荡乳欲伦亚洲一区| 亚洲福利国产精品| 日韩精品一区二区三区在线观看| 中文字幕在线一区| 91在线视频免费91| 亚洲视频1区2区| 在线精品视频小说1| 欧美绝品在线观看成人午夜影视| 91国内精品野花午夜精品| 8x福利精品第一导航| 国产亚洲精品超碰| 亚洲精品日韩一| 久久狠狠亚洲综合| 99热国产精品| 69堂精品视频| 国产精品嫩草久久久久| 午夜欧美在线一二页| 国产成人综合视频| 欧美日韩在线播放三区四区| 精品成人一区二区三区| 亚洲日本欧美天堂| 久久精品99国产国产精| 色婷婷av一区二区三区软件| 日韩欧美国产1| 亚洲欧美日韩小说| 国内成人自拍视频| 91女人视频在线观看| 26uuu国产在线精品一区二区| 一区二区三区在线观看国产| 国产精品伊人色| 91精品国模一区二区三区| 亚洲视频在线一区| 国产乱人伦精品一区二区在线观看| 91高清视频在线| 国产精品久久久爽爽爽麻豆色哟哟| 日本欧美一区二区| 色丁香久综合在线久综合在线观看| 久久久久久久久久久电影| 免费成人在线视频观看| 色狠狠综合天天综合综合| 成人黄色a**站在线观看| 日韩一区二区三区视频在线 | 中文字幕精品一区二区精品绿巨人 | 国产大陆a不卡| 91精品国产免费| 亚洲一区二区在线播放相泽| 99视频一区二区| 国产日韩高清在线| 久久精工是国产品牌吗| 日本vs亚洲vs韩国一区三区二区| 91福利国产精品| 亚洲人精品午夜| 成人午夜视频在线观看| 国产亚洲一本大道中文在线| 裸体健美xxxx欧美裸体表演| 欧美日韩国产乱码电影| 亚洲成av人片在线观看无码| 在线免费观看成人短视频| 亚洲欧美日本韩国| 在线观看91视频|