#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); //}