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

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

?? i2c.c

?? ADV7171 在BF553上測試通過 大家開下了
?? C
字號:
#include "system.h"


#define I2C_CLK		0x0010		// PF4
#define I2C_DATA	0x0004		// PF2

//------------------------------------------------------------------------------
// I2C Peripheral Function Prototypes
//------------------------------------------------------------------------------
void Init(void);									//  Initialize I2C port
void Start(void);									//  Sends I2C Start Trasfer
void Stop(void);									//  Sends I2C Stop Trasfer
bool Write(unsigned char data_out);				//  Writes data over the I2C bus
bool Read(unsigned char *data_in, bool send_ack);	// Reads data from the I2C bus
void SetSCLK(bool state);						//  Set SCLK to <state>
void SetSDATA(bool state);						//  Set SDATA to <state>
bool GetSDATA();								//  Get SDATA state

//------------------------------------------------------------------------------


//------------------------------------------------------------------------------
// I2C Peripheral Variables
//------------------------------------------------------------------------------
unsigned char IdentAddr = 0x00;
unsigned int I2C_Delay = 0x00000000;

//------------------------------------------------------------------------------


//------------------------------------------------------------------------------
// Procedure:	I2C_Init
// Inputs:		identaddr
// Outputs:		bool
// Description:	Initialize I2C and setup Slave Ident Addr. then check the ident
//				for response and returns true if ok.
//------------------------------------------------------------------------------
bool I2C_Init(unsigned char identaddr)
{
	bool ret;

	// Calculate Delay NEED FIX!!!
	I2C_Delay = ((*pPLL_CTL & 0x7e00) >> 9); //jiapeng change 9 to 8;
	if ((*pPLL_CTL & 0x0001) == 0x0001)
		I2C_Delay /= 2;
        //jiapeng adds it.   
	I2C_Delay *= 2;

	IdentAddr = identaddr;

	Init();								// Initialize I2C port
	Start();								// Check Slave Ident Addr
	ret = Write(IdentAddr);
	Stop();

	return ret;							// Return true if Ident Addr. Ok
}


//------------------------------------------------------------------------------
// Procedure:	I2C_Write
// Inputs:		data out, address
// Outputs:		bool
// Description:	Writes a byte to the given address and return status.
//------------------------------------------------------------------------------
bool I2C_Write(unsigned char data_out, unsigned char address)
{
	Start();							// Send start signal
	if (!Write(IdentAddr))			// Send identifier I2C address
	{
		Stop();						// Send I2C Stop Transfer
		return false;
	}
	if (!Write(address))				// Send address to device
	{
		Stop();						// Send I2C Stop Transfer
		return false;
	}
	if (!Write(data_out))				// Send byte to device
	{
		Stop();						// Send I2C Stop Transfer
		return false;
	}
	Stop();							// Send I2C Stop Transfer

	return true;
}



//------------------------------------------------------------------------------
// Procedure:	I2C_Read
// Inputs:		*data_in, address
// Outputs:		bool
// Description:	Reads a byte from the given address and return status.
//------------------------------------------------------------------------------
bool I2C_Read(unsigned char *data_in, unsigned char address)
{
	Start();							// Send start signal
	if (!Write(IdentAddr))			// Send identifer I2C address
	{
		Stop();						// Send I2C Stop Transfer
		return false;
	}
	if (!Write(address))				// Send address to device
	{
		Stop();						// Send I2C Stop Transfer
		return false;
	}
	Start();							// Send I2C Start Transer
	if (!Write(IdentAddr+1))			// Send identifer I2C address
	{
		Stop();						// Send I2C Stop Transfer
		return false;
	}
	if (!Read(data_in, false))			// Read byte
	{
		Stop();						// Send I2C Stop Transfer
		return false;
	}
	Stop();							// Send I2C Stop Transfer

	return true;
}


//------------------------------------------------------------------------------
// I2C Functions - Master
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// 	Routine:	Init
//	Inputs:	none
//	Outputs:	none
//	Purpose:	Initialize I2C for the ADu812C
//------------------------------------------------------------------------------
inline void Init(void)
{
	*pFIO_DIR |= I2C_CLK;		// Set SCLK as output and SDATA as input/high
	*pFIO_POLAR &= ~I2C_DATA;	// Enable Active Hight
	*pFIO_EDGE &= ~I2C_DATA;	// Enable Level Sensitivity
	*pFIO_INEN |= I2C_DATA;		// Enable SDATA Input Buffer
	SetSDATA(1);				// Set SDATA as input/high
	SetSCLK(1);					// Set SCLK high
}


//------------------------------------------------------------------------------
// 	Routine:	Start
//	Inputs:		none
//	Outputs:	none
//	Purpose:	Sends I2C Start Trasfer - "S"
//------------------------------------------------------------------------------
inline void Start(void)
{
	//11182003 - Following line has been added! (Fixed thanks to Andrew Seddon).
	//			Shouldn't Stop() be setting SCLK high?
	SetSCLK(1);		// Set SCLK high
	SetSDATA(0);	// Set SDATA output/low
	SetSCLK(0);		// Set SCLK low
}


//------------------------------------------------------------------------------
// 	Routine:	Stop
//	Inputs:	none
//	Outputs:	none
//	Purpose:	Sends I2C Stop Trasfer - "P"
//------------------------------------------------------------------------------
inline void Stop(void)
{
	SetSDATA(0);	// Set SDATA output/low
	SetSCLK(1);		// Set SCLK high
	SetSDATA(1);	// Set SDATA as input/high
}


//------------------------------------------------------------------------------
// 	Routine:	Write
//	Inputs:	data_out
//	Outputs:	bool
//	Purpose:	Writes data over the I2C bus and return status.
//------------------------------------------------------------------------------
inline bool Write(unsigned char data_out)
{
	unsigned char index;

	// An I2C output byte is bits 7-0 (MSB to LSB). Shift one bit at a time to
	// the SDATA output, and then clock the data to the I2C Slave device.

	// Send 8 bits out the port	
	for (index = 0; index < 8; index++)
	{
		// Output the data bit to the device
		SetSDATA(((data_out & 0x80) ? 1 : 0));

		data_out <<= 1;		// Shift the byte by one bit
		SetSCLK(1);			// Set SCLK high
		SetSCLK(0);			// Set SCLK low
	}

	SetSDATA(1);			// Set SDATA input/high
	SetSCLK(1);				// Set SCLK high

	if (!GetSDATA())
	{
		SetSCLK(0);			// Set SCLK low
		return true;			// ACK from slave
	}
	else
	{
		SetSCLK(0);			// Set SCLK low
		return false;			// NACK from slave
	}
}



//------------------------------------------------------------------------------
// 	Routine:	Read
//	Inputs:	*data_in, send_ack (if true send the ACK signal else send NACK)
//	Outputs:	bool
//	Purpose:	Reads data from the I2C bus and return it in data_in.
//			Returns status.
//------------------------------------------------------------------------------
inline bool Read(unsigned char *data_in, bool send_ack)
{
	unsigned char index;

	*data_in = 0x00;

	SetSDATA(1);					// Set SDATA input/high
	SetSCLK(0);						// Set SCLK low

	// Get 8 bits from the device
	for (index = 0; index < 8; index++)
	{
		*data_in <<= 1;				// Shift the data right 1 bit
		SetSCLK(1);					// Set SCLK high
		//11182003 - Line moved...
		//SetSCLK(0);				// Set SCLK low
		*data_in |= GetSDATA();		// Read the data bit
		//11182003 - to here! (Fixed thanks to Andrew Seddon).
		SetSCLK(0);					// Set SCLK low
	}

	if (send_ack)
		SetSDATA(0);				// Set data pin to output/low to ACK the read
	else
		SetSDATA(1);				// Set data pin to input/high to NACK the read

	SetSCLK(1);						// Set SCLK high
	SetSCLK(0);						// Set SCLK low
	SetSDATA(0);					// Set SDATA output/low
	SetSDATA(1);					// Set SDATA input/high

	return true;
}


//------------------------------------------------------------------------------
// 	Routine:	SetSDATA
//	Inputs:	state
//	Outputs:	none
//	Purpose:	Set the I2C port SDATA pin to <state>.
//------------------------------------------------------------------------------
inline void SetSDATA(bool state)
{
	unsigned int i, d;
	
	if (state)
	{
		*pFIO_DIR &= ~I2C_DATA;		// Set SDATA as input/high.
	}
	else
	{
		*pFIO_INEN &= ~I2C_DATA;
		*pFIO_FLAG_C = I2C_DATA;
		*pFIO_DIR |= I2C_DATA;
		*pFIO_FLAG_C = I2C_DATA;	// Set SDATA as output.
		*pFIO_INEN |= I2C_DATA;
	}

	// Delay
	for (i = 0; i < I2C_Delay; i++)
	{
		asm("nop;");
	}
}



//------------------------------------------------------------------------------
// 	Routine:	SetSCLK
//	Inputs:	state
//	Outputs:	none
//	Purpose:	Set the I2C port SCLK pin to <state>.
//------------------------------------------------------------------------------
inline void SetSCLK(bool state)
{
	unsigned int i, d;
	
	if (state)
	{
		*pFIO_FLAG_D |= I2C_CLK;		// Set SCLK high.
	}
	else
	{
		*pFIO_FLAG_D &= ~I2C_CLK;	// Set SCLK low.
	}

	// Delay
	for (i = 0; i < I2C_Delay; i++)
	{
		asm("nop;");
	}
}


//------------------------------------------------------------------------------
// 	Routine:	GetSDATA
//	Inputs:	none
//	Outputs:	bool
//	Purpose:	Get the I2C port SDATA pin state.
//------------------------------------------------------------------------------
inline bool GetSDATA()
{
	return ((*pFIO_FLAG_D & I2C_DATA) ? 1 : 0);	
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产激情视频一区二区在线观看| 色婷婷精品久久二区二区蜜臂av| 91天堂素人约啪| 国产日韩精品一区| 欧美精品欧美精品系列| 中文字幕一区二区三区在线观看| 欧美亚洲综合色| 亚洲美女淫视频| 播五月开心婷婷综合| 91黄色免费观看| 亚洲综合色婷婷| 蜜臀久久99精品久久久画质超高清| 亚洲一区欧美一区| 欧美日韩一级二级三级| 一级精品视频在线观看宜春院| 久久久高清一区二区三区| 欧美亚洲一区二区在线| 伊人色综合久久天天| 欧美男女性生活在线直播观看| 久久精品国产亚洲高清剧情介绍 | 一个色在线综合| 欧美曰成人黄网| 精品一区二区综合| 一区免费观看视频| 欧美唯美清纯偷拍| 日韩电影一区二区三区| 国产日韩欧美激情| youjizz久久| 秋霞电影网一区二区| 欧美精品色综合| 亚洲一区二区免费视频| 国产一区二区三区久久悠悠色av| 亚洲福利国产精品| 欧美在线观看你懂的| 午夜精品福利久久久| 精品毛片乱码1区2区3区| 色婷婷综合久久久久中文一区二区 | 中文字幕一区免费在线观看| 4hu四虎永久在线影院成人| 久久综合久久鬼色| 色999日韩国产欧美一区二区| 麻豆国产一区二区| 17c精品麻豆一区二区免费| 精品99久久久久久| 欧美日韩亚洲综合一区二区三区| 成人一级片在线观看| 中文av字幕一区| 99视频超级精品| 国产精品一品视频| 亚洲最色的网站| 国产视频一区不卡| 精品国产一区二区三区忘忧草| 欧美午夜精品久久久久久超碰 | 最新国产成人在线观看| 日韩免费观看高清完整版 | 欧美视频日韩视频| 国产麻豆精品一区二区| 日韩高清不卡在线| 亚洲综合自拍偷拍| 中文字幕乱码亚洲精品一区| 91亚洲精品一区二区乱码| 中文字幕亚洲区| 国产女同互慰高潮91漫画| 精品人在线二区三区| 欧美视频第二页| 国产成人免费视频精品含羞草妖精| 国产精品久久久久久户外露出 | 色综合天天综合网国产成人综合天 | 欧美一区二区在线不卡| 欧美成人一区二区三区| 欧美国产精品v| 亚洲伊人伊色伊影伊综合网 | 色老头久久综合| 在线播放91灌醉迷j高跟美女 | 美国毛片一区二区| 成人性生交大合| 欧美日韩久久久一区| 欧美成人精品福利| 一区视频在线播放| 美女网站色91| av网站免费线看精品| 91精品在线麻豆| 中文字幕精品一区二区三区精品| 亚洲第一激情av| 国产黄色成人av| 欧美日韩激情一区二区三区| 欧美精品一区二区蜜臀亚洲| 一区二区三区四区在线播放| 精品在线你懂的| 欧美亚洲高清一区| 久久久久97国产精华液好用吗| 一区二区三区av电影| 国产一区二区成人久久免费影院| 在线看日韩精品电影| 国产欧美一区二区精品性色 | 欧美国产日韩a欧美在线观看| 午夜精品久久久久久久久| 国产盗摄一区二区三区| 91精品国产一区二区三区| 亚洲欧洲一区二区三区| 国产精品综合二区| 6080国产精品一区二区| 亚洲女女做受ⅹxx高潮| 国产精品77777| 欧美刺激午夜性久久久久久久| 亚洲精品视频一区| 国产成人av电影在线观看| 日韩一区二区中文字幕| 亚洲视频在线观看一区| 国产精品一区二区男女羞羞无遮挡 | 欧美亚洲综合另类| 国产精品久久777777| 国产制服丝袜一区| 91精品久久久久久蜜臀| 亚洲国产va精品久久久不卡综合| www.亚洲激情.com| 国产亚洲一本大道中文在线| 麻豆91在线观看| 91精品国产一区二区三区蜜臀| 亚洲国产日日夜夜| 91丨九色丨国产丨porny| 中文av一区二区| 成人午夜在线免费| 国产日产精品1区| 国产一区二区福利| 久久久久久久久久美女| 国产一区二区三区高清播放| 日韩视频国产视频| 美女脱光内衣内裤视频久久影院| 6080日韩午夜伦伦午夜伦| 偷拍日韩校园综合在线| 91精品麻豆日日躁夜夜躁| 日韩成人dvd| 日韩一级黄色大片| 日本vs亚洲vs韩国一区三区二区 | 日韩精品一区二区三区在线| 奇米综合一区二区三区精品视频| 51精品久久久久久久蜜臀| 日韩在线一区二区| 91精品国产入口在线| 日本欧美一区二区| 精品久久久三级丝袜| 国产精品538一区二区在线| 久久精品视频在线免费观看| 国产成人福利片| 国产精品三级av| 91免费观看视频在线| 一区二区三区中文免费| 欧美熟乱第一页| 美腿丝袜在线亚洲一区| 精品国产乱码久久久久久1区2区| 国产一区二区三区四区五区入口| 久久精品夜色噜噜亚洲a∨| 成人网男人的天堂| 亚洲精品成人少妇| 欧美一区二区三区喷汁尤物| 韩国女主播成人在线观看| 2020国产精品自拍| 成人av电影在线网| 亚洲影院免费观看| 日韩美一区二区三区| 国产很黄免费观看久久| 亚洲精品久久久久久国产精华液| 欧美人牲a欧美精品| 久久99精品视频| 亚洲色图制服丝袜| 91麻豆精品国产91久久久更新时间| 国产一区美女在线| 亚洲视频在线一区二区| 欧美一区二视频| av午夜一区麻豆| 日韩av中文在线观看| 国产亚洲欧美色| 欧美日韩一二三区| 国产一区视频在线看| 亚洲自拍另类综合| 国产亚洲欧美在线| 欧美日韩美少妇| 国产精品一区二区你懂的| 亚洲成在人线在线播放| 久久这里都是精品| 欧美亚洲动漫另类| 成人午夜av在线| 日韩av高清在线观看| 国产精品成人免费在线| 欧美电影精品一区二区| 日本韩国欧美在线| 国产酒店精品激情| 日本一不卡视频| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 亚洲日本va午夜在线电影| 91精品国产综合久久久蜜臀粉嫩 | eeuss鲁片一区二区三区在线看| 日产欧产美韩系列久久99| 国产清纯在线一区二区www| 欧美精品久久久久久久久老牛影院| 高清不卡一区二区| 视频一区中文字幕国产| 中文字幕在线不卡国产视频| 欧美久久久久久久久久|