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

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

?? i2c.c

?? ADI blackfin DSP的基于device friver的jpeg壓縮算法
?? C
字號:
//--------------------------------------------------------------------------//
//																			//
//	 Name: 	I2C Communication for the ADSP-BF533 EZ-KIT Lite				//
//																			//
//--------------------------------------------------------------------------//
//																			//
//	(C) Copyright 2003 - Carsten Knop.  All rights reserved.				//
//																			//
//	Project Name:	BF533 C I2C	Communication (Bit Banged)					//
//																			//
//	Date Modified:	09/30/03		CK		Rev 0.9							//
//	Date Modified:	11/18/03		CK		Rev 1.0							//
//					Fixed Read() function thanks to Andrew Seddon and the	//
//					www.blackfin.org's forum.								//
//																			//
//	Software:		VisualDSP++3.1											//
//																			//
//	Hardware:		ADSP-BF533 EZ-KIT Board									//
//																			//
//	Connections:															//
//																			//
//	Purpose:		I2C Communication with ADV7171 Encoder and				//
//					ADV7183 Decoder.										//
//																			//
//	To Do:			Fix dDelay Method. (100 khz/400 khz or faster to support	//
//					extra added I2C ICs such as the fast serial FRAMs.		//
//					Extra functions should be added to read and write		//
//					strings.												//
//--------------------------------------------------------------------------//

#include "I2C.h"

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


//------------------------------------------------------------------------------
// I2C Peripheral Variables
//------------------------------------------------------------------------------
u8  byIdentAddr = 0x00;
u32 dDelay = 0x00000000;

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

	// Calculate dDelay NEED FIX!!!
	dDelay = ((*pPLL_CTL & 0x7e00) >> 9);
	if ((*pPLL_CTL & 0x0001) == 0x0001)
		dDelay /= 2;

	byIdentAddr = identaddr;

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

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


//------------------------------------------------------------------------------
// Procedure:	I2C_Write
// Inputs:		data out, address
// Outputs:		RESULT
// Description:	Writes a byte to the given address and return status.
//------------------------------------------------------------------------------
RESULT I2C_Write(u8 *pDataOut, u8 address,char num_data)
{
	u8 count = 0;
	Start();							// Send start signal
	if (Write(byIdentAddr) != EJ_ERR_NONE)				// Send identifier I2C address
	{
		Stop();							// Send I2C Stop Transfer
		return EJ_ERR_UNKNOWN;
	}
	if (Write(address) != EJ_ERR_NONE)				// Send address to device
	{
		Stop();							// Send I2C Stop Transfer
		return EJ_ERR_UNKNOWN;
	}
    for (count = 0;count < num_data;count++)
	{	
		if (Write(*pDataOut) != EJ_ERR_NONE)				// Send byte to device
		{
			Stop();							// Send I2C Stop Transfer
			return EJ_ERR_UNKNOWN;
		}
		pDataOut ++;
	}
	Stop();								// Send I2C Stop Transfer

	return EJ_ERR_NONE;
}

//------------------------------------------------------------------------------
// Procedure:	I2C_Read
// Inputs:		*data_in, address
// Outputs:		RESULT
// Description:	Reads a byte from the given address and return status.
//------------------------------------------------------------------------------
RESULT I2C_Read(u8 *pbyDataIn, u8 byAddress,char numData)
{
	u8 count = 0;
	Start();							// Send start signal
	if (Write(byIdentAddr) != EJ_ERR_NONE)				// Send identifer I2C address
	{
		Stop();							// Send I2C Stop Transfer
		return EJ_ERR_UNKNOWN;
	}
	if (Write(byAddress) != EJ_ERR_NONE)				// Send address to device
	{
		Stop();							// Send I2C Stop Transfer
		return EJ_ERR_UNKNOWN;
	}
	Start();							// Send I2C Start Transer
	if (Write(byIdentAddr+1) != EJ_ERR_NONE)			// Send identifer I2C address
	{
		Stop();							// Send I2C Stop Transfer
		return EJ_ERR_UNKNOWN;
	}
    for (count = 0;count < numData;count++)
	{
		if(count == numData)
		{
			if (Read(pbyDataIn, EJ_ERR_UNKNOWN) != EJ_ERR_NONE)			// Read byte
			{
				Stop();							// Send I2C Stop Transfer
				return EJ_ERR_UNKNOWN;
			}    
		}
		else
		{
			if (Read(pbyDataIn, EJ_ERR_NONE)!= EJ_ERR_NONE)			// Read byte
			{
				Stop();							// Send I2C Stop Transfer
				return EJ_ERR_UNKNOWN;
			}
			pbyDataIn ++;
		}
	}
	Stop();								// Send I2C Stop Transfer

	return EJ_ERR_NONE;
}

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

//------------------------------------------------------------------------------
// 	Routine:	Init
//	Inputs:		none
//	Outputs:	none
//	Purpose:	Initialize I2C for the ADu812C
//------------------------------------------------------------------------------
void INL Init(void)
{
#if defined(__ADSP_EDINBURGH__)
	*pFIO_DIR	|=  SCLK;		// Set SCLK as output and SDATA as input/high
	*pFIO_POLAR	&= ~SDATA;		// Enable Active Hight
	*pFIO_EDGE	&= ~SDATA;		// Enable Level Sensitivity
	*pFIO_INEN	|=  SDATA;		// Enable SDATA Input Buffer
#endif	
	



#if defined(__ADSP_TETON__)
	*pFIO0_DIR	|=  SCLK;		// Set SCLK as output and SDATA as input/high
	*pFIO0_POLAR	&= ~SDATA;		// Enable Active Hight
	*pFIO0_EDGE	&= ~SDATA;		// Enable Level Sensitivity
	*pFIO0_INEN	|=  SDATA;		// Enable SDATA Input Buffer
#endif

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

}

//------------------------------------------------------------------------------
// 	Routine:	Start
//	Inputs:		none
//	Outputs:	none
//	Purpose:	Sends I2C Start Trasfer - "S"
//------------------------------------------------------------------------------
void INL 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"
//------------------------------------------------------------------------------
void INL Stop(void)
{
	SetSDATA(0);				// Set SDATA output/low
	SetSCLK(1);					// Set SCLK high
	SetSDATA(1);				// Set SDATA as input/high
}

//------------------------------------------------------------------------------
// 	Routine:	Write
//	Inputs:		pDataOut
//	Outputs:	RESULT
//	Purpose:	Writes data over the I2C bus and return status.
//------------------------------------------------------------------------------
RESULT INL Write(u8 pByDataOut)
{
	u8 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(((pByDataOut & 0x80) ? 1 : 0));

		pByDataOut <<= 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 EJ_ERR_NONE;						// ACK from slave
	} else
	{
		SetSCLK(0);							// Set SCLK low
		return EJ_ERR_UNKNOWN;						// NACK from slave
	}

}

//------------------------------------------------------------------------------
// 	Routine:	Read
//	Inputs:		*data_in, send_ack (if EJ_ERR_NONE send the ACK signal else send NACK)
//	Outputs:	RESULT
//	Purpose:	Reads data from the I2C bus and return it in data_in.
//				Returns status.
//------------------------------------------------------------------------------
RESULT INL Read(u8 *pByDataIn, bool bSendAck)
{
	u8 index;

	*pByDataIn = 0x00;

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

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

	if (bSendAck)
		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 EJ_ERR_NONE;

}

//------------------------------------------------------------------------------
// 	Routine:	SetSDATA
//	Inputs:		state
//	Outputs:	none
//	Purpose:	Set the I2C port SDATA pin to <state>.
//------------------------------------------------------------------------------
void INL SetSDATA(bool state)
{
	u32 i, d;
#if defined(__ADSP_EDINBURGH__)
	if (state)
	{
		*pFIO_DIR	&=  ~SDATA;				// Set SDATA as input/high.
		*pFIO_INEN	|=  SDATA;		// Enable SDATA Input Buffer
	} else
	{
		*pFIO_DIR	|=  SDATA;				// Set SDATA as output.
		*pFIO_INEN	&=  ~SDATA;		// Disable SDATA Input Buffer
		*pFIO_FLAG_D &= ~SDATA;				// Set SDATA low.
	}
#endif
#if defined(__ADSP_TETON__)

	if (state)
	{
		*pFIO0_DIR	&=  ~SDATA;				// Set SDATA as input/high.
		*pFIO0_INEN	|=  SDATA;		// Enable SDATA Input Buffer
	} else
	{
		*pFIO0_DIR	|=  SDATA;				// Set SDATA as output.
		*pFIO0_INEN	&=  ~SDATA;		// Disable SDATA Input Buffer
		*pFIO0_FLAG_D &= ~SDATA;				// Set SDATA low.
	}
	
#endif
	// dDelay
	for (i = 0; i < dDelay; i++) { asm("nop;"); }

}

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

	if (state)
	{
		*pFIO0_FLAG_D |= SCLK;				// Set SCLK high.
	} else
	{
		*pFIO0_FLAG_D &= ~SCLK;				// Set SCLK low.
	}
#endif
	// dDelay
	for (i = 0; i < dDelay; i++) { asm("nop;"); }

}

//------------------------------------------------------------------------------
// 	Routine:	GetSDATA
//	Inputs:		none
//	Outputs:	RESULT
//	Purpose:	Get the I2C port SDATA pin state.
//------------------------------------------------------------------------------
bool INL GetSDATA(void)
{
#if defined(__ADSP_EDINBURGH__)
	return ((*pFIO_FLAG_D & SDATA) ? 1 : 0);	
#endif

#if defined(__ADSP_TETON__)
	return ((*pFIO0_FLAG_D & SDATA) ? 1 : 0);		
#endif

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美老女人第四色| 成人免费的视频| 国产综合色视频| 国产欧美日产一区| 高清国产一区二区三区| 亚洲成a人v欧美综合天堂| 欧美写真视频网站| 91黄色在线观看| 欧美国产精品久久| 久久精品国产成人一区二区三区 | 日本aⅴ精品一区二区三区| 国产成人免费在线| 欧美tk—视频vk| 日本视频免费一区| 欧美视频在线观看一区| 亚洲欧美自拍偷拍| 极品少妇一区二区| 日韩午夜在线观看视频| 亚洲成精国产精品女| 99精品久久免费看蜜臀剧情介绍| 久久综合色8888| 久草热8精品视频在线观看| 91麻豆6部合集magnet| 亚洲同性gay激情无套| 欧美日韩国产免费一区二区 | 欧美顶级少妇做爰| 亚洲欧美偷拍另类a∨色屁股| 99久久久精品免费观看国产蜜| 欧美一区二区女人| 91超碰这里只有精品国产| 一区二区三区四区在线免费观看| 久久久久久久精| 麻豆专区一区二区三区四区五区| 9i看片成人免费高清| 色av综合在线| 激情综合色播五月| 欧美经典一区二区三区| 精品一区二区三区不卡 | 国产一区二区精品久久99| 欧美国产一区二区| 在线中文字幕一区二区| 成人av免费在线观看| 日本道色综合久久| 91精品国产综合久久精品性色| 日本一区二区免费在线| 一区二区三区在线观看网站| 伊人性伊人情综合网| 午夜精品视频一区| 亚洲成人自拍一区| 成人av在线资源| 国产91精品在线观看| 日本成人超碰在线观看| 麻豆中文一区二区| 欧美制服丝袜第一页| 久久亚洲精品小早川怜子| 国产精品福利影院| 亚洲国产色一区| 亚洲一区二区不卡免费| 亚洲四区在线观看| 久久久亚洲欧洲日产国码αv| 欧美sm美女调教| 精品三级在线看| 欧美午夜寂寞影院| 精品国产91亚洲一区二区三区婷婷| 91在线云播放| 日韩一级成人av| 日韩av一二三| 日韩欧美的一区| 日本成人在线视频网站| 色老头久久综合| 亚洲欧美另类小说| 日韩中文字幕av电影| 色婷婷国产精品综合在线观看| 7777精品久久久大香线蕉| 国产精品免费aⅴ片在线观看| 国产成人综合亚洲网站| 国产精品久久777777| 欧美日韩综合在线免费观看| 国产精品77777| 五月天国产精品| 国产精品不卡在线观看| 精品国产乱码久久久久久图片 | 不卡电影一区二区三区| 日本一道高清亚洲日美韩| 亚洲色图欧洲色图婷婷| 欧美精品一区二区三区蜜桃视频| 欧美亚洲国产bt| eeuss国产一区二区三区| 免费观看一级特黄欧美大片| 亚洲免费电影在线| 国产日韩欧美不卡| 日韩网站在线看片你懂的| 欧美视频日韩视频| 91美女视频网站| 国产成人精品综合在线观看| 极品销魂美女一区二区三区| 日韩—二三区免费观看av| 亚洲自拍偷拍九九九| 亚洲欧美一区二区三区久本道91 | 日韩区在线观看| 欧美日韩国产精选| 欧洲日韩一区二区三区| 91浏览器打开| 色综合天天做天天爱| 成人网在线播放| 成人av手机在线观看| 顶级嫩模精品视频在线看| 国产美女主播视频一区| 国产精品一区二区久久精品爱涩| 午夜欧美电影在线观看| 亚洲一区日韩精品中文字幕| 一区二区在线免费| 亚洲精品久久久蜜桃| 一区二区三区自拍| 亚洲国产视频网站| 亚洲国产精品一区二区久久| 亚洲成人动漫在线免费观看| 亚洲高清免费在线| 性感美女久久精品| 秋霞午夜鲁丝一区二区老狼| 免费日本视频一区| 日韩精品一二三区| 免费欧美在线视频| 寂寞少妇一区二区三区| 丰满岳乱妇一区二区三区| 成人av资源站| 91国产免费看| 7777女厕盗摄久久久| 欧美一区二区三区电影| 精品少妇一区二区三区在线播放 | 三级亚洲高清视频| 日本成人中文字幕| 国产麻豆精品在线| 成人av免费在线| 欧美日韩免费不卡视频一区二区三区| 在线一区二区观看| 91精品国产综合久久香蕉的特点 | 丁香网亚洲国际| 欧美日韩中文字幕一区二区| 日韩精品一区二区三区三区免费| 久久精品男人的天堂| 亚洲美女偷拍久久| 琪琪久久久久日韩精品| 国产精品一区二区91| 91国偷自产一区二区开放时间| 91精品国模一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美日韩一区二区在线观看视频 | 欧美人体做爰大胆视频| 国产欧美1区2区3区| 亚洲一区二区三区三| 国产在线精品不卡| 欧美丰满嫩嫩电影| 久久影院午夜论| 亚洲综合偷拍欧美一区色| 美女任你摸久久| 99re成人精品视频| 日韩一区二区中文字幕| 中文字幕欧美一| 青草av.久久免费一区| aa级大片欧美| 久久亚洲春色中文字幕久久久| 亚洲综合在线五月| 国产91精品在线观看| 51精品视频一区二区三区| 国产精品入口麻豆九色| 蜜臀av一区二区在线免费观看 | 国产精品白丝av| 69av一区二区三区| 国产精品久久久久四虎| 精品亚洲欧美一区| 精品视频在线免费看| 1024成人网色www| 国产一区二区三区在线观看免费视频| 欧美性做爰猛烈叫床潮| 中文字幕一区二区三区av | 日本少妇一区二区| 91极品视觉盛宴| 日韩美女精品在线| 国产成人免费在线| 精品国产乱码久久久久久图片| 日韩激情中文字幕| 欧美精品三级日韩久久| 一区二区三区蜜桃| 99视频在线精品| 国产精品美女久久久久久久久 | 久久国产精品免费| 欧美三级电影精品| 亚洲在线中文字幕| 91久久精品一区二区三区| 自拍偷拍国产精品| 成人av一区二区三区| 国产精品欧美经典| aa级大片欧美| 亚洲人成影院在线观看| 99riav久久精品riav| 亚洲视频免费在线| 色诱亚洲精品久久久久久| 亚洲日本中文字幕区| 欧美日韩黄色一区二区|