因项目需要,在arm端使用I2C0访问eeprom1,dsp使用i2c1访问eeprom2。
单独对arm和dsp进行读写测试,写进去数据读出来,进行对比,没有问题。
在dsp进行读写测试的时候,同时测试arm的读写操作,dsp会有异常。
提示写数据时等不到 ICXRDY 寄存器的返回状态。
如果dsp正常,arm这边过一会儿就会出错。
请教各位大神,两个i2c不能同时使用吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
因项目需要,在arm端使用I2C0访问eeprom1,dsp使用i2c1访问eeprom2。
单独对arm和dsp进行读写测试,写进去数据读出来,进行对比,没有问题。
在dsp进行读写测试的时候,同时测试arm的读写操作,dsp会有异常。
提示写数据时等不到 ICXRDY 寄存器的返回状态。
如果dsp正常,arm这边过一会儿就会出错。
请教各位大神,两个i2c不能同时使用吗?
理论上应该互相不会有影响
看看软件其他部分会不会互相有影响?比如初始化等
谢谢您的回复!
这两天不断改进程序,发现dsp那边不出错误了,但是ARM这边会出现问题,赋值ICCNT寄存器值为64,每次for循环读64个字节,函数退出。
i2c控制器此时应该产生一个nack和一个stop。
读一个两个或单步运行,都没有问题。
在用测试程序连续操作多次之后,会出现主机没有发stop的情况。然后总线就是一直忙。for循环读出来的64个字节值是正确的,然后手动去读ICDRR,还是能连续读出64个值。
看现象应该是内部计数器有问题,没有往下减。但是ICCNT值一直是64。
1.目前系统启用了两个中断,关了中断之后,问题消失。
2.中断会导致无法及时读取ICDRR,但是如果不读ICDRR,主机就不会发下一个clock,想不通为什么会有影响。
3.中断会影响i2c总线的时序吗?理论上是不会影响的