*
* DESCRIPTION
* This file defines routines for i2c master with gpio, port from linux kernel
*
******************************************************************************/
#include <i2c.h>
#include <debug.h>
#include "sensor.h"
{
I2cEnable(FALSE);
I2cInit(21, 20, I2C_POWER_PIO_UNDEFINED, pio_mode_strong_pull_up);
I2cConfigClock(I2C_SCL_400KBPS_HIGH_PERIOD, I2C_SCL_400KBPS_LOW_PERIOD);
I2cEnable(TRUE);
return TRUE;
}
{
sys_status rval;
uint16 i;
I2cRawStart(TRUE);
rval = I2cRawWriteByte(addr);
I2cRawWaitAck(TRUE);
rval = I2cRawWriteByte(reg&0xff);
I2cRawWaitAck(TRUE);
rval = I2cRawWriteByte(reg>>8);
I2cRawWaitAck(TRUE);
{
rval = I2cRawWriteByte(buf[i]&0xff);
I2cRawWaitAck(TRUE);
rval = I2cRawWriteByte(buf[i]>>8);
I2cRawWaitAck(TRUE);
}
I2cRawStop(TRUE);
PioSetMode(21, pio_mode_user);
PioSetMode(20, pio_mode_user);
}
{
sys_status rval;
uint16 i;
uint8 val = 0;
TSCI2cInit();
I2cRawStart(TRUE);
rval = I2cRawWriteByte(addr);
I2cRawWaitAck(TRUE);
rval = I2cRawWriteByte(reg&0xff);
I2cRawWaitAck(TRUE);
rval = I2cRawWriteByte(reg>>8);
I2cRawWaitAck(TRUE);
I2cRawRestart(TRUE);
rval = I2cRawWriteByte(addr+1);
I2cRawWaitAck(TRUE);
{
rval = I2cRawReadByte(&val);
I2cRawSendAck(TRUE);
buf[i] = val;
I2cRawSendAck(TRUE);
buf[i] |= val<<8;
}
I2cRawStop(TRUE);
PioSetMode(21, pio_mode_user);
PioSetMode(20, pio_mode_user);
}
{
sys_status rval;
uint16 i;
I2cRawStart(TRUE);
rval = I2cRawWriteByte(dev_addr);
I2cRawWaitAck(TRUE);
rval = I2cRawWriteByte(l_data);
I2cRawWaitAck(TRUE);
rval = I2cRawWriteByte(h_data);
I2cRawWaitAck(TRUE);
I2cRawRestart(TRUE);
rval = I2cRawWriteByte(dev_addr+1);
I2cRawWaitAck(TRUE);
for(i=0; i<n; i++)
{
rval = I2cRawReadByte(&buffer[i]);
I2cRawSendAck(TRUE);
}
I2cRawStop(TRUE);
PioSetMode(21, pio_mode_user);
PioSetMode(20, pio_mode_user);
}