Przerwania: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
Nie podano opisu zmian
 
Linia 54: Linia 54:


{| class="wikitable"
{| class="wikitable"
! Pozycja w SR !! Pozycja w RZ !! Adres !! Opis
! Pozycja w SR !! Pozycja w RZ !! Adres<br/>(dec) !! Adres<br/>(hex) !! Opis
|-
|-
| - || 0 || 64 || alarm zasilania (z danego procesora)
| - || 0 || 64 || 0x40 || alarm zasilania (z danego procesora)
|-
|-
| 0 || 1 || 65 || błąd parzystości pamięci operacyjnej
| 0 || 1 || 65 || 0x41 || błąd parzystości pamięci operacyjnej
|-
|-
| 1 || 2 || 66 || brak pamięci operacyjnej
| 1 || 2 || 66 || 0x42 || brak pamięci operacyjnej
|-
|-
| 2 || 3 || 67 || zgłoszenie przerwania z drugiego procesora (przeważnie o wyższym priorytecie)
| 2 || 3 || 67 || 0x43 || zgłoszenie przerwania z drugiego procesora (przeważnie o wyższym priorytecie)
|-
|-
| 3 || 4 || 68 || zanik zasilania (z interfejsu) modułów zewnętrznych
| 3 || 4 || 68 || 0x44 || zanik zasilania (z interfejsu) modułów zewnętrznych
|-
|-
| rowspan=7 | 4 || 5 || 69 || [[przerwanie zegarowe]]
| rowspan=7 | 4 || 5 || 69 || 0x45 || [[przerwanie zegarowe]]
|-
|-
| 6 || 70 || nieprawidłowy rozkaz
| 6 || 70 || 0x46 || nieprawidłowy rozkaz
|-
|-
| 7 || 71 || nadmiar dzielenia stałoprzecinkowego
| 7 || 71 || 0x47 || nadmiar dzielenia stałoprzecinkowego
|-
|-
| 8 || 72 || podmiar zmiennoprzecinkowy
| 8 || 72 || 0x48 || podmiar zmiennoprzecinkowy
|-
|-
| 9 || 73 || nadmiar zmiennoprzecinkowy
| 9 || 73 || 0x49 || nadmiar zmiennoprzecinkowy
|-
|-
| 10 || 74 || błąd danych zmiennoprzecinkowych lub próba dzielenia przez zero
| 10 || 74 || 0x4a || błąd danych zmiennoprzecinkowych lub próba dzielenia przez zero
|-
|-
| 11 || 75 || do zastosowań specjalnych
| 11 || 75 || 0x4b || do zastosowań specjalnych
|-
|-
| rowspan=2 | 5 || 12 || 76 || kanał 0
| rowspan=2 | 5 || 12 || 76 || 0x4c || kanał 0
|-
|-
| 13 || 77 || kanał 1
| 13 || 77 || 0x4d || kanał 1
|-
|-
| rowspan=2 | 6 || 14 || 78 || kanał 2
| rowspan=2 | 6 || 14 || 78 || 0x4e || kanał 2
|-
|-
| 15 || 79 || kanał 3
| 15 || 79 || 0x4f || kanał 3
|-
|-
| rowspan=6 | 7 || 16 || 80 || kanał 4
| rowspan=6 | 7 || 16 || 80 || 0x50 || kanał 4
|-
|-
| 17 || 81 || kanał 5
| 17 || 81 || 0x51 || kanał 5
|-
|-
| 18 || 82 || kanał 6
| 18 || 82 || 0x52 || kanał 6
|-
|-
| 19 || 83 || kanał 7
| 19 || 83 || 0x53 || kanał 7
|-
|-
| 20 || 84 || kanał 8
| 20 || 84 || 0x54 || kanał 8
|-
|-
| 21 || 85 || kanał 9
| 21 || 85 || 0x55 || kanał 9
|-
|-
| rowspan=6 | 8 || 22 || 86 || kanał 10
| rowspan=6 | 8 || 22 || 86 || 0x56 || kanał 10
|-
|-
| 23 || 87 || kanał 11
| 23 || 87 || 0x57 || kanał 11
|-
|-
| 24 || 88 || kanał 12
| 24 || 88 || 0x58 || kanał 12
|-
|-
| 25 || 89 || kanał 13
| 25 || 89 || 0x59 || kanał 13
|-
|-
| 26 || 90 || kanał 14
| 26 || 90 || 0x5a || kanał 14
|-
|-
| 27 || 91 || kanał 15
| 27 || 91 || 0x5b || kanał 15
|-
|-
| rowspan=4 | 9 || 28 || 92 || zgłoszenie operatora (OPRQ)
| rowspan=4 | 9 || 28 || 92 || 0x5c || zgłoszenie operatora (OPRQ)
|-
|-
| 29 || 93 || zgłoszenie przerwania z drugiego procesora (przerwanie o niższym priorytecie)
| 29 || 93 || 0x5d || zgłoszenie przerwania z drugiego procesora (przerwanie o niższym priorytecie)
|-
|-
| 30 || 94 || przerwanie programowe
| 30 || 94 || 0x5e || przerwanie programowe
|-
|-
| 31 || 95 || przerwanie programowe
| 31 || 95 || 0x5f || przerwanie programowe
|-
|-
|}
|}

Aktualna wersja na dzień 17:17, 24 wrz 2013

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ługa przerwań

Obsługę przerwania wykonuje się gdy:

  • nastąpi zgłoszenie przerwania do rejestru RZ
  • 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+i;0/
  • S/97;0/ := S/97;0/+4
  • SR10 := 0

Elementy układu obsługi przerwań

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.

Wszystkie pozycje rejestru zgłoszeń, z wyjątkiem pozycji przerwań kanałowych, dostępne są programowo (rozkazami KI i FI). Wszystkie pozycje (z wyjątkiem zerowej) rejestru RZ są maskowalne. Maskę stanowi rejestr maskujący RM o długości 10 bitów (poz 0÷9 rejestru SR). Przyporządkowanie pozycji rejestru RZ pozycjom rejestru maskującego i adresy początków podprogramów obsługi, a także znaczenie poszczególnych pozycji rejestru zgłoszeń RZ przedstawia tabela poniżej. Przerwania, które zostały zgłoszone, mogą być obsłużone tylko w przypadku, gdy zapalona jest odpowiadająca im pozycja w rejestrze maskującym.

Pozycja w SR Pozycja w RZ Adres
(dec)
Adres
(hex)
Opis
- 0 64 0x40 alarm zasilania (z danego procesora)
0 1 65 0x41 błąd parzystości pamięci operacyjnej
1 2 66 0x42 brak pamięci operacyjnej
2 3 67 0x43 zgłoszenie przerwania z drugiego procesora (przeważnie o wyższym priorytecie)
3 4 68 0x44 zanik zasilania (z interfejsu) modułów zewnętrznych
4 5 69 0x45 przerwanie zegarowe
6 70 0x46 nieprawidłowy rozkaz
7 71 0x47 nadmiar dzielenia stałoprzecinkowego
8 72 0x48 podmiar zmiennoprzecinkowy
9 73 0x49 nadmiar zmiennoprzecinkowy
10 74 0x4a błąd danych zmiennoprzecinkowych lub próba dzielenia przez zero
11 75 0x4b do zastosowań specjalnych
5 12 76 0x4c kanał 0
13 77 0x4d kanał 1
6 14 78 0x4e kanał 2
15 79 0x4f kanał 3
7 16 80 0x50 kanał 4
17 81 0x51 kanał 5
18 82 0x52 kanał 6
19 83 0x53 kanał 7
20 84 0x54 kanał 8
21 85 0x55 kanał 9
8 22 86 0x56 kanał 10
23 87 0x57 kanał 11
24 88 0x58 kanał 12
25 89 0x59 kanał 13
26 90 0x5a kanał 14
27 91 0x5b kanał 15
9 28 92 0x5c zgłoszenie operatora (OPRQ)
29 93 0x5d zgłoszenie przerwania z drugiego procesora (przerwanie o niższym priorytecie)
30 94 0x5e przerwanie programowe
31 95 0x5f przerwanie programowe