1、ARDY位是做什么用的?
2、不使用FIFO的I2C通讯中,I2CCNT位有用吗?
3、不使用FIFO的I2C通讯中,能否按照先发start +SAR 判断是否接收到ACK,再发数据 判断数据是否发送的完成 XRDY==1?的方式操作?
试了一旦STT=1,NACK=1、ARDY=1、BB=1 波特率设置的400KHZ ,程序实现不了,有无大牛使用此种方式实现的?
Rayna Wang:
对于TMS320F2833x 的I2C模块寄存器配置请参考http://www.ti.com/lit/ug/sprug03b/sprug03b.pdf
下面链接是 基于TMS320F28075芯片的I2C 不使用FIFO的问题讨论,希望对你的问题有所帮助,谢谢!
e2e.ti.com/…/674494
1、ARDY位是做什么用的?
2、不使用FIFO的I2C通讯中,I2CCNT位有用吗?
3、不使用FIFO的I2C通讯中,能否按照先发start +SAR 判断是否接收到ACK,再发数据 判断数据是否发送的完成 XRDY==1?的方式操作?
试了一旦STT=1,NACK=1、ARDY=1、BB=1 波特率设置的400KHZ ,程序实现不了,有无大牛使用此种方式实现的?
mangui zhang:不使用fifo fifo的相关标志就不要关心和判断。需要启动发送 等待ACK按时序一步一步走 耗用CPU资源较多。
1、ARDY位是做什么用的?
2、不使用FIFO的I2C通讯中,I2CCNT位有用吗?
3、不使用FIFO的I2C通讯中,能否按照先发start +SAR 判断是否接收到ACK,再发数据 判断数据是否发送的完成 XRDY==1?的方式操作?
试了一旦STT=1,NACK=1、ARDY=1、BB=1 波特率设置的400KHZ ,程序实现不了,有无大牛使用此种方式实现的?
user1792825:
我用的是F28035,跟你的类似,基本原理一样。
1.不知道,没用过,但是用到了XRDY,做主机发送的时候,需要这位。
2.我没使用FIFO,也没用I2CCNT,实现了。
3.我的大概程序是这么的
I2caRegs.I2CSAR = I2C_SLAVE_ADDR; //Set slave address I2caRegs.I2CCNT = NumBytes + 1; //Set count to NumBytes characters plus 1 address bytes I2caRegs.I2CDXR = Word_Address; //Send eeprom low 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
然后判断XRDY,发一个byte判断一次。
这只是我的实现方式,你可以再找找,我记得网上有的,我也是找的别人的资料改的。