KED/peripherals/i2c.c

117 lines
3.1 KiB

#include "i2c.h"
#include "usart.h"
//uint32_t i2cCR1;
//uint32_t i2cCR2;
//uint32_t i2cISR;
void i2cInit( i2c_t *i2cHardware,
i2cCh_t channelNo,
i2cMode_t mode,
uint16_t mainAddress,
uint16_t secondAddress,
i2cAddressCount_t addressCount,
i2cAddressSize_t addressSize,
i2cSpeed_t speed,
i2cOpperationMode_t opperationMode,
i2cClockStretching_t stretching,
i2cWakeUpTypes_t wakeOn)
{
i2cHardware->channelNo = channelNo;
i2cHardware->mode = mode;
i2cHardware->mainAddress = mainAddress;
i2cHardware->secondAddress = secondAddress;
i2cHardware->addressCount = addressCount;
i2cHardware->addressSize = addressSize;
i2cHardware->speed = speed;
i2cHardware->opperationMode = opperationMode;
i2cHardware->stretching = stretching;
i2cHardware->wakeOn = wakeOn;
i2cHardware->hardwareState = i2cHwIdle;
i2cHardware->periferalState = i2cPerifNotInitialized;
i2cEnableHardware(i2cHardware);
i2cDisablePeriferal(i2cHardware);
i2cConfigureFilters(i2cHardware);
i2cSetClockStretch(i2cHardware, stretching);
i2cSetSpeed(i2cHardware, speed);
i2cSetMode(i2cHardware, opperationMode);
i2cSetAddressLenght(i2cHardware, addressSize);
i2cSetAddress(i2cHardware, mainAddress, secondAddress);
i2cEnablePeriferal(i2cHardware);
while(i2cHardware->periferalState != i2cPerifReady)
{
i2cIsPeriferalReady(i2cHardware);
}
i2cHardware->periferalState = i2cPerifInitialized;
}
void i2cDeInit(i2c_t *i2cHardware)
{
}
void i2cRead(i2c_t *i2cHardware, uint16_t *slaveAddress, uint8_t *registerAddress, uint8_t *data, uint8_t *dataLenght)
{
//
// Start
// Send Address
// Wait For ACK
//
i2cSetTransferCounter(i2cHardware,1);
i2cSendSlaveAddressWrite(i2cHardware, slaveAddress);
i2cHardware->periferalState = i2cPerifTransmitting;
i2cSendRegisterAddress(i2cHardware,registerAddress);
while(i2cHardware->periferalState != i2cPerifTransferComplete)
{
i2cIsTransferComplete(i2cHardware);
}
i2cSendSlaveAddressRead(i2cHardware, slaveAddress);
i2cHardware->periferalState = i2cPerifRecieving;
while(i2cHardware->periferalState != i2cPerifTransferComplete)
{
i2cIsTransferComplete(i2cHardware);
}
i2cGenerateNack(i2cHardware);
i2cGenerateStop(i2cHardware);
i2cReadInputRegister(i2cHardware, data);
while(i2cHardware->periferalState != i2cPerifReady)
{
i2cIsPeriferalReady(i2cHardware);
}
i2cHardware->periferalState = i2cPerifReady;
i2cHardware->hardwareState = i2cHwIdle;
}
void i2cWrite(i2c_t *i2cHardware, uint16_t *slaveAddress, uint8_t *registerAddress, uint8_t *data, uint8_t *dataLenght)
{
i2cSetTransferCounter(i2cHardware,0);
i2cSendSlaveAddressWrite(i2cHardware, slaveAddress);
i2cHardware->periferalState = i2cPerifTransmitting;
i2cSendRegisterAddress(i2cHardware,registerAddress);
i2cHardware->periferalState = i2cPerifTransmitting;
i2cSendData(i2cHardware,data);
while(i2cHardware->periferalState != i2cPerifTransferComplete)
{
i2cIsTransferComplete(i2cHardware);
}
}
void i2cThrowError(int16_t error)
{
print_Usart(usart2, "I2C Error Detected : ");
usartSendChar(usart2, error + 0x30);
}