打印

关于库函数里面的I2C函数。

[复制链接]
3031|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Bestend|  楼主 | 2013-9-25 10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void _IIC_write(I2C_Handle hI2C,
              Uint8 devAddress,
              Uint32  subAddress,
              Uint8 data
              )
{            
    I2C_Config prevI2CCfg;
   
    /* Wait until bus is free */
    while (I2C_bb(hI2C));
   
    /* Save old settings */
    I2C_getConfig(hI2C, &prevI2CCfg);
   
    /* Restore settings for AIC23 */
    SEEDDM642IIC_Configt.i2csar = devAddress;
    I2C_config(hI2C, &SEEDDM642IIC_Configt);

    /* Submit the MSB for transmit */
    I2C_RSETH(hI2C, I2CDXR, (subAddress) & 0xff);
   
    /* Generate start condition, starts transmission */
    I2C_start(hI2C);
   
    /* Wait until MSB transmit is done */
    while(!I2C_xrdy(hI2C));

    /* Submit the LSB for transmit */
    I2C_RSETH(hI2C, I2CDXR,data);   
//   EVMDM642_waitusec(350);
   
    /* Generate stop condition */
    I2C_sendStop(hI2C);  

    /* Wait until bus is free */
    while (I2C_bb(hI2C));
            
    EVMDM642_waitusec(350);

    /* Reconfigure I2C with old settings */
    I2C_config(hI2C, &prevI2CCfg);              
}
=========================================================
首先void _IIC_write(I2C_Handle hI2C,
              Uint8 devAddress,
              Uint32  subAddress,
              Uint8 data
              )
这4个参数分别代表什么意思呢?
其次能详细讲解下每一行代码都表示什么意思吗?这个是库函数里面的I2C程序,我查了书和网上的资料都没有关于它的讲解。新手没什么分,只能在此谢过大神了!

相关帖子

沙发
zhangmangui| | 2013-9-25 10:55 | 只看该作者
用了csl库   你找一下DM642的csl库使用说明书  
然后不懂的函数粘贴查找   看看有详细的说明
其实都是通过函数传送参数配置寄存器

使用特权

评论回复
板凳
Bestend|  楼主 | 2013-9-25 21:09 | 只看该作者
本帖最后由 Bestend 于 2013-9-26 09:45 编辑

。。

使用特权

评论回复
地板
biechedan| | 2013-9-26 00:23 | 只看该作者
还是用io口写吧。

使用特权

评论回复
5
biechedan| | 2013-9-26 00:23 | 只看该作者
很多人都推荐使用的。

使用特权

评论回复
6
Bestend|  楼主 | 2013-9-26 09:44 | 只看该作者
biechedan 发表于 2013-9-26 00:23
还是用io口写吧。

可是我看书上没怎么讲如何使用IO口写, 连I2C接口都讲得很粗略,找到的历程也没有使用IO口写的,都是直接调用的库函数。

使用特权

评论回复
7
Bestend|  楼主 | 2013-9-26 09:45 | 只看该作者
zhangmangui 发表于 2013-9-25 10:55
用了csl库   你找一下DM642的csl库使用说明书  
然后不懂的函数粘贴查找   看看有详细的说明
其实都是通过 ...


addrI2C = 0xBA >>1;
    _IIC_write(hSeeddm642i2c, addrI2C,0x00, input_sel);
    _IIC_write(hSeeddm642i2c, addrI2C,0x03, misc_ctrl);
    _IIC_write(hSeeddm642i2c, addrI2C,0x0D, output_format);
    _IIC_write(hSeeddm642i2c, addrI2C,0x0F, pin_cfg);
    _IIC_write(hSeeddm642i2c, addrI2C,0x1B, chro_ctrl_2);
=====================================================
Uint8 misc_ctrl = 0x6D;                                    
Uint8 output_format = 0x47;
// 地址为0 forcvbs port1,选择复合信号做为输入            
Uint8 input_sel = 0x00;
/*地址为0xf,将Pin27设置成为CAPEN功能*/        
Uint8 pin_cfg = 0x02;                          
/*地址为1B*/
Uint8chro_ctrl_2 = 0x14;
======================================================
问题:
①对于TVP5150A来说,若I2CSEL=1,则该设备地址可以理解为0x1011101(7位寻址模式),而写操作时最后加一位bit0=0即0x10111010=0xBA,读操作时bit0=1即0x10111011=0xBB. XA为第8字段扩展地址使能位,当XA=0时为7位寻址模式且地址由I2CSAR的低7位确定,当XA=1时为10位寻址模式这时地址由I2CSAR的低10位确定。默认情况下XA=0,所以代码addI2C=0xBA>>1必须右移一位,不然不能正常寻址从设备。可是右移一位变为01011101,后7位改变,第一位变为1,不就成“读”了吗??
② _IIC_write(hSeeddm642i2c, addrI2C,0x00, input_sel);根据网友说的意思,是将0X00写入地址为0X00的寄存器,而设置input_sel=0x00前备注了// 地址为0 forcvbs port1,选择复合信号做为输入,请问怎么理解这句话呢?0X00的寄存器我不知道是什么,看书也没有头绪,请问怎么查找呢?

使用特权

评论回复
8
biechedan| | 2013-9-26 10:48 | 只看该作者
Bestend 发表于 2013-9-26 09:44
可是我看书上没怎么讲如何使用IO口写, 连I2C接口都讲得很粗略,找到的历程也没有使用IO口写的,都是直接 ...

去百度一下就行的。

使用特权

评论回复
9
biechedan| | 2013-9-26 10:49 | 只看该作者
Bestend 发表于 2013-9-26 09:44
可是我看书上没怎么讲如何使用IO口写, 连I2C接口都讲得很粗略,找到的历程也没有使用IO口写的,都是直接 ...

很多都是宏定义的,使用很简单的。

使用特权

评论回复
10
596121344| | 2015-5-15 10:38 | 只看该作者
I2C_Handle hI2C : 打开I2C设备时的得到句柄。

Uint8 devAddress    连接在I2C总线上编解码芯片的地址值

Uint32  subAddress    需要配置该芯片中某一个寄存器的地址值

Uint8 data     需要写入该寄存器的数据值
这是百度上的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

27

帖子

0

粉丝