2

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

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

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

我尝试过使用非常低的计时器速度(目前为 1Hz),并且 I2C 处于标准的 100KHz 速度。PIC 以 80MHz 的频率处理。

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

4

1 回答 1

1

看来我设法解决了自己的问题,而且也相当快。

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

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

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

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

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

于 2013-03-27T11:05:12.253 回答