这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » lpc2104,i2c lpc2104 i2c

共2条 1/1 1 跳转至

lpc2104,i2c lpc2104 i2c

院士
2006-09-17 18:14:16     打赏
lpc2104,i2c lpc2104 i2c



关键词: lpc2104    

院士
2006-12-22 22:43:00     打赏
2楼
问 sla 是E2的器件地址,suba是指写在E2里的地址,想请问一下suba_type子地址结构是什么意思?什么是时候应该用单字节?什么时候应该用双字节?什么时候用3-8+x结构?望大侠们指点,谢谢!!!!!!!!

/*
*********************************************************************************************************
** 函数名称 :I2C_WriteNByte()
** 函数功能 :向有子地址器件写入N字节数据
** 入口参数 :    sla            器件从地址
**                suba_type    子地址结构    1-单字节地址    3-8+X结构    2-双字节地址
**                  suba        器件内部物理地址
**                  *s            将要写入的数据的指针
**                  num            将要写入的数据的个数
** 出口参数 :    TRUE        操作成功
**                  FALSE        操作失败
*********************************************************************************************************
*/
uint8 I2C_WriteNByte(uint8 sla, uint8 suba_type, uint32 suba, uint8 *s, uint32 num)
{
    if (num > 0)/* 如果读取的个数为0,则返回错误 */
    {    /* 设置参数 */    
        if (suba_type == 1)
        {    /* 子地址为单字节 */
            I2C_sla         = sla;                                /* 读器件的从地址         */
            I2C_suba        = suba;                                /* 器件子地址             */
            I2C_suba_num    = 1;                                /* 器件子地址为1字节     */
        }
        if (suba_type == 2)
        {    /* 子地址为2字节 */
            I2C_sla         = sla;                                /* 读器件的从地址         */
            I2C_suba            = suba;                                /* 器件子地址             */
            I2C_suba_num    = 2;                                /* 器件子地址为2字节     */
        }
        if (suba_type == 3)
        {    /* 子地址结构为8+X */
            I2C_sla            = sla + ((suba >> 7 )& 0x0e);        /* 读器件的从地址        */
            I2C_suba        = suba & 0x0ff;                        /* 器件子地址            */
            I2C_suba_num    = 1;                                /* 器件子地址为8+X         */
        }

        I2C_buf     = s;                                        /* 数据                 */
        I2C_num     = num;                                        /* 数据个数             */
        I2C_suba_en = 2;                                        /* 有子地址,写操作     */
        I2C_end     = 0;
        
        /* 清除STA,SI,AA标志位 */
        I2CONCLR =     (1 << 2)|    /* AA     */
                    (1 << 3)|    /* SI     */
                    (1 << 5);    /* STA     */
        
        /* 置位STA,启动I2C总线 */
        I2CONSET =     (1 << 5)|    /* STA     */
                    (1 << 6);    /* I2CEN*/
        
        /* 等待I2C操作完成 */
        while (I2C_end == 0)
        {    }
        if (I2C_end == 1)
            return (TRUE);
        else
            return (FALSE);    
    }
    return (FALSE);
}
1: suba_type 是要写进去的地址是8位或16位如果只小于256字节,8位就够了,如果大些,就要16位地址。
你要去读读i2c eeprom的手册啊。

2: 谢谢!!!!!!!!也就是说suba 来决定suba_type呢,当suba >256就应该用16位地址呢

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]