请教PSoC的I2C模块使用问题

[复制链接]
4392|8
 楼主| chengli 发表于 2009-8-12 17:28 | 显示全部楼层 |阅读模式
    我们在使用CY8C21123,里面用到了I2C模块,在附件的手册说明里,我们找到这个函数 BYTE I2Cm_bWriteCBytes(BYTE bSlaveAddr, const BYTE * pbXferData, BYTE bCnt, BYTE bMode)
    但是有个问题,比如,24C02这个I2C的slave的地址是0x03;我们需要往这个24C02的0x08地址写入0xff这个数据,在手册中的函数中,slave的地址(这里是0x03),都有体现;但是,具体的slave中数据要写入的地址(0x08)没有体现,请问,该如何处理,该使用哪个函数?
jxin 发表于 2009-8-13 12:26 | 显示全部楼层
你说的是Slave internal sub-address? 你看看I2Cm模块datasheet的page 12 of 13中的txCBuf的定义对你有没有帮助?
const BYTE txCBuf[] = { 0x00, // Slave internal sub-address 0
0x12,0x34,0x08, // Seconds and minutes in BCD
                         // 8:34:12am
0x01,                // Day of Week, Monday
0x15,0x03,0x02, // Day-Month-year 15-Mar-02
0x93 }; // Enable clock output
ni_labview 发表于 2009-8-13 13:18 | 显示全部楼层
把你的代码或简单project发上来,大家帮忙看看,应该没问题
 楼主| chengli 发表于 2009-8-14 16:36 | 显示全部楼层
哦,呵呵,谢谢大家,是这样,我发现,不能使用I2Cm模块,只能支持I2CHW模块。现在的疑问是,如果CY8C21123作为host,我们给其它设备发送控制的命令字,那么改怎么使用它提供的函数来写入?我的工程很简单就是发送几个控制指令(一个二维数组,地址和命令字)
 楼主| chengli 发表于 2009-8-14 16:39 | 显示全部楼层
例如:我找到手册里面的一个函数:
I2CHW_InitWrite
说明:
此函数初始化一个指向用于存储数据的从设备数据缓冲区指针,并初始化同一缓冲区的计数字节的数值。计数器初始化为最大的供应缓冲区长度。在主设备写入操作的下一个实例中,数据将放置到由此函数所定义的地址。
C语言原型:
void I2CHW_InitWrite(BYTE * pWriteBuf, BYTE bBufLen);

但是大家都知道,需要给I2C的设备写命令字,我们需要写入设备地址,和命令字所在设备里的具体地址和数据,那么这个函数似乎就不能用,但是I2CHW只有这一个写的函数,请问大家该如何实现那?
 楼主| chengli 发表于 2009-8-14 16:40 | 显示全部楼层
难道cypress的I2C不能当host来写入东西?
ni_labview 发表于 2009-8-17 10:32 | 显示全部楼层
I2CHW_bWriteBytes(0x50, txBuffer, 3, I2CHW_CompleteXfer);
while(!I2CHW_bReadI2CStatus() & I2CHW_WR_COMPLETE);
I2CHW_ClrWrStatus();
楼主,这是我写24C04的程序,0X50是器件地址,txBuffer[0]是字节地址,txBuffer[1],txBuffer[2]是要写入的数据
没有其他的啊,实在不成我把代码发你,留个邮箱
Cypress2009 发表于 2009-8-23 16:01 | 显示全部楼层
学习了
Cypress-lh 发表于 2009-8-23 16:55 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

66

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部