/******************************************************************************* **函 数: IIC_ReadDataN **功 能: IIC在指定地址连续读N个数据 **参 数: Addr --地址 ** pData --接收数据指针 ** len --接收数据长度 **返 回: void *******************************************************************************/ void IIC_ReadDataN(u8 Addr,u8 *pData,u8 len) { u8 i,*pTemp= pData; IIC_Start(); IIC_SendByte(DEVICE_ADDR); IIC_WaitAck(); IIC_SendByte(Addr); IIC_WaitAck(); IIC_Start(); IIC_SendByte(DEVICE_ADDR+1); IIC_WaitAck(); for(i=0;i<len-1;i++) { *(pTemp++) = IIC_GetByte(); IIC_ACK(); } *(pTemp++) = IIC_GetByte(); IIC_NACK(); IIC_Stop(); }
/*data types needs to be change*/ alt_8 IIC_ReadNRegs(alt_u8 waddr, alt_u8 raddr, alt_u8 reg, alt_u16 *data, alt_u8 N) { IIC_Start(); IIC_PutByte(waddr); IIC_NAKRTN; IIC_PutByte(reg); IIC_NAKRTN; IIC_PutByte(0xff); IIC_NAKRTN; IIC_Start(); IIC_PutByte(raddr); IIC_NAKRTN; *(alt_u8 *)data = IIC_GetByte(); alt_u8 i; for(i = 0; i < N; i++){ IIC_Acknowledge(1); *(i + (alt_u8 *)data) = IIC_GetByte(); } IIC_Acknowledge(0); IIC_Stop(); return 1; }
/******************************************************************************* **函 数: IIC_ReadByte **功 能: IIC读指定地址字节数据 **参 数: Addr --地址 **返 回: 接收的数据 *******************************************************************************/ u8 IIC_ReadByte(u8 Addr) { u8 data; IIC_Start(); IIC_SendByte(DEVICE_ADDR); IIC_WaitAck(); IIC_SendByte(Addr); IIC_WaitAck(); IIC_Start(); IIC_SendByte(DEVICE_ADDR+1); //ReadDeviceAddr IIC_WaitAck(); data=IIC_GetByte(); IIC_NACK(); IIC_Stop(); return data; }
alt_8 IIC_ReadReg(alt_u8 waddr, alt_u8 raddr, alt_u8 reg, alt_u8 *data) { IIC_Start(); IIC_PutByte(waddr); IIC_NAKRTN; IIC_PutByte(reg); IIC_NAKRTN; IIC_PutByte(0xff); IIC_NAKRTN; IIC_Start(); IIC_PutByte(raddr); IIC_NAKRTN; *data = IIC_GetByte(); IIC_Acknowledge(0); IIC_Stop(); return 1; }