📄 i2cintf.c
字号:
#include "i2cexprt.h"
extern void PrintString(char *s);
code char retryexp[] = "retry counter expired\n";
code char bufempty[] = "buffer empty\n";
code char nackdata[] = "no ack on data\n";
code char nackaddr[] = "no ack on address\n";
code char timedout[] = "time-out\n";
code char unknowst[] = "unknown status\n";
static I2C_MESSAGE *p_iicMsg[2];
static I2C_TRANSFER iicTfr;
static BYTE drvStatus;
void I2C_Ready(BYTE status, BYTE nr) using 1
{
drvStatus = status;
}
static void StartTransfer(void)
{
WORD timeOut;
BYTE retries = 0;
do
{
drvStatus = I2C_BUSY;
I2C_Transfer(&iicTfr);
timeOut = 0;
while (drvStatus == I2C_BUSY)
{
if (++timeOut > 40000)
drvStatus = I2C_TIME_OUT;
}
if (retries == 6)
{
PrintString(retryexp);
return;
}
else
retries++;
switch (drvStatus)
{
case I2C_OK: break;
case I2C_NO_DATA:
PrintString(bufempty); break;
case I2C_NACK_ON_DATA:
PrintString(nackdata); break;
case I2C_NACK_ON_ADDRESS:
PrintString(nackaddr); break;
case I2C_TIME_OUT:
PrintString(timedout); break;
default: PrintString(unknowst); break;
}
} while (drvStatus != I2C_OK);
}
void I2C_Write(I2C_MESSAGE *msg)
{
iicTfr.nrMessages = 1;
iicTfr.p_message = p_iicMsg;
p_iicMsg[0] = msg;
StartTransfer();
}
void I2C_WriteRepWrite(I2C_MESSAGE *m1,I2C_MESSAGE *m2)
{
iicTfr.nrMessages = 2;
iicTfr.p_message = p_iicMsg;
p_iicMsg[0] = m1;
p_iicMsg[1] = m2;
StartTransfer();
}
void I2C_WriteRepRead(I2C_MESSAGE *m1, I2C_MESSAGE *m2)
{
iicTfr.nrMessages = 2;
iicTfr.p_message = p_iicMsg;
p_iicMsg[0] = m1;
p_iicMsg[1] = m2;
StartTransfer();
}
void I2C_Read(I2C_MESSAGE *msg)
{
iicTfr.nrMessages = 1;
iicTfr.p_message = p_iicMsg;
p_iicMsg[0] = msg;
StartTransfer();
}
void I2C_ReadRepRead(I2C_MESSAGE *m1, I2C_MESSAGE *m2)
{
iicTfr.nrMessages = 2;
iicTfr.p_message = p_iicMsg;
p_iicMsg[0] = m1;
p_iicMsg[1] = m2;
StartTransfer();
}
void I2C_ReadRepWrite(I2C_MESSAGE *m1, I2C_MESSAGE *m2)
{
iicTfr.nrMessages = 2;
iicTfr.p_message = p_iicMsg;
p_iicMsg[0] = m1;
p_iicMsg[1] = m2;
StartTransfer();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -