Przerwania

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania

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