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

📄 si2chost.c

📁 mstar 776 开发的车载dvd
💻 C
字号:

#define _SI2C_HOST_C_
#include "mreg51.h"
#include "board.h"
#include <intrins.h>

#include "DataType.h"
#include "R8051XC.h"
#include "i2c.h"
#include "SI2cHost.h"

// Use software I2C bus at this moment, it needs to implement the H/W I2C bus later
// kevin 071027_0

extern BOOL IIC_AccessStart(BYTE ucSlaveAdr, BYTE trans_t);
extern BYTE IIC_GetByte (U16  bAck);
extern void IIC_Stop(void);
extern BOOLEAN IIC_SendByte(U8 u8dat);

void SI2cByteDelay(WORD delay)
{
	while(delay--)
	{
		SWIIC_Delay();
	}
}

void SI2cHostWrite(BYTE * pAddr, BYTE addrSize, BYTE * pData, BYTE dataSize)
{
	BYTE ucDummy,ucCount;
	BYTE ucSlaveAdr=SI2C_SLAVEADDR;

    ET0 = 0;
	ucDummy = I2C_ACCESS_DUMMY_TIME;
	while (ucDummy--)
	{
		if (IIC_AccessStart(ucSlaveAdr, SWIIC_WRITE) == FALSE)
			continue;

		SI2cByteDelay(SI2C_BYTE_DELAY);

		for( ucCount=0;ucCount<addrSize;ucCount++)
		{
			if (IIC_SendByte(pAddr[ucCount]) == I2C_NON_ACKNOWLEDGE)
				continue;

			SI2cByteDelay(SI2C_BYTE_DELAY);
		}

		while(dataSize--)
		{
			IIC_SendByte(*(pData++));
			SI2cByteDelay(SI2C_BYTE_DELAY);
		}

		break;
	}
	IIC_Stop();
    ET0 = 1;
}


BYTE SI2cHostRead(BYTE * pAddr, BYTE addrSize)
{
	BYTE ucDummy,ucCount,ucData;
	BYTE ucSlaveAdr=SI2C_SLAVEADDR;

    ET0 = 0;
	ucDummy = I2C_ACCESS_DUMMY_TIME;
	while (ucDummy--)
	{
		if (IIC_AccessStart(ucSlaveAdr, SWIIC_WRITE) == FALSE)
			continue;

		SI2cByteDelay(SI2C_BYTE_DELAY);

		for( ucCount=0;ucCount<addrSize;ucCount++)
		{
			if (IIC_SendByte(pAddr[ucCount]) == I2C_NON_ACKNOWLEDGE)
				continue;

			SI2cByteDelay(SI2C_BYTE_DELAY);
		}

		IIC_Stop();

		SI2cByteDelay(SI2C_READ_DELAY);

		if (IIC_AccessStart(ucSlaveAdr, I2C_TRANS_READ) == FALSE)
			continue;

		ucData=IIC_GetByte(0); // receive byte

		break;
	} // while

	IIC_Stop();
    ET0 = 1;

	return ucData;
}

void SI2cHostWrite4Bytes(BYTE data1, BYTE data2, BYTE data3, BYTE data4)
{
	BYTE addr[4];
	addr[0]=data1;
	addr[1]=data2;
	addr[2]=data3;
	addr[3]=data4;
	SI2cHostWrite(addr,sizeof(addr),NULL,0);
}

⌨️ 快捷键说明

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