⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2cintf.c

📁 Philips LPC932 I2C 接口源程序
💻 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 + -