⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.c

📁 ADI的ADSP-BF561下实现PAL制式video的demo。
💻 C
字号:
//Andreas Hagmann

#include <i2c.h>

void inline SetClk () {
	*pFIO0_FLAG_S = SCLK;
	ClkDelay ();
}

void inline ClrClk () {
	*pFIO0_FLAG_C = SCLK;
	ClkDelay ();
}
void inline SetData () {
	*pFIO0_FLAG_S = SDATA;
	ClkDelay ();
}

void inline ClrData () {
	*pFIO0_FLAG_C = SDATA;
	ClkDelay ();
}

bool inline GetAck () {
	bool ret;
	*pFIO0_DIR &= ~SDATA;
	*pFIO0_INEN |=  SDATA;
	//ClrData ();
	SetClk ();
	ret = *pFIO0_FLAG_D & SDATA;
	ClrClk ();
	*pFIO0_DIR |= SDATA;
	*pFIO0_INEN &= ~SDATA;
	return ret;
}

void Init () {
	*pFIO0_POLAR &= ~SDATA;		// Enable Active High
	*pFIO0_EDGE &= ~SDATA;		// Enable Level Sensitivity
	*pFIO0_DIR |=  SCLK;		// Set SCLK as output
	*pFIO0_DIR |=  SDATA;
	*pFIO0_FLAG_S = SCLK;
	*pFIO0_FLAG_S = SDATA;
}

void inline Start () {
	ClrData ();
	ClrClk ();
}

void inline Stop () {
	ClrData ();
	SetClk ();
	SetData ();
}

void inline ClkDelay () {
	int i;
	
	for (i=0; i<CLK_DELAY; i++) {
		asm ("nop;");
	}
}

bool Write (unsigned char data) {
	char i;
	bool ret;
	
	for (i=0; i<8; i++) {
		if (data & 0x80) {
			SetData ();
		}
		else {
			ClrData ();
		}
		SetClk ();
		ClrClk ();
		data <<= 1;	
	}
	
	ret = GetAck ();
	return ret;
}

bool I2C_Write(unsigned char data_out, unsigned char address)
{
	Start();							// Send start signal
	if (Write(ADV7179_ADDRESS))		// Send identifier I2C address
	{
		Stop();							// Send I2C Stop Transfer
		return true;
	}
	if (Write(address))				// Send address to device
	{
		Stop();							// Send I2C Stop Transfer
		return true;
	}
	if (Write(data_out))				// Send byte to device
	{
		Stop();							// Send I2C Stop Transfer
		return true;
	}
	Stop();								// Send I2C Stop Transfer

	return false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -