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

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

?? i2c.c

?? LPC2378的IIC應用模塊程序!可直接使用!
?? C
字號:
/*****************************************************************************
 *   i2c.c:  I2C C file for NXP LPC23xx/24xx Family Microprocessors
 *
 *   Copyright(C) 2006, NXP Semiconductor
 *   All rights reserved.
 *
 *   History
 *   2006.07.19  ver 1.00    Prelimnary version, first Release
 *
*****************************************************************************/
#include "LPC23xx.h"                        /* LPC23xx/24xx definitions */
#include "type.h"
#include "irq.h"
#include "i2c.h"

volatile DWORD I2CMasterState = I2C_IDLE;
volatile DWORD I2CSlaveState = I2C_IDLE;

volatile DWORD I2CCmd;
volatile DWORD I2CMode;

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

volatile DWORD RdIndex = 0;
volatile 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(r),data...STO 
for master write: the sequence is: STA,Addr(W),length,RE-STA,Addr(w),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 == LM75_TEMP )
	{
	  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 retVal = FALSE;
 
  /*--- Issue a start condition ---*/
  I20CONSET = I2CONSET_STA;	/* Set Start flag */
    
  /*--- Wait until START transmitted ---*/
  while( 1 )
  {
	if ( I2CMasterState == I2C_STARTED )
	{
	  retVal = TRUE;
	  break;	
	}
	if ( timeout >= MAX_TIMEOUT )
	{
	  retVal = FALSE;
	  break;
	}
	timeout++;
  }
  return( retVal );
}

/*****************************************************************************
** 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 ) 
{
  PCONP |= (1 << 19);
  PINSEL1 &= ~0x03C00000;
  PINSEL1 |= 0x01400000;	/* set PIO0.27 and PIO0.28 to I2C0 SDA and SCK */
							/* function to 01 on both SDA and SCK. */
  /*--- Clear flags ---*/
  I20CONCLR = I2CONCLR_AAC | I2CONCLR_SIC | I2CONCLR_STAC | I2CONCLR_I2ENC;    

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

  /* Install interrupt handler */	
  if ( install_irq( I2C0_INT, (void *)I2C0MasterHandler, HIGHEST_PRIORITY ) == 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一区二区三区免费野_久草精品视频
午夜精彩视频在线观看不卡| 欧美经典一区二区| 白白色 亚洲乱淫| 国产一区二区三区av电影| 肉丝袜脚交视频一区二区| 五月天精品一区二区三区| 日韩精品电影在线| 青青青爽久久午夜综合久久午夜| 亚洲成人激情综合网| 婷婷成人激情在线网| 日本中文字幕不卡| 国产麻豆精品在线观看| 国产91精品在线观看| www.激情成人| 欧美三区在线观看| 日韩情涩欧美日韩视频| 欧美精品一区二区三区蜜臀| 国产欧美日韩中文久久| 中文字幕亚洲电影| 一区二区免费在线播放| 视频一区二区中文字幕| 久久精品国产一区二区三| 国产成人亚洲综合a∨猫咪| 99免费精品在线| 精品视频123区在线观看| 欧美一卡二卡在线| 日本一区二区三级电影在线观看| 国产精品电影一区二区| 亚洲午夜久久久久久久久久久| 青青草精品视频| 国产a级毛片一区| 欧美伦理视频网站| 日本一区二区视频在线| 亚洲一区二区三区四区在线观看| 蜜桃视频第一区免费观看| 成人开心网精品视频| 欧美日韩一二三区| 中文字幕精品一区二区三区精品| 亚洲乱码国产乱码精品精的特点| 蜜臀久久99精品久久久久宅男| 成人在线视频首页| 5858s免费视频成人| 国产精品成人午夜| 另类综合日韩欧美亚洲| 色狠狠桃花综合| 国产午夜三级一区二区三| 亚洲成人1区2区| 99精品黄色片免费大全| 欧美tickling挠脚心丨vk| 曰韩精品一区二区| zzijzzij亚洲日本少妇熟睡| 欧美α欧美αv大片| 午夜在线电影亚洲一区| 国产成人精品网址| 精品国产伦一区二区三区观看方式 | 欧美一级欧美三级| 亚洲精品写真福利| 国产精品1区2区3区| 538prom精品视频线放| 亚洲人成网站在线| 成人一区二区视频| 久久久久国产精品麻豆ai换脸| 蜜臀91精品一区二区三区| 欧美性色综合网| 自拍偷拍国产亚洲| 99免费精品视频| 国产精品久久久久影院老司| 国产精品一品视频| 精品国产在天天线2019| 免费观看在线综合色| 欧美美女视频在线观看| 五月综合激情日本mⅴ| 欧美日韩国产精品自在自线| 亚洲线精品一区二区三区八戒| www.亚洲色图.com| 国产精品看片你懂得| 粉嫩av一区二区三区在线播放| 久久久精品2019中文字幕之3| 久久99精品国产91久久来源| 欧美电视剧在线观看完整版| 国内精品在线播放| 久久久国际精品| 成人晚上爱看视频| 中文字幕一区二区三区精华液 | 国产精品视频线看| 成人黄色免费短视频| 亚洲视频免费在线| 欧美在线视频日韩| 日韩—二三区免费观看av| 日韩欧美一区二区三区在线| 国产主播一区二区| 国产精品久久久久一区二区三区共 | 韩国三级在线一区| 国产欧美一区二区精品性色| a美女胸又www黄视频久久| 国产精品久久国产精麻豆99网站| 91小宝寻花一区二区三区| 一区二区免费视频| 日韩一区二区三区四区| 粉嫩av一区二区三区粉嫩| 亚洲免费观看高清| 6080日韩午夜伦伦午夜伦| 国产精品综合二区| 亚洲一区二区欧美| 精品国产乱子伦一区| 91色在线porny| 日日欢夜夜爽一区| 国产亚洲美州欧州综合国| 91尤物视频在线观看| 奇米一区二区三区av| 亚洲最新视频在线播放| 精品一区二区三区影院在线午夜| 国产99久久久国产精品| 国产欧美一区二区三区网站| 欧美亚洲禁片免费| 国产在线国偷精品免费看| 亚洲另类色综合网站| 日韩一区二区免费在线观看| 99精品久久99久久久久| 麻豆成人免费电影| 亚洲久草在线视频| 久久影视一区二区| 777久久久精品| 99久久精品国产观看| 麻豆高清免费国产一区| 夜夜嗨av一区二区三区四季av | jvid福利写真一区二区三区| 丝袜亚洲另类丝袜在线| 亚洲欧美自拍偷拍色图| 久久午夜电影网| 在线不卡中文字幕播放| 日本乱人伦一区| 成人aaaa免费全部观看| 国产一区二区三区香蕉| 日产精品久久久久久久性色| 亚洲最快最全在线视频| 国产精品人成在线观看免费| 久久先锋影音av鲁色资源网| 欧美一区二区三区视频免费| 欧美日韩色综合| 色综合久久久久综合| 成人av资源在线| 成人午夜免费视频| 成人在线视频首页| 成人午夜免费av| 国产1区2区3区精品美女| 国产精品18久久久久久久久 | 亚洲一区在线视频| 亚洲精品国产无天堂网2021| 综合在线观看色| 日韩毛片视频在线看| 国产精品国产三级国产aⅴ入口 | 欧美丰满少妇xxxxx高潮对白| 欧美午夜精品久久久久久孕妇| 在线观看日韩高清av| 91在线云播放| 在线亚洲一区二区| 欧美亚洲动漫精品| 欧美色大人视频| 91超碰这里只有精品国产| 欧美日韩亚洲综合在线 | 亚洲精品一区二区三区香蕉 | www.久久精品| 色综合一个色综合| 欧美亚洲一区二区在线| 欧美一区二区三区免费大片 | 国产精选一区二区三区| 麻豆精品一区二区av白丝在线| 久草精品在线观看| 国产成人免费av在线| 99视频精品在线| 欧美伊人精品成人久久综合97| 欧美日韩成人综合天天影院| 欧美一级夜夜爽| 国产欧美日韩不卡免费| 亚洲人成小说网站色在线| 一区二区高清视频在线观看| 免费视频最近日韩| 国产成人aaa| 在线观看日韩毛片| 精品美女在线播放| 亚洲欧美日韩在线| 日本伊人精品一区二区三区观看方式| 久久99精品久久只有精品| 成人av资源在线| 91精品视频网| 亚洲欧美综合色| 蜜臀av在线播放一区二区三区| 成人av免费网站| 欧美日韩一级二级三级| 国产清纯美女被跳蛋高潮一区二区久久w| 国产精品黄色在线观看| 日本v片在线高清不卡在线观看| 国产99久久久久| 欧美日高清视频| 一区二区中文视频| 国产一区二区三区视频在线播放| 欧洲视频一区二区| 久久久三级国产网站| 亚洲一区二区三区激情|