I2C和定时器中断(timer1)

时间:2013-03-27 10:39:06

标签: timer interrupt pic sampling i2c

我正在尝试使用dsPIC33微控制器从多个I2C从器件读取数据。

我希望有人能告诉我使用定时器中断(在这种情况下是timer1)和收集I2C数据的正确方法。

到目前为止,我可以通过循环while循环从I2C从设备中收集数据,但是因为尝试添加定时器中断(所以我可以应用我自己的采样率而不是“尽可能快地收集”)我的I2C软件驱动程序卡住了。

我尝试过非常低的定时器速度(此时为1Hz),而I2C则是标准的100KHz速度。 PIC处理频率为80MHz。

使用定时器和I2C模块的正确方法是什么?我在网上看了一下,似乎可能是中断优先级问题,因为使用timer1时我在中断(timer1)中有一个中断(I2C),但到目前为止没有运气。

1 个答案:

答案 0 :(得分:0)

似乎我设法解决了我自己的问题,而且很快。

原来这是一个中断优先级问题,我以前把我的timer1设置为优先级7(最高):

IPC0bits.T1IP = 0b111; // Timer1 Interrupt priority level=7

将此更改为优先级1解决了问题:

IPC0bits.T1IP = 0b001; // Timer1 Interrupt priority level=1

希望这可以帮助遇到此问题的其他人,我的猜测是不同的优先级与I2C中断冲突。