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

📄 i2c.c

📁 Bitek 公司 bit1611b模拟屏驱动芯片外接MCU驱动DEMO源码
💻 C
📖 第 1 页 / 共 2 页
字号:
    I2C_GetACK();


    /* --------------------------------
        Last Read
       -------------------------------- */
    bDATA = I2C_RxData();
    I2C_SetNAK();                     

    I2C_Stop();

    return( bDATA );
} /* I2C_RxByte */
#endif


/* -------------------------------------------------------------------
    Name: I2C_RxData -
    Purpose:
        To do I2C parallel serial conversion for reception.
    Passed: None.
    Returns:
    Notes:
  ------------------------------------------------------------------- */
UB8 I2C_RxData (void)
{
    UB8     bResult;
    UB8     bMask;


    bResult = 0x00;                 /* Clear value */

    I2C_SET_DAT(HIGH);

    /* MSB is read first */
    for (bMask = 0x80; bMask; bMask >>= 1)
    {
        I2C_SET_CLK(HIGH);
        I2C_HIGH;                   

        if ( I2C_GET_DAT_HIGH )
            bResult |= bMask;

        I2C_SET_CLK(LOW);
    } /* for */

    return( bResult );
} /* I2C_RxData */


#if (I2C_RX_WORD)
/* -------------------------------------------------------------------
    Name: I2C_RxWord -
    Purpose: To receive one WORD data from I2C slave device.
    Passed:
    Returns: one WORD data.
    Notes:
        1) Only for little-endian storage format devices !!!
        2) Keil C51 uses *big-endian* storage format. [1]144

   ------------------------------------------------------------------- */
UW16 I2C_RxWord (
UB8 bSLA,                       /* I2C slave address */
UB8 bREG                        /* I2C sub-address */
)
{
    UW16    wDATA;


    I2C_Start();

    /* --------------------------------
        Write
       -------------------------------- */
    I2C_TxData(bSLA);                  
    I2C_GetACK();                      

    I2C_TxData(bREG);                  
    I2C_GetACK();                      


    /* --------------------------------
        Read
       -------------------------------- */
    I2C_Start();
    I2C_TxData(bSLA | 0x01);
    I2C_GetACK();


    /* --------------------------------
        Last Read
       -------------------------------- */
    wDATA = I2C_RxData();               
    I2C_SetACK();

    wDATA = (I2C_RxData() << 8) + wDATA;
    I2C_SetNAK();                       

    I2C_Stop();                         

    return( wDATA );
} /* I2C_RxWord */
#endif


/* -------------------------------------------------------------------
    Name: I2C_SetACK -
    Purpose: .
    Passed: None.
    Returns: None.
    Notes:
   ------------------------------------------------------------------- */
void I2C_SetACK (void)
{
    I2C_SET_DAT(LOW);
    I2C_SU_DAT;             // Added by JC 01:53PM  2005/11/23

    I2C_SET_CLK(HIGH);
    I2C_HIGH;

    I2C_SET_CLK(LOW);
    I2C_LOW;
} /* I2C_SetACK */


/* -------------------------------------------------------------------
    Name: I2C_SetNAK -
    Purpose: .
    Passed: None.
    Returns: None.
    Notes:
   ------------------------------------------------------------------- */
void I2C_SetNAK (void)
{
    I2C_SET_DAT(HIGH);
    I2C_SU_DAT;             // Added by JC 01:53PM  2005/11/23

    I2C_SET_CLK(HIGH);
    I2C_HIGH;

    I2C_SET_CLK(LOW);
    I2C_LOW;
} /* I2C_SetNAK */


/* -------------------------------------------------------------------
    Name: I2C_Start - START condition (SDA falling edge).
    Purpose: .
    Passed: None.
    Returns: None.
    Notes:
    Reference:
        [1] p64
   ------------------------------------------------------------------- */
void I2C_Start (void)
{
    I2C_SET_DAT(HIGH);

    I2C_SET_CLK(HIGH);
    I2C_SU_STA;


    I2C_SET_DAT(LOW);
    I2C_HD_STA;          

    I2C_SET_CLK(LOW);
    I2C_LOW;             
} /* I2C_Start */


/* -------------------------------------------------------------------
    Name: I2C_Stop - STOP condition (SDA rising edge).
    Purpose: .
    Passed: None.
    Returns: None.
    Notes:
    Reference:
        [1] p64

  ------------------------------------------------------------------- */
void I2C_Stop (void)
{
    I2C_SET_DAT(LOW);

    I2C_SET_CLK(HIGH);
    I2C_SU_STO;

    I2C_SET_DAT(HIGH);
} /* I2C_Stop */


#if (I2C_TX_BURST)
/* -------------------------------------------------------------------
    Name: I2C_TxBurst -
    Purpose: To transmit bulk data to I2C slave device.
    Passed:
        bCNT: 1..255. (Excludes slave address and sub-address)
    Returns: None.
    Notes:
        The bSLA should be the slave device's 'WRITE' module addres,
        not 'READ' one.
   ------------------------------------------------------------------- */
void I2C_TxBurst (
UB8  bSLA,          /* I2C slave address */
UB8  bREG,          /* I2C sub-address */
UB8  bCNT,          /* The number of data which will be transmitted */
UB8  *pbDATA        /* Point to the first DATA item */
)
{
    UB8 bIdx;


    I2C_Start();

    I2C_TxData(bSLA);
    I2C_GetACK();

    I2C_TxData(bREG);
    I2C_GetACK();

    for (bIdx = 0; bIdx < bCNT; bIdx++)
    {
        I2C_TxData(*pbDATA++);
        I2C_GetACK();
    } /* for */

    I2C_Stop();
} /* I2C_TxBurst */
#endif


#if (I2C_TX_BYTE)
/* -------------------------------------------------------------------
    Name: I2C_TxByte -
    Purpose: To transmit one byte data to I2C slave device.
    Passed:
    Returns: None.
    Notes:
        The bSLA should be the slave device's 'WRITE' module addres,
        not 'READ' one.
   ------------------------------------------------------------------- */
void I2C_TxByte (
UB8 bSLA,          /* I2C slave address */
UB8 bREG,          /* I2C sub-address */
UB8 bDATA          /* DATA item */
)
{
    I2C_Start();

    I2C_TxData(bSLA);
    I2C_GetACK();

    I2C_TxData(bREG);
    I2C_GetACK();

    I2C_TxData(bDATA);
    I2C_GetACK();

    I2C_Stop();
} /* I2C_TxByte */
#endif


/* -------------------------------------------------------------------
    Name: I2C_TxData -
    Purpose: To do I2C parallel serial conversion for transmission.
    Passed:
    Returns: None.
    Notes:
   ------------------------------------------------------------------- */
void I2C_TxData (UB8 bData)
{
    UB8     bMask;


    /* MSB is sent first */
    for (bMask = 0x80; bMask; bMask >>= 1)
    {
        I2C_SET_DAT(bData & bMask);
        I2C_SU_DAT;

        I2C_SET_CLK(HIGH);
        I2C_HIGH;

        I2C_SET_CLK(LOW);
    }

    I2C_SET_DAT(HIGH);      // Added by JC 01:47PM  2005/11/23
} /* I2C_TxData */


#if (I2C_TX_WORD)
/* -------------------------------------------------------------------
    Name: I2C_TxWord -
    Purpose: To transmit bulk data to I2C slave device.
    Passed:
    Returns: None.
    Notes:
   ------------------------------------------------------------------- */
void I2C_TxWord (
UB8  bSLA,          /* I2C slave address */
UB8  bREG,          /* I2C sub-address */
UW16 wDATA          /* DATA item */
)
{
    I2C_Start();                        

    I2C_TxData(bSLA);                   
    I2C_GetACK();                       

    I2C_TxData(bREG);                   
    I2C_GetACK();                       

    I2C_TxData(wDATA & 0xFF);           
    I2C_GetACK();                       

    I2C_TxData(wDATA >> 8);             
    I2C_GetACK();                       

    I2C_Stop();                         
} /* I2C_TxWord */
#endif



/* -------------------------------------------------------------------
    Name:  -
    Purpose: .
    Passed: None.
    Returns: None.
    Notes:
   ------------------------------------------------------------------- */


/* **********************************************************************

    Description:


   ********************************************************************** */

/* %% End Of File %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -