237 lines
4.4 KiB
C
Executable File
237 lines
4.4 KiB
C
Executable File
#include "../main/SystemInclude.h"
|
|
|
|
//##############################################################################
|
|
void SI2C_Init(void)
|
|
{
|
|
SCL_OUT();
|
|
SDA_OUT();
|
|
|
|
SET_SCL();
|
|
SET_SDA();
|
|
}
|
|
|
|
/******************************************************************************/
|
|
void SI2C_Start(void)
|
|
{
|
|
SCL_OUT();
|
|
SDA_OUT();
|
|
|
|
//CLR_SCL();
|
|
SET_SDA();
|
|
//SI2C_Delay();
|
|
SET_SCL();
|
|
//SI2C_Delay();
|
|
CLR_SDA();
|
|
SI2C_Delay();
|
|
CLR_SCL();
|
|
//SI2C_Delay();
|
|
}
|
|
|
|
/******************************************************************************/
|
|
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 = reedByte << 1;
|
|
|
|
if(READ_SDA() != 0) reedByte |= 0x01;
|
|
CLR_SCL();
|
|
SI2C_Delay();
|
|
}
|
|
SDA_OUT();
|
|
|
|
return(reedByte);
|
|
}
|
|
|
|
/******************************************************************************/
|
|
//void SI2C_Start(void)
|
|
//{
|
|
// SDA_OUT();
|
|
// SCL_OUT();
|
|
// SET_SCL();
|
|
// SET_SDA();
|
|
//
|
|
// SI2C_Delay();
|
|
// CLR_SDA();
|
|
// SI2C_Delay();
|
|
//
|
|
// CLR_SCL();
|
|
//}
|
|
|
|
///******************************************************************************/
|
|
//void SI2C_Stop(void)
|
|
//{
|
|
// SDA_OUT();
|
|
// SCL_OUT();
|
|
// SET_SCL();
|
|
// CLR_SDA();
|
|
// SI2C_Delay();
|
|
//
|
|
// SET_SDA();
|
|
// SI2C_Delay();
|
|
//}
|
|
|
|
///******************************************************************************/
|
|
//void SI2C_Ack(void)
|
|
//{
|
|
// SDA_OUT();
|
|
// CLR_SDA();
|
|
// SI2C_Delay();
|
|
//
|
|
// SET_SCL();
|
|
// SI2C_Delay();
|
|
// CLR_SCL();
|
|
//}
|
|
|
|
///******************************************************************************/
|
|
//void SI2C_NoAck(void)
|
|
//{
|
|
// SDA_OUT();
|
|
// 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();
|
|
// SI2C_Delay();
|
|
//
|
|
// //SDA_OUT();
|
|
// //SET_SDA();
|
|
// //SI2C_Delay();
|
|
//
|
|
// if (ack == 0) return 0;
|
|
//
|
|
// return 0;
|
|
//}
|
|
|
|
///******************************************************************************/
|
|
//u8 SI2C_Write(u8 writeData)
|
|
//{
|
|
// SDA_OUT();
|
|
// SI2C_Delay();
|
|
// for(u16 temp=0; temp<8; temp++)
|
|
// {
|
|
// if((writeData & 0x80) == 0x80) SET_SDA();
|
|
// else CLR_SDA();
|
|
//
|
|
// SET_SCL();
|
|
// writeData <<= 1;
|
|
// SI2C_Delay();
|
|
// CLR_SCL();
|
|
// SI2C_Delay();
|
|
// }
|
|
//
|
|
// SET_SDA();
|
|
// return SI2C_TestAck();
|
|
//
|
|
//}
|
|
|
|
///******************************************************************************/
|
|
//u8 SI2C_Read(void)
|
|
//{
|
|
// u8 reedByte=0;
|
|
//
|
|
// SDA_IN();
|
|
// for(u16 temp=0; temp<8; temp++)
|
|
// {
|
|
// SET_SCL();
|
|
// SI2C_Delay();
|
|
// reedByte = reedByte << 1;
|
|
// if(READ_SDA() == GPIO_PIN_SET) reedByte |= 0x01;
|
|
// CLR_SCL();
|
|
// SI2C_Delay();
|
|
// }
|
|
//
|
|
// return(reedByte);
|
|
//}
|