next up previous contents index
Weiter: Möglichkeiten der Realisierung Hinauf: Beispiel eines interrupt-gesteuerten Zurück: Beschreibung der Hardware-Bausteine

Spezifikation der vorgegebenen Schnittstellen

 

In gewohnter Weise wollen wir die Spezifikation der - aus unserer Aufgabenstellung sich als vordefiniert ergeben habenden - Systemteile in Form von Ada-Paketen wiedergeben. Als erstes ist also der Temperatur-Sensor zu behandeln.


with System, System.Storage_Elements;

package Temperatur_Sensor is

Interrupt_Adr: System.address :=
System.Storage_Elements.To_Address(16#4711#);
-Adresse,wodieInterrupt-Service-Routinezustehenhat

Data_Adr: System.address :=
System.Storage_Elements.To_Address(16#0815#);
-Adresse,wosichdiebereitgestelltenDaten(Temperatur)befinden

type Temperatur is new integer range -50 .. 150;

Temp: Temperatur;
for Temp use at Data_Adr;

type IO_Port is
record
ready: boolean;
interrupt_enabled: boolean;
end record;

Bits: constant := 1;
Bytes: constant := 8Bits;
word: constant := 1Bytes;

for IO_Port use
record at mod 2;
ready at 0word range 2..2;
interrupt_enabled at 0word range 5..5;
end record;

Temp_Sens_Port: IO_Port;
-NachdemdieDatengelesenwurden,mussdasBitreadyauf'true'
-gesetztwerden.Eswirddannauf'false'zurueckgesetzt,bevor
-neueDatenbereitgestelltwerden.
-DasBitinterrupt_enabledmussgesetztwerden,damit
-ueberhaupteinInterruptausgeloestwird.
for Temp_Sens_Port use at System.Storage_Elements.To_Address(16#17A4#);

end Temperatur_Sensor;

Im Paket System sind unter anderem der Typ address und im Unterpaket Storage_Elements eine Funktion, die integer-Zahlen in Adressen umwandelt, definiert. Dieses Paket ist aber compiler-abhängig und daher möglicherweise von Computer zu Computer verschieden.

Die einfache Spezifikation des Schalters sieht folgendermaßen aus:


with System.Storage_Elements;

package Schalter is

type IO_Port is
record
heizen: boolean;
end record;

Bits: constant := 1;
Bytes: constant := 8Bits;
word: constant := 1Bytes;

for IO_Port use
record at mod 2;
heizen at 0word range 1..1;
end record;

Heizungs_Port: IO_Port;
-WenndasBitheizenauftruegesetztist,heiztdieHeizspirale,
-wennnicht,dannheiztsienicht.
for Heizungs_Port use at System.Storage_Elements.To_Address(16#AAFF#);

end Schalter;



Johann Blieberger
Wed Feb 11 09:58:52 MET 1998