TI中文支持网
TI专业的中文技术问题搜集分享网站

28335的IIC的求助

大家好,我初学28335,也是人生第一次接触IIC,这次需要使用Ti公司的HDC1080。我看了例程里面的i2c_eeprom的程序,然后在此基础上改,但是失败了。

现在的问题是:

第一,操作步骤不正确,但是我按手册认真看看了看HDC1080的操作时序,以为是对的。

第二,我觉得我通过发出去了,但是读回来全是我发出去的内容,好奇怪啊,所以接收一定是错的。

第三,能力太差,我不能理解为什么在接收的时候要向寄存器里面写地址,而不是在线上读回来。

所以,我想请教看见此帖的大哥们可不可以施舍一下你们平时操作IIC的代码,我真心觉得例程里面几百行代码是一种表演,而实际不会这么麻烦。

或者是你们在使用HDC1080的代码,也可以给我借鉴一下。

小弟感激不尽!

mangui zhang:

这个应该不难啊   配置好IIC接口   然后根据手册命令读取就可以了 

你看看这个EVM板有没有提供相关软件工程代码  参考

http://www.ti.com.cn/tool/cn/TIDA-00666

大家好,我初学28335,也是人生第一次接触IIC,这次需要使用Ti公司的HDC1080。我看了例程里面的i2c_eeprom的程序,然后在此基础上改,但是失败了。

现在的问题是:

第一,操作步骤不正确,但是我按手册认真看看了看HDC1080的操作时序,以为是对的。

第二,我觉得我通过发出去了,但是读回来全是我发出去的内容,好奇怪啊,所以接收一定是错的。

第三,能力太差,我不能理解为什么在接收的时候要向寄存器里面写地址,而不是在线上读回来。

所以,我想请教看见此帖的大哥们可不可以施舍一下你们平时操作IIC的代码,我真心觉得例程里面几百行代码是一种表演,而实际不会这么麻烦。

或者是你们在使用HDC1080的代码,也可以给我借鉴一下。

小弟感激不尽!

Zheng Gao Gao:

回复 mangui zhang:

谢谢大哥的建议,但是,大哥啊!年少的我也曾经天真的以为是这样。但是碍于水平没有搞出来,我已经研究了五天了,可能是祖师爷不赏饭吃吧!官方就只有一个例程,我已经翻来覆去看了好多遍,自认为明白了他的意思。但是在按照自己的想法改后,就是不能成功。目前我发现,我收到的是我发出去的那些,可能发送是没有问题的,接收出了问题,以您的看法,会是什么原因呢?

大家好,我初学28335,也是人生第一次接触IIC,这次需要使用Ti公司的HDC1080。我看了例程里面的i2c_eeprom的程序,然后在此基础上改,但是失败了。

现在的问题是:

第一,操作步骤不正确,但是我按手册认真看看了看HDC1080的操作时序,以为是对的。

第二,我觉得我通过发出去了,但是读回来全是我发出去的内容,好奇怪啊,所以接收一定是错的。

第三,能力太差,我不能理解为什么在接收的时候要向寄存器里面写地址,而不是在线上读回来。

所以,我想请教看见此帖的大哥们可不可以施舍一下你们平时操作IIC的代码,我真心觉得例程里面几百行代码是一种表演,而实际不会这么麻烦。

或者是你们在使用HDC1080的代码,也可以给我借鉴一下。

小弟感激不尽!

BIN YAO1:

回复 Zheng Gao Gao:

用的是AT公司的AT24C32,采用的是page write,不知道对你是否有帮助

void I2C_write(Uint16 I2C_NUMBYTES, Uint16 Data[]){ Uint16 i; Uint32 tdelay;

I2caRegs.I2CSAR.all = I2C_SLAVE_ADDR; //Set slave address I2caRegs.I2CCNT = I2C_NUMBYTES + 2; //Set count to 5 characters plus 2 address bytes I2caRegs.I2CDXR.all = I2C_EEPROM_HIGH_ADDR; //Send eeprom high address I2caRegs.I2CMDR.bit.TRX = 1; //Set to Transmit mode I2caRegs.I2CMDR.bit.MST = 1; //Set to Master mode I2caRegs.I2CMDR.bit.FREE = 1; //Run in FREE mode I2caRegs.I2CMDR.bit.STP = 1; //Stop when internal counter becomes 0 I2caRegs.I2CMDR.bit.STT = 1; //Send the start bit, transmission will follow i=0; tdelay=0; while(I2caRegs.I2CSTR.bit.XRDY == 0) //Do nothing till data is shifted out { tdelay++; if(tdelay>99999)break; } I2caRegs.I2CDXR.all = I2C_EEPROM_LOW_ADDR; //Send eeprom low address for(i = 0; i < I2C_NUMBYTES; i++) { tdelay=0; while(I2caRegs.I2CSTR.bit.XRDY == 0) //Do nothing till data is shifted out { tdelay++; if(tdelay>99999)break; } I2caRegs.I2CDXR.all = Data[i]; //Send out the message } DELAY_US(100L); //延时100us}

大家好,我初学28335,也是人生第一次接触IIC,这次需要使用Ti公司的HDC1080。我看了例程里面的i2c_eeprom的程序,然后在此基础上改,但是失败了。

现在的问题是:

第一,操作步骤不正确,但是我按手册认真看看了看HDC1080的操作时序,以为是对的。

第二,我觉得我通过发出去了,但是读回来全是我发出去的内容,好奇怪啊,所以接收一定是错的。

第三,能力太差,我不能理解为什么在接收的时候要向寄存器里面写地址,而不是在线上读回来。

所以,我想请教看见此帖的大哥们可不可以施舍一下你们平时操作IIC的代码,我真心觉得例程里面几百行代码是一种表演,而实际不会这么麻烦。

或者是你们在使用HDC1080的代码,也可以给我借鉴一下。

小弟感激不尽!

Zheng Gao Gao:

回复 BIN YAO1:

谢谢你的帮助,小弟已经把它弄出来了,但是我是参照HDC1080的数据手册的操作时序用GPIO口模拟的,而且也搞清楚了它的时序,这样做显然没有用到28335的IIC模块。

所以我贼心不死,上午继续在修改例程代码,仍然没有成功。所以我希望大哥好人做到底,给我一个你的完整的程序包括你AT24C32关于IIC的配置、写数据和读数据的代码。我实在不知道我根据例程修改的代码错在哪里了 ,并且希望大哥原谅我这种厚脸皮伸手党的行为。

如果可以的话,也可以发我邮箱1015887796@qq.com,先谢谢了!

赞(0)
未经允许不得转载:TI中文支持网 » 28335的IIC的求助
分享到: 更多 (0)