|
|
|
@ -43,81 +43,50 @@ void i2c_init( i2c_t *i2c_dev, /*!< Pointer to I2C hardware Object */
|
|
|
|
|
|
|
|
|
|
void i2c_read(i2c_t *i2c_dev, uint16_t *slaveAddress, uint8_t *registerAddress, uint8_t *data, uint8_t *dataLenght)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
i2c_dev->periferalState = i2c_perif_read;
|
|
|
|
|
|
|
|
|
|
// Arch nemesis ! We only setn the address
|
|
|
|
|
// but the counter allso socunt the bits that we have recieved
|
|
|
|
|
// and we want to read one byte
|
|
|
|
|
// every transaction counts
|
|
|
|
|
i2c_set_transfer_counter(i2c_dev,1);
|
|
|
|
|
i2c_send_address_for_write(i2c_dev, slaveAddress);
|
|
|
|
|
i2c_send_reg_address(i2c_dev, registerAddress);
|
|
|
|
|
while(!i2c_is_tx_complete(i2c_dev));
|
|
|
|
|
while(!i2c_is_transfer_complete(i2c_dev));
|
|
|
|
|
|
|
|
|
|
i2c_set_transfer_counter(i2c_dev,1);
|
|
|
|
|
i2c_send_address_for_read(i2c_dev, slaveAddress);
|
|
|
|
|
while(!i2c_is_input_buffer_full(i2c_dev));
|
|
|
|
|
i2c_get_input_register(i2c_dev, data);
|
|
|
|
|
while(!i2c_is_tx_complete(i2c_dev));
|
|
|
|
|
while(!i2c_is_transfer_complete(i2c_dev));
|
|
|
|
|
i2c_send_nack(i2c_dev);
|
|
|
|
|
i2c_send_stop(i2c_dev);
|
|
|
|
|
print_Usart(usart2, "I2C -> Read Done\n\r");
|
|
|
|
|
}
|
|
|
|
|
void i2c_write(i2c_t *i2c_dev, uint16_t *slaveAddress, uint8_t *registerAddress, uint8_t *data, uint8_t *dataLenght){}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
void i2cRead(i2c_t *i2c_dev, uint16_t *slaveAddress, uint8_t *registerAddress, uint8_t *data, uint8_t *dataLenght)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// Start
|
|
|
|
|
// Send Address
|
|
|
|
|
// Wait For ACK
|
|
|
|
|
//
|
|
|
|
|
uint8_t nbytes = 0;
|
|
|
|
|
|
|
|
|
|
i2c_dev->periferalState = i2cPerifTransmitting;
|
|
|
|
|
|
|
|
|
|
i2cSetTransferCounter(i2c_dev,1);
|
|
|
|
|
i2cSendSlaveAddressWrite(i2c_dev, slaveAddress);
|
|
|
|
|
i2cSendRegisterAddress(i2c_dev,registerAddress);
|
|
|
|
|
|
|
|
|
|
while(i2c_dev->periferalState != i2cPerifTransferComplete)
|
|
|
|
|
{
|
|
|
|
|
i2cIsTransferComplete(i2c_dev);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
i2c_dev->periferalState = i2cPerifRecieving;
|
|
|
|
|
i2cSendSlaveAddressRead(i2c_dev, slaveAddress);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
while(i2c_dev->periferalState != i2cPerifTransferComplete)
|
|
|
|
|
{
|
|
|
|
|
i2cIsTransferComplete(i2c_dev);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
i2cGenerateNack(i2c_dev);
|
|
|
|
|
i2cGenerateStop(i2c_dev);
|
|
|
|
|
|
|
|
|
|
i2cReadInputRegister(i2c_dev, data);
|
|
|
|
|
while(!i2c_is_perif_ready(i2c_dev));
|
|
|
|
|
print_Usart(usart2, "I2C Ready afer read\n\r");
|
|
|
|
|
i2c_dev->periferalState = i2c_perif_ready;
|
|
|
|
|
}
|
|
|
|
|
void i2c_write(i2c_t *i2c_dev, uint16_t *slaveAddress, uint8_t *registerAddress, uint8_t *data, uint8_t *dataLenght)
|
|
|
|
|
{
|
|
|
|
|
i2c_dev->periferalState = i2c_perif_write;
|
|
|
|
|
|
|
|
|
|
print_Usart(usart2, "\n\rI2C Read completed\n\r");
|
|
|
|
|
i2c_set_transfer_counter(i2c_dev,2);
|
|
|
|
|
|
|
|
|
|
while(i2c_dev->periferalState != i2cPerifReady)
|
|
|
|
|
{
|
|
|
|
|
i2cIsPeriferalReady(i2c_dev);
|
|
|
|
|
}
|
|
|
|
|
i2c_dev->periferalState = i2cPerifReady;
|
|
|
|
|
i2c_dev->hardwareState = i2cHwIdle;
|
|
|
|
|
}
|
|
|
|
|
print_Usart(usart2, "I2C Transfer Counter: ");
|
|
|
|
|
usartSendChar(usart2, i2c_get_transfer_counter(i2c_dev) + 0x30);
|
|
|
|
|
print_Usart(usart2, "\n\r");
|
|
|
|
|
|
|
|
|
|
void i2cWrite(i2c_t *i2c_dev, uint16_t *slaveAddress, uint8_t *registerAddress, uint8_t *data, uint8_t *dataLenght)
|
|
|
|
|
{
|
|
|
|
|
i2cSetTransferCounter(i2c_dev,2);
|
|
|
|
|
i2cSendSlaveAddressWrite(i2c_dev, slaveAddress);
|
|
|
|
|
i2cSendRegisterAddress(i2c_dev,registerAddress);
|
|
|
|
|
while((i2c_dev->hardwareState =! i2cHwOutputBufferEmpty))
|
|
|
|
|
{
|
|
|
|
|
i2cIsOutputBufferEmpty(i2c_dev);
|
|
|
|
|
}
|
|
|
|
|
i2cSendData(i2c_dev,data);
|
|
|
|
|
i2c_send_address_for_write(i2c_dev, slaveAddress);
|
|
|
|
|
i2c_send_reg_address(i2c_dev, registerAddress);
|
|
|
|
|
i2c_send_data(i2c_dev, data);
|
|
|
|
|
while(!i2c_is_transfer_complete(i2c_dev));
|
|
|
|
|
i2c_send_stop(i2c_dev);
|
|
|
|
|
|
|
|
|
|
i2cGenerateStop(i2c_dev);
|
|
|
|
|
print_Usart(usart2, "\n\rI2C Transfer completed\n\r");
|
|
|
|
|
while(!i2c_is_perif_ready(i2c_dev));
|
|
|
|
|
print_Usart(usart2, "I2C Ready afer write\n\r");
|
|
|
|
|
i2c_dev->periferalState = i2c_perif_ready;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
void i2c_throw_error(i2c_t *i2c_dev, int16_t error)
|
|
|
|
|
{
|
|
|
|
|
print_Usart(usart2, "\n\r");
|
|
|
|
|