Files
ams-slave-22/Core/Src/SoftI2C.c
2022-03-18 19:04:18 +01:00

165 lines
2.1 KiB
C

#include "SoftI2C.h"
#include "stm32f4xx_hal.h"
void Soft_I2C_Init()
{
}
void Soft_I2C_Transmit(uint8_t address, uint8_t* databuffer,uint8_t bufferlength)
{
uint8_t nack = 0;
setSDCLK(); //Generate Start Condition
bitwait();
setSDA(0);
bitwait();
for(int i = 0; i < 8; i++) //Write I2C-Slave Address
{
setSDA((address>>(7-i) & 0x01));
bitwait();
resetSDCLK();
bitwait();
setSDCLK();
bitwait();
}
SDA_ReadMode();
resetSDCLK();
bitwait();
nack += readSDA();
bitwait();
SDA_WriteMode();
setSDA(0);
setSDCLK();
bitwait();
for(int n = 0; n<bufferlength;n++) //Write Data
{
for(int i = 0; i < 8; i++)
{
setSDA((databuffer[n]>>(7-i) & 0x01));
bitwait();
resetSDCLK();
bitwait();
setSDCLK();
bitwait();
}
SDA_ReadMode();
resetSDCLK();
bitwait();
nack += readSDA();
bitwait();
SDA_WriteMode();
setSDA(0);
setSDCLK();
bitwait();
}
resetSDCLK(); //Generate Stop Condition
bitwait();
setSDA(1);
bitwait();
}
void Soft_I2C_Receive(uint8_t address, uint8_t* databuffer, uint8_t bufferlength)
{
uint8_t nack = 0;
setSDCLK(); //Generate Start Condition
bitwait();
setSDA(0);
bitwait();
for(int i = 0; i < 8; i++) //Write I2C-Slave Address
{
setSDA((address>>(7-i) & 0x01));
bitwait();
resetSDCLK();
bitwait();
setSDCLK();
bitwait();
}
SDA_ReadMode();
resetSDCLK();
bitwait();
nack += readSDA();
bitwait();
for(int n = 0; n<bufferlength;n++)
{
databuffer[n] = 0;
for(int i = 0; i < 8; i++)
{
setSDCLK();
bitwait();
resetSDCLK();
bitwait();
databuffer[n] |= readSDA()<<(7-i);
bitwait();
}
setSDCLK();
bitwait();
SDA_WriteMode();
setSDA(0);
bitwait();
resetSDCLK();
bitwait();
SDA_ReadMode();
}
resetSDCLK(); //Generate Stop Condition
bitwait();
setSDA(1);
bitwait();
}
void SDA_WriteMode()
{
}
void SDA_ReadMode()
{
}
void setSDA(uint8_t state)
{
}
uint8_t readSDA()
{
}
void bitwait()
{
}
void setSDCLK()
{
}
void resetSDCLK()
{
}