请教下各位大神,公司需要用I2C操作片外eeprom,板子是tms570 1227
1.stop condition的中断和接收发送中断分不清 stop中断具体有什么作用
在我的理解中,如果是发送 每次设定了data count,当那个多数据发送完毕后,系统自动产生一个stop condition。那此时stop condition的产生时候可以认为发送完成了呢?
2. 如果我使用发送和接收中断 我还需要进行 i2cIsBusBusy(i2cREG1) i2cIsStopDetected(i2cREG1) i2cIsMasterReady(i2cREG1) 这三个操作吗,是否可以认为进入发送或者接收中断后 bus处于free master也ready了 stopcondition也被detect到了???
3. 看技术手册 有个地方描述互相冲突 :(1)Generated when the transmitted data has been copied from the data transmit
register (I2CDXR) into the transmit-shift register (I2CXSR) page1768
(2)A transmit interrupt is generated just after the START condition in master transmitter mode page1768
一个说发送中断是 数据从DXR转移到了XSR后产生,一个是START condition之后产生。 到底怎么理解?
如果我在程序里面是 这样
岂不是 第一句话i2cSetStart(i2cREG1); 就要进入了发送中断了??
问题比较多 感谢大神的解答 谢谢
gaoyang9992006:
http://www.ti.com.cn/cn/lit/ug/swru367c/swru367c.pdf
7.2.1.1 START and STOP Conditions
———————
发送完成是会产生一个STOP CONDITIONS,同时也应该是主机发送完成,因此也会产生一个发送完成的中断标志。
gaoyang9992006:
第二个问题, 你的想法是正确的,如果处于STOP状态,那就是没有数据在发送了,如果处于START,那就是应该在发送中。
gaoyang9992006:
应该是两个原因均可产生那个中断吧。应该不冲突,如果你启用了那个中断,才可以,如果没有启用,也就是只在那个标志位进行置位而已。
cc liu1:
回复 gaoyang9992006:
感谢解答
还有一些问题,
1、slave address是自动发出去的吗? 如果不是发送函数是哪一个?
还是自己用sendbyte 函数发? 假如我的slave add是0x1234,现在是transmitter,如果自己要将0x1234和方向用sendbyte,那操作寄存器又有什么意义呢?
2、 start condition bit 和 stop condition bit是自动发的(set对应的寄存器之后)? 当自己是receiver时 ,acknowledge bit也是自动发送的吧?
感谢解答
cc liu1:
回复 gaoyang9992006:
感谢解答
还有一些问题,
1、slave address是自动发出去的吗? 如果不是发送函数是哪一个?
还是自己用sendbyte 函数发? 假如我的slave add是0x1234,现在是transmitter,如果自己要将0x1234和方向用sendbyte,那操作寄存器又有什么意义呢?
2、 start condition bit 和 stop condition bit是自动发的(set对应的寄存器之后)? 当自己是receiver时 ,acknowledge bit也是自动发送的吧?
感谢解答