예제 #1
0
/* Sequential master read */
int Chip_I2C_MasterRead(I2C_ID_T id, uint8_t slaveAddr, uint8_t *buff, int len)
{
	I2C_XFER_T xfer = {0};
	xfer.slaveAddr = slaveAddr;
	xfer.rxBuff = buff;
	xfer.rxSz = len;
	while (Chip_I2C_MasterTransfer(id, &xfer) == I2C_STATUS_ARBLOST) {}
	return len - xfer.rxSz;
}
예제 #2
0
void I2C_XFER_config (I2C_XFER_T * xfer,uint8_t *rbuf, int rxSz, uint8_t slaveAddr, I2C_STATUS_T status, uint8_t * wbuf, int txSz)
{
	xfer->rxBuff = rbuf; //Buffer de lectura
	xfer->rxSz = rxSz;	//cantidad de bytes que se desean leer, arbitrariamente seteamos 10
	xfer->slaveAddr = slaveAddr; //Adress estatica del dispositivo i2c a leer (MPU6050)
	xfer->status = status;
	xfer->txBuff = wbuf; //Buffer de escritura
	xfer->txSz = txSz; //cantidad de bytes que se desean escribir, solo escribimos el registro desde
					//el que comenzamos a leer
	Chip_I2C_MasterTransfer(I2C1, xfer);
}
예제 #3
0
int main(void)
{
   uint8_t wbuf[3] = {0,0,0xAA};
   uint8_t rbuf[3] = {0,0,0};
   uint32_t i;
   I2C_XFER_T xfer;

   initHardware();

   /* Transferencia de escritura (escribo addr y datos, ojo, tamaño de página 32 bytes) */
   xfer.rxBuff = 0;
   xfer.rxSz = 0;
   xfer.slaveAddr = 0x50;
   xfer.status = 0;
   xfer.txBuff = wbuf;
   xfer.txSz = 3;

   Chip_I2C_MasterTransfer(I2C1, &xfer);

   //delay por software calculado con el teorema de los cinco dedos oscilantes
   for(i=0; i<0xFFFF; i++);

   /* Transferencia de lectura (escribo addr, leo datos) */
   xfer.rxBuff = rbuf;
   xfer.rxSz = 1;
   xfer.slaveAddr = 0x50;
   xfer.status = 0;
   xfer.txBuff = wbuf;
   xfer.txSz = 2;

   Chip_I2C_MasterTransfer(I2C1, &xfer);

   //delay por software calculado con el teorema de los cinco dedos oscilantes
   for(i=0; i<0xFFFF; i++);

   while(1);
}