Timer I2C和定时器中断(定时器1)

Timer I2C和定时器中断(定时器1),timer,interrupt,pic,sampling,i2c,Timer,Interrupt,Pic,Sampling,I2c,我正在尝试使用dsPIC33微控制器读取多个I2C从设备 我希望有人能告诉我使用定时器中断(在本例中为timer1)和收集I2C数据的正确方法 到目前为止,我可以通过while循环从I2C从设备收集数据,但由于尝试添加计时器中断(因此我可以应用自己的采样率,而不是“尽可能快地收集”),我的I2C软件驱动程序被卡住了 我试过使用非常低的定时器速度(目前为1Hz),I2C的标准速度为100KHz。PIC正在以80MHz的频率进行处理 使用定时器和I2C模块的正确方法是什么?我在网上看了一下,似乎这可

我正在尝试使用dsPIC33微控制器读取多个I2C从设备

我希望有人能告诉我使用定时器中断(在本例中为timer1)和收集I2C数据的正确方法

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

我试过使用非常低的定时器速度(目前为1Hz),I2C的标准速度为100KHz。PIC正在以80MHz的频率进行处理


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

似乎我设法解决了自己的问题,而且速度也相当快

原来这是一个中断优先级问题,我以前将计时器1设置为优先级7(最高):

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

IPC0bits.T1IP = 0b001; // Timer1 Interrupt priority level=1
希望这能帮助其他遇到这个问题的人,我猜不同的优先级与I2C中断冲突

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