最近在用2812程式設計,遇到一個問題,想請教各位高手,我先說一下自己的一點理解請教高手指點。 PIE一般用到的中斷組是INT1-INT12。我們知道他們的優先順序順序是INT1>INT2>INT3…INT11>INT12。在開所有中斷使能的前提下,如果不同組(如INT1組的TINT0和INT2組的T1CINT)的中斷同時向PIE發出中斷請求,那麼PIE會放中斷優先順序較高(INT1.TINT0)的中斷過去。同樣的在如果是同組的中斷請求同時到達的話(如INT2組的),那麼也同樣按照PIE中斷向量表檢視同組優先順序,CPU響應優先順序較高的中斷。 我的理解是,(1)不同組之間的中斷可以實現中斷巢狀。如INT1組的TINT0和INT2組的T1CINT。當CPU正在響應INT2組的T1CINT中斷服務程式這時如果產生了INT1組的TINT0中斷的話那麼CPU便會產生中斷巢狀,先停下T1CINT轉而去執行TINT0,當TINT0中斷服務程式執行完之後再去執行剩餘沒有執行網的INT1中斷服務程式。(2)同組之間的中斷不可以實現中斷巢狀。如果同樣是INT1組的兩個中斷比如ADCINT和TINT0。當CPU正在響應INT1的中斷服務程式時,這時如果產生了ADCINT,儘管ADCINT在INT1組中的優先順序比TINT0的優先順序高,還是不會產生中斷巢狀。因為同組的中斷在向CPU發出中斷請求之前先要經過PIE中的應答位PIEACK驗證,如果PIEACK為1說明此時正有改組的中斷正在響應,PIE不會放響應該發出中斷請求的中斷源透過,只有等到正在響應的中斷服務程式執行完才會去響應剛剛發出中斷請求的中斷服務程式。這也就是為什麼,我們在中斷服務程式的後面都要加上一句PieCtrl.PIEACK.bit.ACKx=1;就是為了讓應答位清零,可以響應同組的其他中斷。以上兩點是我對2812中斷巢狀的一點理解,尤其是提到的第(2)點,萬望高手不吝指導。
最近在用2812程式設計,遇到一個問題,想請教各位高手,我先說一下自己的一點理解請教高手指點。 PIE一般用到的中斷組是INT1-INT12。我們知道他們的優先順序順序是INT1>INT2>INT3…INT11>INT12。在開所有中斷使能的前提下,如果不同組(如INT1組的TINT0和INT2組的T1CINT)的中斷同時向PIE發出中斷請求,那麼PIE會放中斷優先順序較高(INT1.TINT0)的中斷過去。同樣的在如果是同組的中斷請求同時到達的話(如INT2組的),那麼也同樣按照PIE中斷向量表檢視同組優先順序,CPU響應優先順序較高的中斷。 我的理解是,(1)不同組之間的中斷可以實現中斷巢狀。如INT1組的TINT0和INT2組的T1CINT。當CPU正在響應INT2組的T1CINT中斷服務程式這時如果產生了INT1組的TINT0中斷的話那麼CPU便會產生中斷巢狀,先停下T1CINT轉而去執行TINT0,當TINT0中斷服務程式執行完之後再去執行剩餘沒有執行網的INT1中斷服務程式。(2)同組之間的中斷不可以實現中斷巢狀。如果同樣是INT1組的兩個中斷比如ADCINT和TINT0。當CPU正在響應INT1的中斷服務程式時,這時如果產生了ADCINT,儘管ADCINT在INT1組中的優先順序比TINT0的優先順序高,還是不會產生中斷巢狀。因為同組的中斷在向CPU發出中斷請求之前先要經過PIE中的應答位PIEACK驗證,如果PIEACK為1說明此時正有改組的中斷正在響應,PIE不會放響應該發出中斷請求的中斷源透過,只有等到正在響應的中斷服務程式執行完才會去響應剛剛發出中斷請求的中斷服務程式。這也就是為什麼,我們在中斷服務程式的後面都要加上一句PieCtrl.PIEACK.bit.ACKx=1;就是為了讓應答位清零,可以響應同組的其他中斷。以上兩點是我對2812中斷巢狀的一點理解,尤其是提到的第(2)點,萬望高手不吝指導。