TI论坛
直播中

张虎豹

8年用户 1669经验值
私信 关注
[问答]

如何在5509A中用I2C接口API输入子地址?

如题,
CSLAPI int I2C_write(Uint16 *data,int length,int master,Uint16 slaveaddress,int transfermode,int timeout);
只有外设的地址slaveaddress,如果我想往这个外设的某个寄存器写值应该如何操作,也就是说如何往子地址里写值?
是把data里的第一组数据作为子地址吗?

回帖(23)

余少虹

2019-10-24 06:20:39
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

张虎豹

2019-10-24 06:27:11
可是,这个文档的Example里,初始化I2C模块使用的是:
......
I2C_Init Init=[
                    0,
                    0x0000,
                    144,
                     400,
                     0,
                     0,
                     1
];
I2C_init(&,Init);
.......
而我使用的额csl_i2c.h文件里并没有I2C_Init这个struct和I2C_init()这个函数,有的是I2C_Setup这个struct和I2C_setup()这个函数。请问这两组是同样的功能吗?还是说我用的库文件是错的?
谢谢。
举报

余少虹

2019-10-24 06:42:11
引用: 尼克wo 发表于 2019-10-24 07:12
可是,这个文档的Example里,初始化I2C模块使用的是:
......
I2C_Init Init=[

用I2C_setup没问题。 在cslc55x.src I2C_setup()和I2C_init是一样的。
举报

张虎豹

2019-10-24 06:48:42
引用: vuywsdfwf 发表于 2019-10-24 07:27
用I2C_setup没问题。 在cslc55x.src I2C_setup()和I2C_init是一样的。

恩,好的。
我用I2C接口与LP3913这个电源管理模块(也是TI的产品)通信,程序如下:
......
#define LP3913 0xC0
Uint16 dataW1[2] = [0x09,0x34];
Uint16 i2c_status = 0;
I2C_Setup setup = [
                              0, /* 7 bit address mode */
                              0, /* own address - don't care if master */
                              240, /* dsp clock 240Mhz) */
                              100, /* 100Khz master clock*/
                               0, /* number of bits/byte to be received or transmitted (8)*/
                               0, /* DLB mode on*/
                               1 /* FREE mode of operation on*/
];
I2C_setup(&setup);

i2c_status =I2C_write( dataW1,                       //pointer to data array 往寄存器0x09里写入0x34
                                          2,                                  //length of data to be transmitted
                                          1,                                  //master or slaver
                                           LP3913_ADDR,       //slave address to transmit to
                                          1,                                 //transfer mode of operation
                                           30000                       //time out for bus busy
);
......
i2c_status接收到的返回值是1(Bus busy;not able to generate start condition),请问,这种错误是怎么导致的?我在初始化I2C模块时,配置错误吗?
谢谢。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分