2011-07-22 58 views
3
檢測

我看過的Cortex-M3(或M0)的ARM文件,它說,它可以作爲水平sensetive或脈衝(邊緣)中斷服務程序中NVIC控制器。問題在於如何做到這一點,如果這是通過軟件來完成的話,它就很模糊。皮質:NVIC,請demostrate如何使電平或邊沿由軟件

我無法看到NVIC或者使得控制中斷的類型(以選擇通過調整寄存器位邊沿或電平)內的任何種寄存器。因此,處理程序中的軟件必須由軟件完成,但它在這個領域又是模糊的。

我喜歡聽到任何人有辦法讓它邊緣或水平觸發軟件中斷。

請在處理代碼中證明(如果控制它)表示,使檢測的水平或脈衝。

如果是這種水平檢測,我可以抱中斷有效和處理程序禁用,直到通過外部代碼爲它重新EXCUTE中斷恢復。這是我想要做的,但如果這是脈衝檢測類型,它將不起作用。

THX

回答

5

描述了Cortex-M3 NIVC如何處理水平或邊緣(脈衝)的文件觸發的中斷可以在這裏找到:

這可能是你在你的問題中引用的文檔。 Joseph Yiu的書「ARM Cortex-M3權威指南」也有很好的描述。

還有就是NVIC的這兩個中斷信號類型沒有特別的配置 - 它處理任何一種。實質上,當中斷被置位(基於電平或邊沿觸發)時,NVIC將該狀態鎖存在SETPENDx寄存器中。當該中斷的ISR被向量化時,ACTIVEx寄存器中的相應位將被置1,並且SETPENDx寄存器中的位將被清零。

而中斷時,如果從激活到激活中斷線轉換,掛起位將被再次打開,並且在從當前活躍的ISR實例回報,中斷將再次處理。這處理邊緣觸發的中斷情況。此外,當ISR返回(並且NVIC清除'active'位)時,NIVC將重新檢查中斷線的狀態 - 如果它仍然被置位,它將再次置位待定位(即使沒有'從不活躍變爲活躍)。這處理了中斷被電平觸發的情況,並且ISR沒有設法導致中斷被解除斷言(也許共享IRQ線上的第二個器件在關鍵時刻斷言了它的中斷,所以沒有時間當中斷線不活動時)。

如果這是電平檢測,我可以保持中斷處於活動狀態並由處理程序禁用,直到通過重新執行中斷的外部代碼恢復爲止。

我不知道我真的能理解你在這裏後在做什麼,但我認爲你也許可以做到你想要使用NVIC的SETENAxCLRENAx寄存器啓用/禁用中斷什麼。這些工作與待處理位無關,所以即使中斷被禁止,中斷也可能處於掛起狀態(或成爲掛起狀態)。所以你可以拖延處理一箇中斷,只要你想。

如果這還不夠,可以通過簡單地設置相應的SETPENDx寄存器中的掛起位來引起中斷通過軟件掛起 - CPU將引導到ISR,就像硬件中斷被斷言一樣(假設在SETENAx寄存器中啓用了中斷)。您還可以使用「軟件觸發中斷寄存器」(STIR)通過軟件觸發中斷。

+0

謝謝,現在更清楚了。我實際上使用Cortex-M0我不能使用STIR寄存器,因爲它不在那裏。我給了SETPENDx一下,我只是想出了一個解決方案。謝謝! – riscy

相關問題