2013-03-27 118 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中斷相沖突。