📄 i2c.c
字号:
#include "api.h"
#include "i2c.h"
//#ifdef CONFIG_FPGA
//--------------------------------------------------------------------------
static void vI2C_Delay(void)
{
INT8U i;
for(i=10;i>0;i--);
}
//--------------------------------------------------------------------------
void vI2C_Start(void)
{
INT8U count;
api_vI2CPinSelect();
for (count = ERROR_COUNT;count > 0;count--)
{
IIC_DAT = 1;
vI2C_Delay();
IIC_CLK = 1;
vI2C_Delay();
IIC_DAT = 0;
vI2C_Delay();
IIC_CLK = 0;
vI2C_Delay();
if (!(IIC_DAT|IIC_CLK)) break;
}
}
//--------------------------------------------------------------------------
void vI2C_Stop(void)
{
INT8U count;
for (count = ERROR_COUNT;count > 0;count--)
{
IIC_DAT = 0;
vI2C_Delay();
IIC_CLK = 0;
vI2C_Delay();
IIC_CLK = 1;
vI2C_Delay();
IIC_DAT = 1;
vI2C_Delay();
if (IIC_DAT&IIC_CLK) break;
}
api_vI2CPinRecover();
}
//--------------------------------------------------------------------------
INT8U u8I2C_ByteIn(INT8U isLast)
{
INT8U dt = 0x00;
INT8U i;
IIC_DAT = 1;
for ( i=0x80; i; i>>=1 ) {
IicBitIn();
vI2C_Delay();
if(IIC_DAT) dt |= i;
IIC_CLK = 0;
}
//send ACK
IIC_DAT = isLast;
IIC_CLK = 1;
vI2C_Delay();
IIC_CLK = 0;
vI2C_Delay();
IIC_DAT = 1;
vI2C_Delay();
return dt;
}
//--------------------------------------------------------------------------
BOOLEAN bI2C_ByteOut(INT8U dt)
{
INT8U count;
for (count = 0; count < 8; count ++, dt <<= 1) {
IicBitOut(dt & 0x80);
}
// Ack
IIC_DAT = 1;
vI2C_Delay();
IIC_CLK = 1;
vI2C_Delay();
for (count = ERROR_COUNT;count > 0;count--)
{
if (!IIC_DAT)
{
IIC_CLK = 0;
return TRUE;
}
}
IIC_CLK = 0;
api_vI2CPinRecover();
return FALSE;
}
//#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -