我正在尝试使用dsPIC33微控制器从多个I2C从器件读取数据。
我希望有人能告诉我使用定时器中断(在这种情况下是timer1)和收集I2C数据的正确方法。
到目前为止,我可以通过循环while循环从I2C从设备中收集数据,但是因为尝试添加定时器中断(所以我可以应用我自己的采样率而不是“尽可能快地收集”)我的I2C软件驱动程序卡住了。
我尝试过非常低的定时器速度(此时为1Hz),而I2C则是标准的100KHz速度。 PIC处理频率为80MHz。
使用定时器和I2C模块的正确方法是什么?我在网上看了一下,似乎可能是中断优先级问题,因为使用timer1时我在中断(timer1)中有一个中断(I2C),但到目前为止没有运气。
答案 0 :(得分:0)
似乎我设法解决了我自己的问题,而且很快。
原来这是一个中断优先级问题,我以前把我的timer1设置为优先级7(最高):
IPC0bits.T1IP = 0b111; // Timer1 Interrupt priority level=7
将此更改为优先级1解决了问题:
IPC0bits.T1IP = 0b001; // Timer1 Interrupt priority level=1
希望这可以帮助遇到此问题的其他人,我的猜测是不同的优先级与I2C中断冲突。