2012-02-18 75 views
3

您好,我目前正在使用「裸機」運行的AT91SAM7X256。我已經徹底閱讀了數據表和體系結構手冊,考慮到這一點,我得出了FIQ比IRQ優先的結論,因此FIQ不應該被IRQs先佔。arm7tdmi IRQ和FIQ優先

但是在實踐中我注意到儘管我沒有觸及CPSR中的F位,但IRQ暫停執行我的FIQ處理程序。假設不應該暫停服務IRQs的FIQ不正確?

我需要做些什麼來確保我的FIQ服務程序不會中斷?

感謝您

回答

3

當你輸入一個FIQ處理器,ARM核心會自動禁用其他中斷,雙方FIQ和IRQ,通過在CPSR設置「我」和「F」位。這讓你感覺沒有任何東西可以搶佔FIQ。但SW可以覆蓋這種行爲!所以我想你的代碼的一部分正在觸及CPSR並重置'I'位。因此,即使您的FIQ正在運行,IRQ中斷也可能會被觸發。

要增加上面的解釋,FIQ看起來很特殊的原因是,當進入一個IRQ處理程序時,只通過禁止進一步的IRQ來設置'I'位。 'F'位未設置,因此進一步的FIQ可以中斷正在運行的IRQ處理程序而無需SW干預。