NULL
This commit is contained in:
117
user/MCU/lhl_i2c_soft.c
Executable file
117
user/MCU/lhl_i2c_soft.c
Executable file
@@ -0,0 +1,117 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
//##############################################################################
|
||||
void SI2C_Init(void)
|
||||
{
|
||||
SCL_OUT();
|
||||
SDA_OUT();
|
||||
SET_SCL();
|
||||
SET_SDA();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void SI2C_Start(void)
|
||||
{
|
||||
SCL_OUT();
|
||||
SDA_OUT();
|
||||
|
||||
SET_SDA();
|
||||
SET_SCL();
|
||||
|
||||
CLR_SDA();
|
||||
|
||||
SI2C_Delay();
|
||||
CLR_SCL();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void SI2C_Stop(void)
|
||||
{
|
||||
CLR_SCL();
|
||||
SI2C_Delay();
|
||||
CLR_SDA();
|
||||
SI2C_Delay();
|
||||
SET_SCL();
|
||||
SET_SDA();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void SI2C_Ack(void)
|
||||
{
|
||||
CLR_SDA();
|
||||
SI2C_Delay();
|
||||
SET_SCL();
|
||||
SI2C_Delay();
|
||||
CLR_SCL();
|
||||
SI2C_Delay();
|
||||
SET_SDA();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void SI2C_NoAck(void)
|
||||
{
|
||||
SET_SDA();
|
||||
SI2C_Delay();
|
||||
SET_SCL();
|
||||
SI2C_Delay();
|
||||
CLR_SCL();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
u8 SI2C_TestAck(void)
|
||||
{
|
||||
u8 ack;
|
||||
|
||||
SDA_IN();
|
||||
|
||||
SET_SCL();
|
||||
SI2C_Delay();
|
||||
ack = READ_SDA();
|
||||
CLR_SCL();
|
||||
SDA_OUT();
|
||||
|
||||
if(ack != 0) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
u8 SI2C_Write(u8 writeData)
|
||||
{
|
||||
u32 temp;
|
||||
|
||||
for(temp=0; temp<8; temp++)
|
||||
{
|
||||
|
||||
if((writeData & 0x80) == 0) CLR_SDA();
|
||||
else SET_SDA();
|
||||
|
||||
SET_SCL();
|
||||
SI2C_Delay();
|
||||
writeData = writeData << 1;
|
||||
CLR_SCL();
|
||||
SI2C_Delay();
|
||||
}
|
||||
|
||||
return SI2C_TestAck();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
u8 SI2C_Read(void)
|
||||
{
|
||||
u8 reedByte=0;
|
||||
u32 temp;
|
||||
|
||||
SDA_IN();
|
||||
for(temp=0; temp<8; temp++) {
|
||||
SET_SCL();
|
||||
SI2C_Delay();
|
||||
reedByte <<= 1;
|
||||
|
||||
if(READ_SDA() != 0) reedByte |= 0x01;
|
||||
CLR_SCL();
|
||||
SI2C_Delay();
|
||||
}
|
||||
SDA_OUT();
|
||||
|
||||
return(reedByte);
|
||||
}
|
||||
Reference in New Issue
Block a user