我尝试用查询方式(不用中断方式)来使用28027 I2C功能读写EEPROM AT24C04。
第一步:初始化
延时十几ms后,启动写2个字节:
之后每隔1ms检查一次:
if(I2caRegs.I2CFFTX.bit.TXFFINT==1) { I2caRegs.I2CFFTX.bit.TXFFINTCLR=1; /* …*/ }
这时I2CMDR的值变成了0x4220,I2CFFTX的值变成了0x6083。
问题一:为什么I2CMDR的值变成了0x4220?bit10是MST原来是1现在变成了0,竟然从Master mode变成了Slave mode?
问题二:为什么TXFFINTCLR=1清除中断标志不起作用?(0x6083中的那个8清不掉)
问题三:到底这次数据发送完了没有?
user1899627:自己顶一下
我尝试用查询方式(不用中断方式)来使用28027 I2C功能读写EEPROM AT24C04。
第一步:初始化
延时十几ms后,启动写2个字节:
之后每隔1ms检查一次:
if(I2caRegs.I2CFFTX.bit.TXFFINT==1) { I2caRegs.I2CFFTX.bit.TXFFINTCLR=1; /* …*/ }
这时I2CMDR的值变成了0x4220,I2CFFTX的值变成了0x6083。
问题一:为什么I2CMDR的值变成了0x4220?bit10是MST原来是1现在变成了0,竟然从Master mode变成了Slave mode?
问题二:为什么TXFFINTCLR=1清除中断标志不起作用?(0x6083中的那个8清不掉)
问题三:到底这次数据发送完了没有?
Jordan Zhou:
回复 user1899627:
抓一个clk和data线上的波形来看看。
怀疑I2C压根就没有工作。看看它的clock是否配置了。
我尝试用查询方式(不用中断方式)来使用28027 I2C功能读写EEPROM AT24C04。
第一步:初始化
延时十几ms后,启动写2个字节:
之后每隔1ms检查一次:
if(I2caRegs.I2CFFTX.bit.TXFFINT==1) { I2caRegs.I2CFFTX.bit.TXFFINTCLR=1; /* …*/ }
这时I2CMDR的值变成了0x4220,I2CFFTX的值变成了0x6083。
问题一:为什么I2CMDR的值变成了0x4220?bit10是MST原来是1现在变成了0,竟然从Master mode变成了Slave mode?
问题二:为什么TXFFINTCLR=1清除中断标志不起作用?(0x6083中的那个8清不掉)
问题三:到底这次数据发送完了没有?
user4329368:
回复 Jordan Zhou:
如果clk和data的线一直是高电平,但I2C 模块的寄存器是可赋值的,这样的话怎么解决。 我的程序和上面一样,而且在TMS320F28377D芯片测AT24C64上正常,在28034测 AT24C08上不行,给CMDR付过值之后,FFTX,和STR的值均不变化,不知道是什么原因?请指教?