NULL
This commit is contained in:
236
user/Drivers/SoftI2C.c
Executable file
236
user/Drivers/SoftI2C.c
Executable file
@@ -0,0 +1,236 @@
|
||||
#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);
|
||||
//}
|
||||
48
user/Drivers/SoftI2C.h
Executable file
48
user/Drivers/SoftI2C.h
Executable file
@@ -0,0 +1,48 @@
|
||||
#ifndef __SoftI2C_h__
|
||||
#define __SoftI2C_h__
|
||||
|
||||
//IIC<49>˿ڶ<CBBF><DAB6><EFBFBD>
|
||||
#ifndef HIGH
|
||||
#define HIGH 1 // HIGH
|
||||
#define LOW 0 // LOW
|
||||
#endif
|
||||
|
||||
#ifndef WR
|
||||
#define WR 0 // WRITE
|
||||
#define RD 1 // READ
|
||||
#endif
|
||||
/*******************************************************************************/
|
||||
#define SDA_IN() EnableInput(I2C_SDA_GPIO, I2C_SDA_PINPOS)
|
||||
#define SDA_OUT() EnableOutput(I2C_SDA_GPIO, I2C_SDA_PINPOS)
|
||||
#define SET_SDA() SET_PIN(I2C_SDA_GPIO, I2C_SDA)
|
||||
#define CLR_SDA() CLR_PIN(I2C_SDA_GPIO, I2C_SDA)
|
||||
#define READ_SDA() READ_PIN(I2C_SDA_GPIO, I2C_SDA)
|
||||
|
||||
#define SCL_OUT() EnableOutput(I2C_SCL_GPIO, I2C_SCL_PINPOS)
|
||||
#define SET_SCL() SET_PIN(I2C_SCL_GPIO, I2C_SCL)
|
||||
#define CLR_SCL() CLR_PIN(I2C_SCL_GPIO, I2C_SCL)
|
||||
/*******************************************************************************/
|
||||
|
||||
//#define SDA_IN() {I2C_GPIO->MODER &=~(3<<(7*2)); I2C_GPIO->MODER |=0<<7*2;} //PA12<31><32><EFBFBD><EFBFBD>ģʽ
|
||||
//#define SDA_OUT() {I2C_GPIO->MODER &=~(3<<(7*2)); I2C_GPIO->MODER |=1<<7*2;} //PA12<31><32><EFBFBD><EFBFBD>ģʽ
|
||||
|
||||
#define ENABLE_I2C_DELAY 0
|
||||
|
||||
//#define I2C_Delay() __NOP();
|
||||
|
||||
#define SI2C_Delay() __NOP();
|
||||
|
||||
//void I2C_Delay(void);H
|
||||
void SI2C_Init(void);
|
||||
void SI2C_Start(void);
|
||||
void SI2C_Stop(void);
|
||||
void SI2C_Ack(void);
|
||||
void SI2C_NoAck(void);
|
||||
|
||||
u8 SI2C_TestAck(void);
|
||||
u8 SI2C_Write(u8 writeData);
|
||||
u8 SI2C_Read(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user