2026-03-20 21:16:58 +08:00
|
|
|
#include "../main/SystemInclude.h"
|
2026-03-20 21:19:04 +08:00
|
|
|
|
2026-03-20 21:16:58 +08:00
|
|
|
//##############################################################################
|
|
|
|
|
void SI2C_Init(void)
|
2026-03-20 21:19:04 +08:00
|
|
|
{
|
2026-03-20 21:16:58 +08:00
|
|
|
SCL_OUT();
|
2026-03-20 21:19:04 +08:00
|
|
|
SDA_OUT();
|
|
|
|
|
|
2026-03-20 21:16:58 +08:00
|
|
|
SET_SCL();
|
|
|
|
|
SET_SDA();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
void SI2C_Start(void)
|
|
|
|
|
{
|
|
|
|
|
SCL_OUT();
|
|
|
|
|
SDA_OUT();
|
|
|
|
|
|
2026-03-20 21:19:04 +08:00
|
|
|
//CLR_SCL();
|
|
|
|
|
SET_SDA();
|
|
|
|
|
//SI2C_Delay();
|
2026-03-20 21:16:58 +08:00
|
|
|
SET_SCL();
|
2026-03-20 21:19:04 +08:00
|
|
|
//SI2C_Delay();
|
2026-03-20 21:16:58 +08:00
|
|
|
CLR_SDA();
|
|
|
|
|
SI2C_Delay();
|
|
|
|
|
CLR_SCL();
|
2026-03-20 21:19:04 +08:00
|
|
|
//SI2C_Delay();
|
2026-03-20 21:16:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
|
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();
|
2026-03-20 21:19:04 +08:00
|
|
|
for(temp=0; temp<8; temp++)
|
|
|
|
|
{
|
2026-03-20 21:16:58 +08:00
|
|
|
SET_SCL();
|
|
|
|
|
SI2C_Delay();
|
2026-03-20 21:19:04 +08:00
|
|
|
reedByte = reedByte << 1;
|
2026-03-20 21:16:58 +08:00
|
|
|
|
|
|
|
|
if(READ_SDA() != 0) reedByte |= 0x01;
|
|
|
|
|
CLR_SCL();
|
|
|
|
|
SI2C_Delay();
|
|
|
|
|
}
|
|
|
|
|
SDA_OUT();
|
|
|
|
|
|
|
|
|
|
return(reedByte);
|
|
|
|
|
}
|