Przerwania
Jednostka centralna posiada układ przerwań, który jest w stanie przyjmować i obsługiwać 32 przerwania. Układ przerwań jest układem priorytetowym. Ustalenie priorytetów związane jest z geometrią zgłoszeń przerwań, a mianowicie im niższy jest numer przerwania, tym wyższy jest jego priorytet.
Obsługę przerwania wykonuje się gdy:
- nastąpi zgłoszenie przerwania do rejestru RZm
- zapalona jest maska odpowiadająca zgłoszonemu przerwaniowi,
- wskaźnik przeskoku P=0,
- ostatnim wykonanym rozkazem nie był rozkaz modyfikacji MD,
- system nie jest w stanie STOP.
Obsługa przerwania składa się z następujących czynności:
- zapamiętanie aktualnej zawartości licznika rozkazów IC,
- zapamiętanie aktualnej zawartości rejestru R0,
- zapamiętanie aktualnej zawartości rejestru stanu SR,
- zapamiętanie specyfikacji przerwania w przypadku przerwania zewnętrznego lub zapamiętanie zera dla przerwań nie z kanałów,
- wyzerowanie rejestru R0,
- wyzerowanie pozycji rejestru RM odpowiadającej danemu przerwaniu oraz wszystkich mniej znaczących pozycji rejestru RM,
- wyzerowanie SR10 (bitu Q),
- wpisanie nowej zawartości licznika rozkazów IC odpowiadającej numerowi przerwania,
- uaktualnienie wskaźnika stosu.
Zapamiętywanie zawartości IC, R0, SR oraz specyfikacji przerwania odbywa się począwszy od adresu wskazanego przez wskaźnik stosu. Wskaźnik stosu znajduje się w komórce pamięci o adresie 97. Uaktualnienie wskaźnika stosu polega na zwiększeniu jego wartości o 4.
Wpisanie nowej wartości IC odbywa się wg tablicy przerwań. Tabela przerwań zawiera adresy początków podprogramów obsługi przerwań. Tabela umieszczona jest w komórkach pamięci o adresach 64÷95 w bloku systemowym pamięci operacyjnej, przy czym kolejne adresy odpowiadają numerom przerwań. Wpisanie nowej zawartości IC polega na wpisaniu wzawartości komórki pamięci odpowiadającej numerowi przyjętego przerwania +64.
Jeżeli:
- RZ[i] = 1
- i ∈ [0÷31]
- RM[j] = 1 gdzie j ∈ [0÷9] oznacza numer pozycji rejestru RM odpowiadającej przerwaniu o numerze i,
to:
- S[S/97;0/;0] := IC
- S[S/97;0/+1;0] := R0
- S[S/97;0/+2;0] := SR
- S[S/97;0/+3;0] := specyfikacja przerwania lub 0
- R0 := 0
- RM[j÷9] := 0 dla i ∈ [1÷31]
- RM[0÷9] := 0 dla i = 0
- RZj := 0
- IC := S/64+1;0/
- S/97;0/ := S/97;0/+4
- SR10 := 0
Układ przerwań zawiera następujące rejestry:
- RZ - 32-bitowy rejestr zgłoszeń przerwań, w którym zapamiętywane są wszystkie zgłoszenia przerwań,
- RM - 10-bitowy rejestr służący do maskowania przerwań (pozycje 0÷9 rejestru SR),
- RP - 32-bitowy rejestr przyjęć przerwań, w którym następuje wybranie przerwania o najwyższym priorytecie spośród przerwań zamaskowanych.
Poniżej przedstawiono znaczenie poszczególnych pozycji rejestru zgłoszeń przerwań RZ:
RZn | Znaczenie |
---|---|
0 | alarm zasilania (z danego procesora) |
1 | błąd parzystości pamięci operacyjnej |
2 | brak pamięci operacyjnej |
3 | zgłoszenie przerwania z drugiego procesora (przeważnie o wyższym priorytecie) |
4 | zanik zasilania (z interfejsu) modułów zewnętrznych |
5 | przerwanie zegarowe |
6 | nieprawidłowy rozkaz |
7 | nadmiar dzielenia stałoprzecinkowego |
8 | podmiar zmiennoprzecinkowy |
9 | nadmiar zmiennoprzecinkowy |
10 | błąd danych zmiennoprzecinkowych lub próba dzielenia przez zero |
11 | do zastosowań specjalnych |
12÷27 | przerwania kanałowe |
28 | zgłoszenie operatora (OPRQ) |
29 | zgłoszenie przerwania z drugiego procesora (przerwanie o niższym priorytecie) |
30÷31 | przerwania programowe |