2013-03-27 78 views
2

我正尝试使用dsPIC33单片机从多个I2C从器件读取数据。I2C和定时器中断(定时器1)

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

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

我试过用非常低的定时器速度(目前是1Hz),I2C是在标准的100KHz速度上。 PIC正在80MHz处理。

什么是使用定时器和I2C模块的正确方法?我看了一下在线看来,它可能是一个中断优先级的问题,因为当使用timer1时,我在中断(timer1)内有一个中断(I2C),尽管目前还没有运气。

回答

0

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

原来这是一个中断优先级的问题,我以前有我的定时器1的优先级为7(最高):

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

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

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

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