Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System...

120
Embedded Systems Engineering 1 V0.93 WS 2011/2012 Prof. Dr. Christian Siemers TU Clausthal, Institut für Informatik

Transcript of Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System...

Page 1: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

Embedded Systems Engineering 1

V0.93

WS 2011/2012

Prof. Dr. Christian Siemers

TU Clausthal, Institut für Informatik

Page 2: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.
Page 3: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

Inhaltsverzeichnis

1 Einführung in die Thematik ................................................................................. 1 1.1 Allgemeines ................................................................................................. 1 1.2 Aufbau der Vorlesung ................................................................................. 2

2 Kurzeinführung zu Mikrocontrollern und zum 8051 ........................................... 3 2.1 Von-Neumann-Rechnermodell .................................................................... 3

2.1.1 Grundkonzept ................................................................................... 3 2.2 Sequenzielle Befehlsausführung und Befehlstypen ..................................... 5

2.2.1 Sequenzielle Befehlsausführung ....................................................... 5 2.2.2 Befehlsgruppen ................................................................................. 7

2.3 Datentypen und Datenrepräsentation ......................................................... 10 2.3.1 Polyadische Zahlensysteme ............................................................ 10 2.3.2 Umrechnung zwischen Zahlensystemen ......................................... 10 2.3.3 Zahlen- und Informationsdarstellung im Rechner .......................... 11

2.4 Ein kurzes Beispiel .................................................................................... 15

3 Speichertechnologien und –bausteine................................................................ 19 3.1 Dynamische RAMs (DRAM) .................................................................... 19 3.2 Statische RAMs (SRAM) .......................................................................... 26 3.3 Nur-Lesespeicher (PROM, EPROM, EEPROM) ...................................... 30 3.4 Nichtflüchtige RAMs (Non-Volatile RAMs) ............................................ 34

3.4.1 NVRAMs ........................................................................................ 34 3.4.2 Ferroelektrische RAMs (FRAM, FeRAM) ..................................... 37 3.4.3 Magnetoresistive RAMs (MRAM) ................................................. 37

3.5 Zusammenfassung der verschiedenen Speichertechnologien .................... 39

4 Der Mikroprozessor 8051 .................................................................................. 40 4.1 Allgemeines zu Bussystemen bei Mikroprozessoren ................................ 40 4.2 Synchrone, semi-synchrone und asynchrone Systembusse ....................... 43

4.2.1 Der synchrone Systembus ............................................................... 43 4.2.2 Der semi-synchrone Systembus ...................................................... 44 4.2.3 Der asynchrone Systembus ............................................................. 46

4.3 Der Mikroprozessor 8051/8031 ................................................................. 47 4.3.1 Die Modi und das Pinout des 8031/51 ............................................ 47 4.3.2 Der Prozessorbus des 8031/51 im Sekundärmode .......................... 50

4.4 Der Ablauf einzelner Makrobefehle am Prozessor .................................... 52 4.4.1 Der Sprungbefehl LJMP (Long Jump auf 16 Bit Adresse) ............. 52 4.4.2 Der Transferbefehl MOV A, #data (Immediate Adressierung) ...... 53 4.4.3 Der Transferbefehl MOVX A, @Ri (Inhalt der indirekten, auf

externes RAM bezogenen Adressierung aus Ri in Akkumulator) .. 53

Page 4: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

2 Embedded Systems Engineering 1

4.4.4 Der Transferbefehl MOVX @Ri, A (Inhalt des Akkumulators in indirekte Adresse aus Ri innerhalb des externen RAMs) ............... 54

4.5 Aufbau eines Rechnersystems auf Basis 8051 .......................................... 55

5 Einführung in die Assemblersyntax der 8051-CPU .......................................... 61 5.1 Das Programmiermodell der 8051-CPU .................................................... 61 5.2 Speichermodell im 8031/51 ....................................................................... 65 5.3 Das Stack-Konzept .................................................................................... 65 5.4 Die Adressierungsmodi ............................................................................. 67 5.5 Die Assemblernotation für die 8051-CPU ................................................. 69

5.5.1 Transferbefehle ............................................................................... 69 5.5.2 Bitverarbeitungsbefehle .................................................................. 70 5.5.3 Befehle zur logischen Verknüpfung ............................................... 71 5.5.4 Arithmetische Verarbeitungsbefehle .............................................. 72 5.5.5 Sprungbefehle ................................................................................. 73 5.5.6 Unterprogrammbefehle ................................................................... 74 5.5.7 Sonstige Befehle ............................................................................. 74

6 Serielle und parallele Interface-ICs ................................................................... 76 6.1 Einleitung und Unterteilung ...................................................................... 76 6.2 Parallele Interfacebausteine ....................................................................... 76

6.2.1 Der Parallel-Input-Output-Baustein 8255 ....................................... 77 6.2.2 Allgemeine parallele Interfacebausteine ......................................... 82

6.3 Serielle I/O-Systeme: RS232 und RS422 .................................................. 83 6.3.1 Die Geschichte der RS232-Schnittstelle ......................................... 83 6.3.2 Die RS232-Schnittstelle im Detail .................................................. 84 6.3.3 Elektrische Signalpegel .................................................................. 87 6.3.4 Synchronisation und Übertragungsgeschwindigkeit ....................... 88 6.3.5 Ein IC für den Betrieb einer RS232: Der USART 8251 (Intel, NEC)90

6.4 Der Timer-Baustein 8253/8254 ................................................................. 94 6.5 Interrupt-Request-Controller ................................................................... 100

6.5.1 Der Ablauf eines IRQs im 80x86-System .................................... 101 6.5.2 Der programmierbare Interrupt-Request-Controller 8259A ......... 101 6.5.3 Das Hardware-Interface zwischen 80x86 und 8259A .................. 108

6.6 Direct Memory Access Controller ........................................................... 109

Literatur 112

Sachwortverzeichnis ................................................................................................. 1

Page 5: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

1 Einführung in die Thematik

1.1 Allgemeines

Eingebettete Systeme, engl. Embedded Systems, sind in der Praxis außerordentlich häufig anzutreffen. Praktisch jedes elektronische System wird durch mindestens einen Mikrocontroller gesteuert, geregelt oder unterstützt, so dass die Anzahl der Mikrocontroller in eingebetteten Systemen diejenige der Mikroprozessoren in Rechnern, engl. so genannten Self-Contained Systems, bei weitem übersteigt.

Doch was sind eingebettete Systeme überhaupt? Unter einem eingebetteten System versteht man ein elektronisches System, das aus Hardware und Software besteht und in komplexe technische Umgebungen eingebettet sind [1]. Diese Umgebungen sind meist maschinelle Systeme, in denen das eingebettete System mit Interaktion durch einen Benutzer arbeitet oder auch vollautomatisch (autonom) agiert. Die eingebetteten Systeme übernehmen komplexe Steuerungs-, Regelungs- und Daten-verarbeitungsaufgaben für bzw. in diesen technischen Systemen.

Die nächste Frage ist den Mikroprozessoren und Mikrocontrollern gewidmet. Unter einem Prozessor versteht man die Central Processing Unit (CPU) aus dem Von-Neumann-Modell, ein Mikroprozessor ist die monolithisch integrierte Varian-te, also diejenige, bei dem die komplette CPU auf einem Chip integriert ist.

Ein Mikrocontroller besteht aus mindestens einem Mikroprozessor, auch als Core bezeichnet, und einem weiteren Teil des Von-Neumann-Modells, also Speicher oder Input/Output (Peripherie). Mikrocontroller führen daher die Integration auf einem Chip noch weiter als Mikroprozessoren.

Das wesentliche Merkmal von eingebetteten Systemen ist die enge Verknüpfung des Mikrocontrollers/Mikroprozessors mit der umgebenden Maschine. Hieraus resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B. Echtzeitverhalten, besondere Zuverläs-sigkeit etc.. Dies stellt besondere Anforderungen an den Entwicklungsprozess, sowohl Hard- als auch Software betreffend.

Im Rahmen des gesamten Curriculums der Informatik an der TU Clausthal wird für die Entwicklung eingebetteter Systeme eine zweiteilige Veranstaltung angeboten. Diese Vorlesung mit dem Titel Embedded Systems Engineering 1 ist als Einfüh-rung konzipiert und behandelt exemplarisch das Design solcher Systeme am Bei-spiel von 8-Bit-Mikrocontrollern. Die zweite Vorlesung wird im Master angeboten und beinhaltet die systematische Entwicklung für eingebettete Systeme einschließ-lich Test, Verifikation und Optimierungen.

Page 6: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

2 Embedded Systems Engineering 1

1.2 Aufbau der Vorlesung

Die zahlenmäßig am häufigsten eingesetzten Mikrocontroller sind 8-Bit-Mikrocon-troller. Die Preise hierfür bewegen sich etwa im Segment von 1 bis 10 €, sie sind damit häufig billiger als mechanische Komponenten wie Kabel, Steckverbinder usw. Komplexere Geräte wie Mobiltelefone enthalten durchaus mehrere Mikro-controller, auch in deren Spezialform als Digitaler Signalprozessor (DSP).

In der Klasse der 8-Bit-Mikrocontroller – mit der Angabe 8 bit wird die intrin-sische Datenverarbeitungsbreite angegeben, also diejenige Breite, die in einem Durchgang berechnet werden kann – zählen die Derivate der Intel-8051-Baureihe zu den häufigsten. Dies ist durchaus verwunderlich, denn diese Familie wurde erstmals 1978 am Markt eingeführt.

Diese Vorlesung befasst sich nun mit Hard- und Software, exemplarisch an einem Mitglied der 8051-Familie, um zu zeigen, wie mithilfe dieser Mikrocontroller Ap-plikationen gebaut werden können. Während sich in der Vorlesung die Themen Hardwarearchitektur, Hardware/Software-Interface und Software die Waage hal-ten, liegt der Schwerpunkt im Praktikum auf der Erstellung von Applikationen, also der Entwicklung hardwarenaher Software.

Um diesem Praktikum eine Basis zu geben, wird im ersten Teil der Vorlesung ein Abschnitt eingefügt, der sich mit dem Von-Neumann-Modell, der Ausführung von Befehlen, Zahlendarstellungen, Übersetzungsvorgang usw. befasst. Dies ist in Kapitel 2 dieses Skripts konzentriert.

Kapitel 3 befasst sich mit den Speichertechnologien und den zugehörigen Baustei-nen. Diese Speicherbausteine sollen binärwertige digitale Werte speichern können, und dies bei diversen Randbedingungen wie Preis, Verlustleistung, Datenerhalt, Zuverlässigkeit usw.. Wichtigste Vertreter sind dynamische und statische RAMs sowie die EPROMs in diversen Ausführungsformen.

Kapitel 4 ist der Hardware der Mikrocontrollerfamilie 8051 gewidmet, speziell dem Mikroprozessorkern (auch als Core bezeichnet) und beginnt mit den Bus-systemen. Weitere Themen sind das Speichermodell und dessen praktische Aus-wirkung auf die Gestaltung eines kompletten Mikrorechners und der Ablauf einiger Maschinenbefehle.

Kapitel 5 gibt eine (kurzgehaltene) Einführung in die Assemblerprogrammierung der 8051-CPU und behandelt damit das so genannte Hardware-Software-Interface (HSI). Hinzu gehören auch Themen wie Stack und Interrupt Request Behandlung.

Kapitel 6 schließlich behandelt die Schnittstellen zur parallelen und seriellen Schnittstelle, zum Timer, Interrupt-Request-Controller und zu weiteren Kompo-nenten, die zur Peripherie gezählt werden.

Page 7: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

2 Kurzeinführung zu Mikrocontrollern und zum 8051

2.1 Von-Neumann-Rechnermodell

2.1.1 Grundkonzept Die kennzeichnenden Merkmale eines Rechners nach dem Von-Neumann-Prinzip sind:

1. Ein (zentralgesteuerter) Rechner ist aus den drei Grundbestandteilen

• Zentraleinheit (Central Processing Unit, CPU)

• Speicher (Memory)

• Ein-/Ausgabeeinheit (Input/Output Unit)

aufgebaut. Hinzu kommen noch Verbindungen zwischen diesen Teileinheiten, die als Busse bezeichnet werden. Die CPU übernimmt innerhalb dieser Dreitei-lung die Ausführung von Befehlen und enthält die dafür notwendige Ablauf-steuerung. Im Speicher werden sowohl die Daten als auch die Programme in Form von Bitfolgen abgelegt. Die Ein-/Ausgabeeinheit stellt die Verbindung zur Außenwelt in Form des Austausches von Programmen und Daten her.

2. Die Struktur des Rechners ist unabhängig von dem zu bearbeitenden speziellen Problem. Die Anpassung an die Aufgabenstellung erfolgt durch Speicherung eines eigenständigen Programms für jedes neue Problem im Speicher des Rech-ners. Dieses Programm enthält die notwendigen Informationen für die Steu-erung des Rechners. Dieses Grundkonzept der Anpassung hat zu der Bezeich-nung ‘programmgesteuerter Universalrechner’ (engl. ‘stored-program machine’) geführt.

3. Der Speicher besteht aus Plätzen fester Wortlänge, die einzeln mit Hilfe einer festen Adresse angesprochen werden können. Innerhalb des Speichers befinden sich sowohl Programmteile als auch Daten, zwischen denen – als Speicherinhalt – grundsätzlich nicht unterschieden wird.

Dem Speicher kommt im Von-Neumann-Modell eine zentrale Bedeutung zu, da sowohl Daten als auch Programminformationen darin gehalten werden. Wie in Bild 2.2 dargestellt, ist die Hardware dieses Rechners eigentlich fixiert. Die Auswahl der momentanen Aktion erfolgt durch den Kontrollfluss (die Instruktion), und diese Aktion wirkt auf den Datenfluss.

Page 8: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Embedded Systems Engineering 1

Zentraleinheit(Central Processing Unit, CPU)

Steuerwerk(Control Unit, CU)

Rechenwerk(Arithmetical

Logical Unit, ALU)

Verbindungssystem(Bussystem)

Speicher(Memory)

Ein-/Ausgabe(Input/Output)

Bild 2.1: Prinzipieller Aufbau eines Von-Neumann-Rechners

Aus den genannten Grundprinzipien können die wesentlichen Charakteristika des Von-Neumann-Rechners abgeleitet werden:

1. Zu jedem Zeitpunkt führt die CPU exakt einen Befehls aus. Die Steuerung der Bearbeitung liegt im Steuerwerk (Control Unit, CU), das in der Lage sein muss, alle notwendigen Schritte zur vollständigen Behandlung einleiten zu können. Innerhalb eines Befehls kann höchstens ein Datenwert bearbeitet, d.h. neu berechnet werden. Dieses Prinzip wird Single Instruction - Single Data (SISD) genannt.

Hardware:Fixiert

Algorithmus:Variabel

Eingangsdaten Ergebnis

Kon

trol

lflus

s

Bild 2.2: Ablaufprinzip des Von-Neumann-Rechners

Page 9: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

2 Kurzeinführung zu Mikrocontrollern und zum 8051 5

2. Alle Inhalte von Speicherzellen, im folgenden Speicherwörter genannt, sind prinzipiell als Daten oder Befehle interpretierbar. Die Daten wiederum können als ‘eigentliche’ Daten oder als Referenzen auf andere Speicherzellen (Adres-sen) genutzt werden. Die jeweilige Verwendung eines Speicherinhalts richtet sich allein nach dem momentanen Kontext des laufenden Programms.

3. Als Konsequenz aus der vorgenannten Eigenschaft können Daten und Befehle nicht gegen ungerechtfertigten Zugriff geschützt werden, da sie gemeinsam ohne Unterscheidungsmöglichkeit im Speicher untergebracht sind.

2.2 Sequenzielle Befehlsausführung und Befehlstypen

2.2.1 Sequenzielle Befehlsausführung Ein Von-Neumann-Rechner zeigt unter den beschriebenen Voraussetzungen einen typischen Verlauf einer Befehlsbearbeitung. Exemplarisch ist in Bild 2.3 der Ab-lauf, insbesondere der Signale auf dem Bussystem, für einen Transferbefehl zwischen Register und Speicher (”move“) dargestellt. Die Befehlsnotation in der Assemblersprache könnte etwa

mov <Speicherstelle>, Akkumulator

lauten. Die korrekte Interpretation dieses Befehls lautet: Kopiere den Inhalt des Akkumulators in die angegebene Speicherstelle.

Im Rahmen dieser Befehlsbearbeitung können zwei grobe Phasen identifiziert werden. In der Phase 1 lädt die CPU, gesteuert durch Abläufe in dem Steuerwerk CU, das Befehlswort aus dem Speicher einschließlich aller benötigten Zusatzinfor-mationen wie Operanden, die in diesem Fall aus der (Daten-)Speicheradresse bestehen. Die Codeadresse, an der dieses Befehlswort steht, wird im Programm-zähler (Program Counter, PC, auch Instruction Pointer, IP) festgelegt. Diese Phase wird auch mit Fetch bezeichnet.

Diese Phase zeigt sich am Bussystem, indem zwei lesende Zugriffe – je einer für das Befehlswort und den Operanden – zeitlich sequentiell ablaufen. Das Steuer-werk speichert die Inhalte in dafür vorgesehene Befehlsregister und interpretiert sie für die weiteren Aktionen.

In der zweiten Befehlsphase wird nun der Inhalt des Registers, hier mit Akkumu-lator bezeichnet, in die adressierte Speicherzelle kopiert. Das oder die Register gehören zur CPU, können aber wie Datenspeicher beliebige Datenwerte (zwischen-)speichern.

Für diesen Vorgang wird der Inhalt aus dem Registerblock des Rechenwerks auf den Datenbus kopiert, während der Adressbus die Information über die gewünschte

Page 10: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Embedded Systems Engineering 1

Speicherzelle trägt. Adress- und Datenbus sind Teilsysteme der Verbindungsein-richtung im Von-Neumann-Rechner.

Steuerwerk

Program Counter

Rechenwerk

RegisterBlock

ALU

Ablaufsteuerung

Befehlsregister

Opcode Adreßfeld

Adreßbus

CPU

1

2

DatenbusSteuerbus

2

1

StatusRegister

Speicher

Input/Output

Bild 2.3: Befehlsablauf im Von-Neumann-Rechner

Das hier exemplarisch gezeigte Verfahren zweier Phasen in der Befehlsbearbeitung ist die technische Lösung für das grundsätzliche Problem des Von-Neumann-Rech-ners, nur eine Verbindungseinrichtung zu zwei verschiedenen Speicherinhalten –

Page 11: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

2 Kurzeinführung zu Mikrocontrollern und zum 8051 7

Programm und Daten – zu besitzen. Im Allgemeinen gilt hier folgendes Konzept des zeitlichen Multiplex des Bussystems:

1. In der sogenannten Fetch- und Interpretationsphase wird aufgrund der durch den Befehlszähler angezeigten Adresse der Inhalt einer Speicherzelle geladen und als Befehl interpretiert. Zu dieser Phase zählt im Allgemeinen auch das Laden von Operanden, zumeist von Adressen oder unmittelbaren Daten. Dieser Vorgang wird durch die Interpretation des Befehls gesteuert.

2. In der darauffolgenden Ausführungsphase wird der Befehl nunmehr vollständig interpretiert und ausgeführt. Die Ausführung kann verschiedene Teile der CPU und des Bussystems sowie der angeschlossenen Einheiten in Anspruch nehmen, dies wird durch das Steuerwerk entsprechend gesteuert. Gemeinsam ist diesen Vorgängen, dass alle Speicherzelleninhalte, auch aus dem Ein-/Ausgabesystem, als Daten interpretiert werden.

Dieser zweistufige Ablauf muss für einen Befehl streng sequentiell ablaufen, da eine Abhängigkeit zwischen den verschiedenen Phasen existiert. Spätere Variatio-nen der Von-Neumann-CPU, z.B. die RISC-Architekturen, beinhalten ein Phasen-pipelining, das eine scheinbare Parallelität der Aktionen zueinander bewirkt. Dies stellt keinesfalls einen Widerspruch zu dem bisher Gesagten dar, denn die Parallelität im Phasenpipelining bezieht sich auf verschiedene Befehle, während die Bearbeitung eines Befehls weiterhin streng sequentiell bleibt.

Der Zeitmultiplex der Busnutzung ist notwendig geworden, da – wie aus dem Beispiel bereits ersichtlich wurde – das Bussystem für den Zugriff auf mehrere Arten von Speicherzelleninhalten genutzt wird. Dies wiederum hat seine Ursache darin, dass der gleiche Speicher fast immer im Mittelpunkt der Operationen steht, unabhängig davon, ob es Programm- oder Dateninhalte sind, auf die zugegriffen werden soll. Die CPU-Speicherkommunikation wird daher die Leistungsfähigkeit des Gesamtsystems entscheidend beeinflussen, was auch als Von-Neumann-Flaschenhals (von Neuman bottleneck) bezeichnet wird.

Das von Neumann-Rechnermodell kann als optimal im Sinn von minimal bezeichnet werden. Die in- und externen Ressourcen, die hierbei zur Anwendung kommen, sind nicht weiter minimierbar, ohne eine sehr wesentliche Einschränkung der Funktionalität bis hin zur Sinnlosigkeit des Einsatzes hinzunehmen.

2.2.2 Befehlsgruppen Die im vorletzten Abschnitt bereits verkündete Universalität des Von-Neumann-Rechners (und auch des Harvard-Rechners, dessen Unterschied in der Trennung von Code- und Datenbereich liegt) kann natürlich nur gelten, wenn entsprechende Instruktionen existieren, um alle Algorithmen auszuführen. Es lässt sich nun nachweisen, dass ein einziger Befehl

SUBBEQ X, Y, Z

Page 12: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

8 Embedded Systems Engineering 1

(subtract and branch if equal) für diesen Zweck genügt. Dieser Befehl wird so ausgeführt, dass X = X-Y zugewiesen und an die Programmstelle Z gesprungen wird, wenn das Ergebnis 0 ist.

Als einzige arithmetisch/logische Operation ist also die Subtraktion erforderlich, daneben muss es die Möglichkeit geben, den Programmfluss zu ändern (so genann-te Sprünge). Beide Aktionen sind in obigem, nicht praxisrelevanten Beispiel ver-einigt, ein solcher Befehl würde als komplex bezeichnet werden. Andere notwendige Operationen wie die Wertzuweisung an eine Variable können auf diese Basisoperationen zurückgeführt werden.

In der Praxis wird ein Mikroprozessor bzw. Mikrocontroller mit mehr Befehlen versehen, weil dies zu kürzeren, schnelleren und auch verständlicheren Program-men führt. Folgende Befehlsgruppen und weitere Details sind in Mikroprozessoren zu finden:

• Interne Rechen- und Zwischenregister. Alle Berechnung können zwar auf Spei-cherinhalten durchgeführt werden, dies ist aber sehr aufwendig (durch viele Buszyklen). CPU-interne Register mindern den Aufwand stark. Das Regis-termodell für die 8051-CPU ist in Bild 2.4 dargestellt.

Akkumulator A

Hilfs-Akkum. BR0

R1

Akkumulatorregister 8-Bit-Register

R6

R7

R4

R5

R2

R3PSW

SP

Status: Program Status Word

Stack Pointer (8-Bit)

DPTR

Data Pointer (16-Bit)

PC

Program Counter (16 Bit)

Bild 2.4 Registermodell 8051

• Befehlsgruppe der Transferbefehle: Diese Befehle kopieren Daten zwischen Registern, zwischen Register und Speicher und ggf. sogar zwischen verschie-denen Speicherstellen. Beispiele im 8051: mov A, $12;

Kopiere den Inhalt der Speicherzelle 12 hexadezima l (18 de-zimal) in den Akkumulator

mov R1, A;

Page 13: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

2 Kurzeinführung zu Mikrocontrollern und zum 8051 9

Kopiere den Inhalt des Akkumulator in das Register R1

movx 127, A;

Kopiere den Inhalt des Akkumulators in die Speiche rstelle 127 dezimal (oder $7F hexadezimal) im externen Spei cher (X).

• Befehlsgruppe der arithmetischen und logischen Befehle: Hier sind die arithme-tischen (Addition, Subtraktion, meist Multiplikation, seltener Division) und die logischen (bitweises AND, OR, XOR) sowie die Shift- und Rotations-Ope-rationen integriert. Beispiele hierfür sind: add A, $14;

Addiere ohne Carry-Bit den Inhalt der Speicherstel le $14 (hexadezimal) zum Akkumulator und schreibe das Erge bnis in den Akkumulator zurück. Das Carry-Bit wird anschlie ßend gesetzt/ gelöscht

subb A, $14;

Subtrahiere mit Berücksichtigung des Carry (”Borro w Carry“) den Inhalt der Speicherzelle $14 vom Akkumulator un d schreibe das Ergebnis in den Akkumulator zurück

rl A;

Rotiere den Inhalt des Akkumulators um eine Stelle nach links und schreibe das Ergebnis in den Akkumulator zurück

rrc A;

Rotiere den Inhalt des Akkumulators einschließlich des Carry-Bit (als 8. Bit des Akkumulators) um eine Ste lle nach rechts und schreibe das Ergebnis in den Akkumulator und das Carry-Bit zurück.

• Befehlsgruppe der Kontrollflussbefehle: Hier sind alle bedingten und unbeding-ten Sprungbefehle zusammengefasst, deren Aktion die Beeinflussung des Program Counters beinhaltet. Beispiele: ljmp Label1;

Dies ist ein Long Jump zu einer Marke im Programm (Label1). Ein Long Jump bedeutet, dass jede Stelle im 64 kByt e-Adressraum (16 bit Adresse) erreichbar ist. Kürzere Sprünge werden mit ajmp (absolute jump) und sjmp (short jum p) co-diert.

Jnz Label2;

Springe, wenn der Akkumulator nicht 0 ist, zu Labe l2 (jump if not zero)

cjne R1, #data, Label3;

Vergleich den Inhalt von R1 mit dem Datenwert data und springe bei Ungleichheit zu Label3

lcall Routine1;

Long Call, springe zur Routine 1 mit Speicherung d er Rück-sprungadresse auf dem Stack

Page 14: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

10 Embedded Systems Engineering 1

ret;

Return, springe an die gespeicherte Rücksprungadre sse zu-rück und bearbeite das Programm dort weiter.

Wie deutlich zu sehen ist, sind hier teilweise komplexe Befehle zu finden, bei denen nicht nur ein Registerinhalt mit einem Speicherinhalt verknüpft wird, sondern das Ergebnis auch noch von den Flags (hier: Carry, Übertrag) abhängig ist. Eine ausführlichere Darstellung des Befehlssatzes der 8051-CPU ist in Kapitel 5 dieses Skripts zu finden.

2.3 Datentypen und Datenrepräsentation

2.3.1 Polyadische Zahlensysteme Zunächst jedoch einige grundsätzliche Anmerkungen zum verwendeten Zahen-system. Das Dezimalsystem gehört zur allgemeinen Klasse der polyadischen Zah-lensysteme, in denen eine beliebige Zahl n in der Form

2},0{,0

≥∈⋅=∑=

BNBbmitBbn ii

K

ii U (2.1)

darstellbar ist. B heißt dabei Basis des Zahlensystems, wobei B = 10 als Dezi-malsystem, B = 8 als Oktalsystem, B = 2 als Dualsystem und B = 16 als Hexa-dezimal- oder (richtiger) Sedezimalsystem bezeichnet wird.

Die Koeffizienten bi können nur zwischen 0 und B-1 variieren, dies ist die jeweils gültige Menge der Ziffern pro Zahlensystem. Im Fall des Sedezimalsystems kön-nen zwar 10 bis 15 als gültige Ziffern angesehen werden, zur Vermeidung von Problemen beim Lesen werden hier jedoch die Ziffern {0,...9, A, B, C, D, E, F} gewählt.

Als allgemein übliche Konventionen bei der Darstellung von Zahlen gelten:

1. das Fortlassen von führenden Nullen

2. keine Kennzeichnung der Basis

Falls das Fortlassen zu Interpretationsproblemen führt, wird die Basis üblicherwei-se eingeklammert und als tiefergestellter Index am Schluß beigefügt. Programmier-sprachen enthalten jeweils eindeutige Darstellungen der Zahlenbasis.

2.3.2 Umrechnung zwischen Zahlensystemen Die Umrechnung von einem Zahlensystem in ein anderes polyadisches System kann grundsätzlich in zwei Schritten erfolgen. Gleichung (2.1) kann zunächst benutzt werden, um den dezimalen Wert der Zahlendarstellung zu berechnen. Um hieraus dann die Zahlendarstellung zur Basis B zu gewinnen, wird die ganzzahlige Division (im Dezimalsystem) benötigt:

Page 15: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

2 Kurzeinführung zu Mikrocontrollern und zum 8051 11

n/B = q0+ r0

q0/B = q1

+ r1

q1/B = q2

+ r2

q2/B = q3

+ r3

...

qK-1/B = 0 + rK

Zahlendarstellung zur Basis B

Bild 2.5 Algorithmus zur Berechnung der Zahlendarstellung

2.3.3 Zahlen- und Informationsdarstellung im Rechne r Während die Darstellung von Daten im Rechner immer in binärer Form erfolgen wird, müssen verschiedene Datentypen unterschieden werden. Die Interpretation der Datendarstellung im Rechner ist hierdurch vom Kontext abhängig.

Zu den grundlegenden (intrinsischen) Datentypen zählen Zeichen, natürliche und ganze Zahlen, Gleitkommazahlen (den rationalen Zahlen entsprechend) und boole-sche Größen. Während die binäre Codierung im Speicher zwischen den einzelnen Datentypen nicht zu unterscheiden ist, werden diese im Hochsprachenprogramm sehr wohl unterschieden. Die Sprache C bietet beispielsweise char, int, unsigned int und float (neben anderen) als grundlegende Datentypen an.

2.3.3.1 Zeichen

Die Zeichen werden zumeist verwendet, um Texte darzustellen. Ein Text entspricht demzufolge aus einer Folge von Zeichen eines Alphabets.

Die (nahezu) einfachste Definition eines zur Textdarstellung geeigneten Alphabets ist in Tabelle 2.1 dargestellt. Der ASCII-Code benötigt 7 Bits, um alle definierten Zeichen zu codieren, das 8. Bit (8 Bits werden üblicherweise zu einem Byte zu-sammengefasst) könnte als Zeichensatzerweiterung oder als Paritätsbit genutzt werden.

Um allen gebräuchlichen Alphabeten gerecht zu werden, wurde der 16-Bit Unicode [2] eingeführt. Zur Zeit sind hier ca. 38000 Zeichen definiert.

Page 16: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

12 Embedded Systems Engineering 1

0x00 NUL DLE SP 0 @ P ‘ p0x01 SOH DC1 ! 1 A Q a q0x02 STX DC2 „ 2 B R b r0x03 ETX DC3 # 3 C S c s0x04 EOT DC4 $ 4 D T d t0x05 ENQ NAK % 5 E U e u0x06 ACK SYN & 6 F V f v0x07 BEL ETB ´ 7 G W g w0x08 BS CAN ( 8 H X h x0x09 HT EM ) 9 I Y i y0x0A LF SUB * : J Z j z0x0B VT ESC + ; K [ k {0x0C FF FS , < L \ l |0x0D CR GS - = M ] m }0x0E SO RS . > N ↑ n ∼0x0F SI US / ? O ← o DEL

High 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70Low

Tabelle 2.1 ASCII-Tabelle zur Interpretation als alphanumerische Werte

NUL NULL valueSOH Start Of HeadingSTX Start of TextETX End of TextEOT End of TransmissionENQ EnquiryACK Acknowledge

BEL BellBS BackspaceHT Horizontal TabulationLF Line FeedVT Vertical TabulationFF Form FeedCR Carriage ReturnSO Shift-Out

SI Shift-In

DLE Data Link EscapeDC Device ControlNAK Negative AcknowledgeSYN Synchronous IdleETB End of Transmission BlockCAN CancelEM End of Medium

SUB Substitute CharacterESC EscapeFS File SeparatorGS Group SeparatorRS Record SeparatorUS Unit SeparatorSP Space

DEL Delete

Tabelle 2.2 ASCII Steuerzeichen

Page 17: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

2 Kurzeinführung zu Mikrocontrollern und zum 8051 13

2.3.3.2 Festkommazahlen Die Verknüpfung eines Stellenwerts mit den Stellen im Binärwort ermöglicht die Darstellung von Festkommazahlen, bei denen die Stellung des Kommas fest definiert ist. Die allgemein gängige Interpretation ist jedoch diejenige, bei denen ausschließlich ganze Zahlen bzw. Integer-Zahlen dargestellt werden. Hierzu wird dem niederwertigsten Bit die Wertigkeit 1 (= 20), den nächstfolgenden 21, 22 usw. zugeordnet, so dass bei k Bits der darstellbare Bereich 0 .. 2k-1 beträgt, für 8 Bit Wortbreite als 0 .. 255. Diese Darstellung wird auch als UINT8, UINT16 bzw. UNIT32 bezeichnet, um unsigned integer mit entsprechender Bitbreite zu kenn-zeichnen.

0 1 0 1 1 1 0 0

27 26 25 24 23 22 21 20

Bitvektor:

Wertigkeit:

0 + 64 + 0 + 16 + 8 + 4 + 0 + 0 = 92Ergebnis:

Bild 2.6 Interpretation des Bitvektors ‘01011100’ als ganze Zahl 92

Während diese Interpretation noch sehr eingängig erscheint, ist die Einführung vorzeichenbehafteter Zahlen auf mehrere Arten denkbar. Die einfachste Variante, das höchstwertige Bit als Vorzeichen zu interpretieren und den Betrag der Integer-zahl durch die verbliebenen Bits zu bestimmen, führt einerseits zu einer doppelten Darstellung der Zahl 0, andererseits zu einer komplexen Arithmetik im Prozessor, die mit Hilfe von Fallunterscheidungen sowie verschiedenen Schaltnetzen für Addition und Subtraktion die Operationen durchführen kann (siehe hierzu [3]).

Für die vorzeichenbehaftete Darstellung und Arithmetik ist es sehr vorteilhaft, eine andere Variante auszuwählen, die mit der Komplementdarstellung von Bitvektoren arbeitet:

Definition 2.1

Sei X = (xk-1, ... x0)2 ∈ Bk eine k-stellige Binärzahl. Dann gilt mit Hilfe der binären Antivalenzoperation ^ (XOR):

1. K1(X) = (xk-1 ^ 1, ... x0 ^ 1)2 heißt Einer-Komplement (One’s Complement) von X.

2. K2(X) = (xk-1 ^ 1, ... x0 ^ 1)2 + 1 heißt Zweier-Komplement (Two’s Complement) von X.

Das Zweier-Komplement einer (positiven) Zahl in Binärdarstellung wird nunmehr als die Darstellung der zugehörigen negativen Zahl gewählt. Um Überschneidun-gen der beiden Bereiche zu vermeiden, werden die positiven Integerzahlen auf den Bereich mit höchstem Bit = 0 beschränkt, wodurch sich automatisch die Darstel-lung für negative Zahlen mit höchstem Bit = 1 ergibt.

Page 18: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

14 Embedded Systems Engineering 1

0 1 0 1 1 1 0 0Bitvektor:

Einer-Komplement:

Zweier-Komplement:

1 0 1 0 0 0 1 1

1 0 1 0 0 1 0 0

(dezimal 92)

(dezimal -92)

Bild 2.7 Einer- und Zweier-Komplement der Zahl 92

Mit der hier gewählten Darstellung für negative Zahlen wird eine eindeutige Darstellung der 0 sowie eine vereinheitlichte Implementierung der Arithmetik im Prozessor erreicht. Die binäre Addition der Darstellungen für 92 und -92 beispiels-weise liefert bis auf den Übertrag den (erwarteten) Wert 0, wie in Bild 2.8 dar-gestellt ist. Hieraus ergibt sich die Schlussfolgerung, dass für vorzeichenbehaftete Arithmetik nach wie vor eine Fallunterscheidung für die Interpretation der Flags durchzuführen ist.

01011100 (92)+ 10100100 (-92)

(1) 00000000 (0 mit Übertragsflag)

Bild 2.8 Vorzeichenbehaftete Addition

2.3.3.3 Darstellung von Gleitkommazahlen Die Interpretation von Binärzahlen als ganze Zahlen lässt sich ohne großen Auf-wand auf rationale Zahlen mit feststehendem Komma erweitern, indem die Lage des Kommas definiert wird. Dies bedeutet, dass das niederwertigste Bit nicht eine Wertigkeit von 20 besitzt, sondern von 2w, wobei w < 0 eine negative ganze Zahl darstellt. Diese Interpretation wird als Festkommaformat bezeichnet.

Der dynamische Bereich der Zahlendarstellung, d.h. das Verhältnis zwischen (Be-trags-) kleinster (ungleich Null) und größter darstellbarer Zahl wird durch die Ein-führung eines Festkommas nicht verändert. Um hier eine Erhöhung zu erreichen, muss innerhalb der Darstellung der Exponent, auf den sich die eigentliche Zahl bezieht, eingetragen werden. Diese Interpretation wird Gleitkommaformat genannt und ist nach IEEE-754 für 32, 64 und 80 Bit genormt.

8-Bit 23-Bit

s e m

Bild 2.9 32-Bit-Gleitkommadarstellung nach IEEE-754

Page 19: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

2 Kurzeinführung zu Mikrocontrollern und zum 8051 15

Das Sign-Bit s gibt hierbei das Vorzeichen der Zahl an (0 = positiv, 1 = negativ). Die Zahl selbst ist in der Mantisse m in einer sogenannten normalisierten Form gespeichert, die als höchstwertiges Bit eine ‘1’ führt. Da dies für alle Zahlen mit Ausnahme der Null möglich ist, wird dieses Bit fortgelassen und als hidden bit automatisch zur Mantisse hinzugezählt, woraus sich die effektive Anzahl von 24 Bit für die Darstellung ergibt.

Der Exponent e wird bezüglich der Basis 2 angegeben. Der zulässige Wertebereich für e ist 1 ≤ e ≤ 254, der tatsächliche Wert wird durch e - 127 berechnet. Diese Darstellung ist für alle Zahlen im zulässigen Bereich mit Ausnahme der Null möglich. Die Null wird durch eine nicht normalisierte Gleitkommazahl angegeben, bei der die Mantisse den Wert Null annimmt. Mit Ausnahme der Null nimmt also die gemäß IEEE-754 gebildete Zahl den Wert

z = (-1)s ⋅ 2e-127 ⋅ (1.0 + 0.m)

an. Dies entspricht dem darstellbaren (absoluten) Bereich von

( ) 12723

1

12623 2212211 ⋅

+≤≤⋅⋅+ ∑=

−−−

k

kz

In der Gleitkommadarstellung sind mit Hilfe der möglichen, aber normalerweise unzulässigen Werte für den Exponenten folgende Ausnahmen der normalen Inter-pretationsregel vorgesehen:

• m ≠ 0, e = 255: Die dargestellte Zahl ist keine gültige Gleitkommazahl (NaN, Not a Number) und wird z.B. zur Darstellung des Divisionsüberlaufes (Division durch 0) gewählt.

• m = 0, e = 255: Überlauf des darstellbaren Zahlenbereichs (Overflow), z = ±∞ (mit Vorzeichenbit s)

• m ≠ 0, e = 0: Darstellung einer nicht normalisierbaren Gleitkommazahl (Underflow).

• m = 0, e = 0: Darstellung der Null.

2.4 Ein kurzes Beispiel

An dieser Stelle sei ein Beispielprogramm und dessen Übersetzung im Detail diskutiert. Listing 2.1 zeigt den Sourcecode, geschrieben in C.

Das Programm selbst hat wenig Gehalt, hier werden drei char-Variablen deklariert, von denen zweien ein konstanter Wert und der dritten die Summe der beiden ersten zugewiesen wird. Zwei wichtige Details sollen an diesem Beispiel gezeigt werden: Ein (beispielhafter) Tool-Fluss und ein Assemblerbeispiel.

Page 20: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

16 Embedded Systems Engineering 1

#include <stdio.h> main() { char a, b, c; a = 5; b = 3; c = a + b; printf( "%d", c ); }

Listing 2.1 Beispielprogramm zur Addition zweier Zahlen, geschrieben in C

Der erste Teil der Übersetzung führt vom C-Code zum Assemblercode mit Zusatzinformationen. In Listing 2.2 ist der Assemblercode gezeigt, der sich aus dem obigen Beispielcode ergibt. Hier sind die Variablen a, b und c noch in symbolischer Form enthalten, ebenso die im Programm benutzte Funktion printf().

; FUNCTION main (BEGIN) ; SOURCE LINE # 3 ; SOURCE LINE # 4 ; SOURCE LINE # 7 0000 750005 R MOV a,#05H ; SOURCE LINE # 8 0003 750003 R MOV b,#03H ; SOURCE LINE # 10 0006 E500 R MOV A,a 0008 2500 R ADD A,b 000A F500 R MOV c,A ; SOURCE LINE # 12 000C 7BFF MOV R3,#0FFH 000E 7A00 R MOV R2,#HIGH ?SC_0 0010 7900 R MOV R1,#LOW ?SC_0 0012 850000 E MOV ?_printf?BYTE+03H,c 0015 120000 E LCALL _printf ; SOURCE LINE # 14 0018 22 RET ; FUNCTION main (END)

Listing 2.2 Assemblerübersetzung des Programm aus Listing 2.1 für den 8051-Core (ohne Optimierung, Auszug aus .lst-File)

Das Programm selbst folgt exakt dem C-Sourcecode, weil keine Optimierung zugelassen sind. So werden die Variablen, die in einem späteren Teil der Über-

Page 21: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

2 Kurzeinführung zu Mikrocontrollern und zum 8051 17

setzung auf Speicheradressen abgebildet werden, mit konstanten Werten belegt, dann die Variable a in den Akkumulator A geladen und mit dem Inhalt der Variable b addiert. Das Additionsergebnis im Akkumulator wird zuletzt in die c entsprechende Speicherstelle geschrieben, und dann beginnt die Ausgabe.

Die Ausgabe nutzt die im C-Standard definierte printf()-Funktion und wird mit zwei Parametern aufgerufen: Die Formatierung wird in den Registern R1-R3 und der auszugebende Wert in eine zur Funktion printf() gehörige Speicherstelle.

Der Output dieser Phase in ein .obj-File, in dem die feststehenden Teile des Listfiles in Binärcode übersetzt sind. Der anschließend arbeitende Linker bindet dann die genutzten Funktionen aus einer Bibliothek ein (link) und gibt den Symbolen konkrete Adressen (locate). Das Ergebnis ist dann z.B. ein Hex-File (Listing 2.3), das dann als Input für ein Programm zur Übertragung auf den Mikrocontroller dient.

:03001C0025640058 :10000300750805750903E5082509F50A7BFF7A00DC :09001300791C850A0E12008D22F1 :0300000002001FDC :0C001F00787FE4F6D8FD75812102000313 :10002B00E51A240EF8E6051A22780B300702780E33 :10003B00E475F0011203D602037E2000EB7F2ED273 :10004B00008018EF540F2490D43440D4FF30040BAD :10005B00EF24BFB41A0050032461FFE51B600215A7 :10006B001B051EE51E7002051D30070D780BE47590 :10007B00F0011203D6EF0203C402040C7403D2077F :10008B008003E4C207F51A8B0B8A0C890DE4F51B70 :10009B00F51DF51EE51B60077F2012006680F5F548 :1000AB001CC201C200C202C203C205C206C20812B0 :1000BB000034FF700D3007057F00120077AF1EAEC6 :1000CB001D22B42561C2D5C204120034FF24D0B462 :1000DB000A00501C75F00A20D50DC51BA4251BF575 :1000EB001B7002D20380E0C51CA4251CF51C80D715 :1000FB0024CFB41A00EF5004C2E5D204020270D22E :10010B000180C4D20080BED20280BAD2D580B8D2D0 :10011B000580B27F201200662002077401B51B0018 :10012B0040F112002BFF12006602009FD208D2068C :10013B00809312002BFB12002BFA12002BF94A4B67 :10014B007006793C7A037BFF200233E51B602FAFEF :10015B001CBF00011F7E008E827583001203976007

Listing 2.3 Hex-File (Auszug) für das Programm in Listing 2.1, Zielsystem 8051

Verwendet man anstatt char- nun int-Variablen, so werden diese als Variablen mit 16-bit-Breite interpretiert und der Assemblercode ändert sich. Jetzt werden alle Verknüpfungen mit 16 Bit durchgeführt, einschließlich der Wertzuweisung von Konstanten an die Variablen.

Page 22: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

18 Embedded Systems Engineering 1

; FUNCTION main (BEGIN) ; SOURCE LINE # 3 ; SOURCE LINE # 4 ; SOURCE LINE # 7 0000 750000 R MOV a,#00H 0003 750005 R MOV a+01H,#05H ; SOURCE LINE # 8 0006 750000 R MOV b,#00H 0009 750003 R MOV b+01H,#03H ; SOURCE LINE # 10 000C E500 R MOV A,a+01H 000E 2500 R ADD A,b+01H 0010 F500 R MOV c+01H,A 0012 E500 R MOV A,a 0014 3500 R ADDC A,b 0016 F500 R MOV c,A ; SOURCE LINE # 12 0018 7BFF MOV R3,#0FFH 001A 7A00 R MOV R2,#HIGH ?SC_0 001C 7900 R MOV R1,#LOW ?SC_0 001E 850000 E MOV ?_printf?BYTE+03H,c 0021 850000 E MOV ?_printf?BYTE+04H,c+01H 0024 120000 E LCALL _printf ; SOURCE LINE # 14 0027 22 RET ; FUNCTION main (END)

Listing 2.4 Assemblerübersetzung des Programm aus Listing 2.1, modifiziert für Integer-Vairable, für den 8051-Core (ohne Optimierung, Auszug aus .lst-File)

Eine Abschlussbemerkung bezüglich des Interfaces zur printf()-Funktion: Die Art, wie die Daten übergeben werden, wechselt von CPU zu CPU, manchmal sogar von Compiler zu Compiler. Das allgemein gültige Interface nutzt hierzu den Stack, allerdings zeigt diese Variante Laufzeitnachteile. Im Fall der Interfaces per Register und Speicher ist dies wesentlich schneller, ggf. ist aber die Routine nicht reentrantfähig.

Page 23: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

3 Speichertechnologien und –bausteine

In jedem Computersystem spielen der Programm- und Datenspeicher eine ent-scheidende Rolle, wobei diese nicht als externe Bausteine ausgeführt sein müssen, sondern durchaus integriert sein können (Mikrocontroller, siehe auch Kapitel 2 und 4).

Der in einem Ein-Chip-Computer zur Verfügung stehende Speicherplatz wird indes immer beschränkt sein, so dass eine komplette Ablösung der diskreten Speicher-bausteine vollkommen ausgeschlossen werden kann. In diesem Kapitel werden somit die Technologien und Organisationsformen dynamischer RAMs (DRAM), statischer RAMs (SRAM), EPROMs und besonderer Speicherbausteine behandelt.

Diese Speichertechnologien können - mit entsprechenden Vereinfachungen - wie in Bild 3.1 dargestellt aufgefasst werden:

Speicher-ICs

Nur-Lesespeicher(Read-Only Memory)

Masken-ROM

Lese-/Schreibspeicher(Read/Write Memory)

PROM EEPROMEPROM DRAMSRAM

(NVRAM)Pseudo-SRAM

MRAM

PCRAM

FeRAM

Bild 3.1 Speicherbausteinfamilie und –technologien

Als gute Zusammenfassung dieses Gebietes sei [4, Kapitel 11] empfohlen.

3.1 Dynamische RAMs (DRAM)

RAMs, die Abkürzung steht – etwas missverständlich – für "Random Access Read/Write Memory", sollen die Fähigkeit besitzen, einen Speicherinhalt durch einen Schreibvorgang zu definieren und diesen bei jedem Lesevorgang ent-sprechend auszugeben, bis die Speicherung durch einen erneuten Schreibvorgang verändert wurde. Im Gegensatz zu den Programmiervorgängen bei EPROMs und

Page 24: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

20 Embedded Systems Engineering 1

EEPROMs verlaufen Lese- und Schreibvorgängen in vergleichbaren – meist sogar identischen – Zeiten ab.

Diese Eigenschaft besagt noch nichts über das Einschaltverhalten bzw. eventuelle Datenverluste bei Spannungsausfall, gewöhnliche RAMs verlieren jedoch ihr "Ge-dächtnis" und zeigen beim Einschalten der Versorgungsspannung ein undefinierten Zustand.

Die einfachste Methode zur Speicherung eines Binary-Digit-(BIT-)Werts ist die der Ladungsspeicherung in einem Kondensator. Dieses Verfahren wird in größtem Maß dadurch angewandt, dass der Kondensator durch einen MOS-Transistor eben mit ladungsspeichernder Wirkung ersetzt wird. Bild 3.2 zeigt das Prinzip:

CS

Datenleitung

Wortleitung

Bild 3.2 Prinzip der DRAMs

Der Speicherkondensator CS wird durch die Kapazität der Drainzone mit der Sub-stratschicht gebildet. Die dabei erzielten Kapazitäten liegen im Bereich 10-15 Farad (fF, femtoFarad), wobei ein geladener Kondensator den Wert 1, ein ungeladener den Wert 0 repräsentieren soll.

Die Speicherzelle wird mittels der Wortleitung angesprochen, die eine Lese- wie Schreibkopplung zwischen der Datenleitung und dem Kondensator herstellt. Im Lesezyklus "treibt" der Kondensator die Datenleitung bei entsprechender Ladung, im Schreibzyklus wird die vorhandene Ladung überschrieben. Dieses Treiben bedeutet die Erzeugung eines Stromimpulses in einem Leseverstärker, der diesen in eine zuverlässige 0/1-Information umsetzen muss; der Stromimpuls (bei vorhandener Ladung) ist schwach ausgeprägt und wird mit zunehmender Integrationsdichte (1 GBit-Chips!) durch die parasitären Leitungskapazitäten bei geringerwerdenden Kapazitäten der MOS-Strukturen immer schwächer, so dass der Aufwand für den Leseverstärker nicht unerheblich ist.

Konstruktionsbedingt verliert die Speicherzelle ihre Ladung und damit Information auf zwei Arten:

Page 25: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

3 Speichertechnologien und -bausteine 21

• Der Lesevorgang bewirkt zwar ein Treiben der Datenleitung, dies bedeutet jedoch zugleich den Abfluss der Ladung (“zerstörendes Lesen“).

• Leckströme lassen eine Ladung auch ohne Lesevorgang abfließen.

Als Konsequenz daraus muss die Information in den Speicherzellen ständig erneu-ert werden, also durch ein Rückschreiben der Ladung unmittelbar nach dem Auslesen sowie ständig (im Bereich 100 µs - ms) durch einen zyklischen Vorgang, Refresh genannt. Aus diesem dauernden Lese-/Schreibvorgang resultiert auch der Name der ICs, dynamische RAMs.

Der externe Aufbau von DRAMs ist beispielhaft in Bild 3.3 dargestellt. Es sei dabei darauf verwiesen, dass der hier gewählte Typ eines 1-Mbit-Bausteins veral-tert ist, allerdings gilt die hieran dargestellte Struktur nach wie vor.

Din

/RASTFA0A1

/WE

A2

VCCA3

GND

/CASA9A8A7

Dout

A6

A4A5

Bild 3.3 Pinout eines 1M * 1-Bit DRAM 21010

Die Bedeutung der Pins im einzelnen:

A0 bis A9 gestatten das Anlegen einer 10.Bit Adresse, die, da zur Adressierung von 1 MBit 20 Adressleitungen notwendig sind, zweifach angelegt werden muss. Die dafür notwendigen Steuersignale lauten

RAS und CAS,

die Row Address Strobe (Zeilenadressteil, zumeist zuerst übertragen) und Column Address Strobe (Spaltenadressteil) bedeuten und teilweise die Übernahme in Zwischenregister innerhalb der Bausteins bewirken..

/WE signalisiert im aktiv low Zustand einen Schreibvorgang,

Din und Dout sind die Datenleitungen für Schreiben und Lesen einer Speicherzelle im IC.

TF

Page 26: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

22 Embedded Systems Engineering 1

bedeutet Test Function, hat also keine Relevanz im Betrieb und kann offengelassen werden.

VCC und GND stellen die entsprechenden Versorgungspins für den IC dar.

Intern sind DRAMs in einer Matrix-artigen Form für das sogenannte Speicher-zellenfeld aufgebaut, was aus dem Blockschaltbild in Bild 3.4 hervorgeht:

D R A M -

Steue-rung

/R A S

/C A S

/W E

A dreß-

puffe r

Spe icher-

A dresse

Z eilen-

deko -

der

Spe icherzellenfeld

V orladescha ltkreis

L eseverstärkerI/O -G atter

Spaltendekoder

D aten-

pu fferD in D aten-

pufferD out

Bild 3.4 Blockschaltbild DRAM

Das Speicherzellenfeld besteht aus individuell adressierbaren ("Random Access") Speicherzellen meist á 1- oder 4- Bit. Wie bereits erwähnt, wird für einen Baustein mit 1M Speicherzellen (1 048 576) hierfür 20 Adressenleitungen benötigt, die beim DRAM in 2 * 10 mit sukzessiver Übertragung aufgeteilt sind. Der zeitliche Verlauf ist in qualitativer Form in Bild 3.5 dargestellt. Zunächst wird die Zeile (Row) adressiert und mittels des /RAS-Signals in den internen Puffer übernommen. Mit dem anschließenden zweiten Adressteil und dem /CAS-Signal beginnt der Lese- oder Schreibvorgang, je nach Signal /WE.

Die in Bild 3.5 angegebenen Zeiten, tRAS für die gesamte Zugriffszeit auf eine Speicherzelle, tCAS für den Zugriffsabschnitt für die Spalte und tPR für die Vor-ladezeit des Row Address Strobes (Preload), haben eine große Bedeutung für den gesamten Zugriff eines Prozessors auf den Speicherinhalt. Die gesamte Zykluszeit beträgt dabei

tCyc = tRAS + tPR

während die Herstellerangaben für den Zugriff zumeist nur tRAS betreffen. Da als Faustregel tPR etwa 80% von tRAS beträgt, ist die gesamte Zykluszeit eines Lese- oder Schreibvorgangs etwa das 1,8fache der angegebenen Zugriffszeit. Für die

Page 27: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

3 Speichertechnologien und -bausteine 23

angegebene Zugriffszeit von 70 ns bedeutet dies somit eine Zykluszeit von 126 ns; rechnet man hierzu eine Signallaufzeit, bedingt durch Gatterlaufzeiten etc. von ca 20 ns, so ergibt sich eine maximale Frequenz von ca 14 MHz, mit der ein 80x86-Prozessor (!) mit zwei Takten Zugriffszeit ohne Wartezyklen betrieben werden dürfte, bzw. von ca. 20 MHz bei einem Wartezyklus usw.

/RAS

/CAS

A0..9

Dout

tCAS

tRAS

tPR

Bild 3.5 Qualitative zeitliche Verläufe beim DRAM-Zugriff (lesend)

Diese drastische Reduzierung der Prozessorgeschwindigkeit bei Speicherzugriffen ist der entscheidende Grund für beschleunigende Maßnahmen, von denen im Fol-genden drei behandelt werden sollen:

• Page Mode,

• Static Column und

• Interleaving

Unter Page Mode wird eine (lesende oder schreibende) Zugriffsart verstanden, die nicht mehr bei jedem Zugriff die Zeilen- und Spaltenadresse in das DRAM lädt, um dann eine Speicherzelle auszulesen, sondern nur noch die Spaltenadresse, während die Zeilenadresse konstant und damit auch das /RAS-Signal aktiv bleiben. Dieses Prinzip funktioniert natürlich nur unter mehreren Voraussetzungen:

• Die DRAMs müssen diesen Mode unterstützen, d.h., sie müssen den verkürzten Zugriff selbständig erkennen und nicht jedes Mal einen vollständigen Zyklus erwarten.

• Die Steuerung der DRAMs - der Prozessor kann unter diesen Umständen und auch aus anderen Gründen, s.u., nicht direkt auf die DRAMs zugreifen - muss einen Zugriff mit identischer Seitennummer bzw. Zeilenadresse erkennen und den Zugriff entsprechend steuern.

• Das Programm bzw. Programmteile müssen innerhalb der Page ablaufen (Lokalitätsprinzip, auch Daten und Code gemischt!), was aber durch empirische

Page 28: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

24 Embedded Systems Engineering 1

Messungen mit großer Wahrscheinlichkeit bestätigt wurde. Die Seitengröße eines Page-Mode-DRAM mit einer Kapazität von 1 MBit beträgt 1024 Adressen, bei einem 16 MBit-DRAM bereits 16384 Adressen, worin hinrei-chend Platz für die Lokalität (mit eventueller Ausnahme von Datenzugriffen) liegt.

Die Reduzierung der Zugriffszeit für jeden sukzessiven Zugriff beträgt ca. 50%, für die Zykluszeit ca 70%. Diese bedeutet, dass alle nachfolgenden Zugriffe auf die erwähnten 70 ns DRAMs mit einem Prozessortakt von 33 MHz ohne Waitstates ablaufen können. Die Anzahl der Zugriffe mit konstanten Zeilenadresse ist durch interne Vorgänge im DRAM begrenzt, die Grenze liegt bei ca. 20 (Baustein-abhängig), wobei dann ein kompletter Zugriff wiederum notwendig wird.

Im Static-Column-Mode geht man noch einen Schritt weiter, indem auf die /CAS-Steuerung noch verzichtet und lediglich die Spaltenadresse jeweils für den nächsten Zugriff geändert wird. Es obliegt damit der internen DRAM-Steuerung, die Änderungen zu erkennen, Zwischenspeicherung etc. mittels des /CAS-Signals und deren Laufzeiten werden eingespart, wobei der neuerliche Gewinn nicht mehr so drastisch zu bewerten ist.

Interleaving wird eine aus dem Großrechnerbereich übertragene Aufspaltung des Speicherbereichs in mehrere Speicherbänke genannt. Der Vorteil dieses Verfahrens ist darin zu sehen, dass der einzelne Zugriff auf eine Bank mit der normalen Geschwindigkeit ablaufen kann, während der nachfolgende, sofern er eine andere Bank betrifft, bereits beginnen kann. Im PC-Bereich wird häufig das 2-Wege-Interleaving genutzt, was bedeutet, dass sich zwei Speicherbänke im PC befinden und dass man hofft, zwei aufeinanderfolgende Speicherzugriffe (für Daten oder Code) betreffen nacheinander die beiden Speicherbänke.

Bild 3.6 fasst die drei beschriebenen Zugriffsverfahren im Vergleich zum normalen Zugriff zusammen.

In modernen Systemen werden mittlerweile Speichersubsysteme eingesetzt, deren Aufgabe in der Verdeckung der Speicherlatenzzeiten besteht. Der erste Zugriff dauert hierbei immer noch so lang wie bislang, die Folgezugriffe hingegen werden wesentlich beschleunigt bis hin zu Werten um 1 Datum/Takt.

Neben dem Lese- bzw. Schreibzugriff ist noch der bereits erwähnte Refresh, also das ständige Auffrischen der Ladungsinhalte und somit der Informationen, zu behandeln. Dieser Refresh wird zusätzlich – auch mit der Gefahr der Zugriffs-behinderung der CPU – zu den normalen Zugriffe durchgeführt. Die dabei ge-bräuchlichste Art ist der RAS-only-Refresh, bei dem eine Zeilenadresse angelegt und dem DRAM mittels /RAS mitgeteilt wird, der angedeutete Zugriff aber durch Ausbleiben der Spaltenadresse und vor allem des /CAS-Signals aber nicht beendet wird. Die interne Logik des DRAM leitet dann ein Auslesen und Wiederein-schreiben aller Werte der Refreshzeile (also im Beispiel des 1 MBit DRAM von 1024 Zellinhalten) ein, eben den Refresh.

Page 29: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

3 Speichertechnologien und -bausteine 25

/RAS

/CAS

Adr.

Dat. gültig gültiggültig

Zeile Sp. Sp.Sp.Zeile Zeile

Normalmodus

/RAS

/CAS

Adr.

Dat. gültig gültiggültig

Zeile Sp. Sp.

Page-Mode

/RAS

/CAS

Adr.

Dat. gültig gültig

Zeile Spalte

Static-Column-Mode

/RAS0

/CAS0

Adr0

Dat0

2-Wege-Interleaving

Sp. Sp.

gültig

Spalte Spalte Spalte Spalte Spalte

gültig gültig gültig gültig

/RAS1

/CAS1

Adr1

Dat1

gültig gültiggültig

Zeile Sp. Sp.Sp.Zeile Zeile

gültig gültiggültig

Zeile Sp. Sp.Sp.Zeile Zeile

Bild 3.6 Zugriffsverfahren bei DRAM

Page 30: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

26 Embedded Systems Engineering 1

/RAS

/CAS

A0..9

Refresh-Zykl.

Refresh Refresh

Refresh-Zykl.

Bild 3.7 RAS-only-Refresh bei DRAM

Diese Art des Refresh muss für einen kompletten Durchgang 1024mal ausgeführt werden, z.B. innerhalb des Zeitraums von 2 Millisekunden, was in einem 80x86-System bei 10 MHz Prozessortakt und Zugriffen ohne Wait States, also mit 2 Taktzyklen, zu einer Busbelastung von 1% führt.

Trotz der erwähnten, konstruktionsbedingten Nachteile gerade im Bereich der Zugriffszeiten werden dynamische RAMs heute als der Standardspeicher in den meisten Computern eingesetzt. Die Gründe dafür sind:

• Baulich kleine Form durch gemultiplexten Adressbus

• Intern geringer Aufwand durch 1 Transistor pro Speicherzelle, daher größte Kapazität pro Technologieschritt

Die Ausführung in Computern erfolgt zumeist in der Breite des Datenbus' der CPU, ergänzt durch Paritätsbits, die – gemäß der Hamming-Distanz von 2 – bei einfacher Parität die Erkennung von Fehlern, nicht aber deren Korrektur erlauben. SIMM und SIP-Module in PCs sind ein gutes Beispiel für diese Technologie, sie werden in der Organisationsform 1M * 9 bzw. 4M * 9 usw. angeboten, also in 9 Bit Breite.

Bei aktuellen Systemen ist man allerdings von der Fehlererkennung zur Fehlerkor-rektur mittels so genannter Error Correction Codes (ECC) übergegangen, da auf-grund der ständig verkleinerten Strukturen die Wahrscheinlichkeit eines Fehler durch Höhen- oder radioaktive Strahlung stark gestiegen ist. ECCs vermögen die Korrektur von Einzelbitfehlern und oft sogar Mehrbitfehlern sowie die Erkennung von Mehrbitfehlern bis hin zu Bursts.

3.2 Statische RAMs (SRAM)

Während die DRAMs quasi zu den Massenprodukten unter den Schreib-/Lese-speichern gehören, sind SRAMs – technologiebedingt – teurer, in vielen Einsatz-fällen aber unabdingbar. Der interne Aufbau von SRAMs besteht aus Daten-Flipflops, einer speziellen Version von RS-Flipflops mit einer entsprechenden Zugriffslogik.

Page 31: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

3 Speichertechnologien und -bausteine 27

>1

>1 Q

/Q&

&

C

D

Bild 3.8 D-Flipflop mit Zustandssteuerung

+Ub

T0

T1

T2

T3

T5

/A

T4

A

WL

DL2DL1

Q /Q

Bild 3.9 SRAM-Speicherzelle, CMOS-Technologie

Bild 3.8 zeigt den Aufbau eines Daten-FF mittels AND-, NOT- und NOR-Gattern; die tatsächliche Implementierung besteht natürlich aus Transistoren direkt (Bild 3.9), weniger aus der Zusammenschaltung von Gattern:

Das zentrale Flipflop, auch bistabile Kippstufe genannt, befindet sich an der rech-ten Seite und wird von den beiden NOR-Gattern gebildet. Bezeichnet man die Ein-gänge mit S und R, so sind folgende Wertepaare zulässig und führen zu folgenden Ausgängen:

Page 32: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

28 Embedded Systems Engineering 1

S R Q /Q0 0 (Zustand bleibt erhalten)1 0 1 00 1 0 11 1 (Instabil, daher nicht erlaubt)

Tabelle 3.1: Zustände und Übergänge beim RS-Basisflipflop

Im zustandsgesteuerten Daten-FF wird das nicht-erlaubte Eingangswertepaar '11' durch die Beschaltung S = /R unterdrückt. Dies würde für sich genommen aber niemals einen zeitinvarianten Zustand am Ausgang ergeben, Q folgte ohne weitere Zusätze ständig dem Dateneingang D.

Die zeitliche Invarianz ergibt sich durch den Freigabeeingang C, der mittels seines Zustands das Verhalten des Basisflipflops steuert. Solange C den Wert 0 annimmt, kann das RS-FF seine Ausgänge nicht verändern; mit C = 1 wird der Ausgang Q transparent auf den Wert von D geschaltet, /Q (zumeist nicht herausgeführt) ent-sprechend auf /D. Diese Speicherzelle benötigt – solange kein Versorgungsspan-nungsabfall eintritt – keinerlei Refresh, worin einer der wesentlichen Vorteile der SRAMs liegt.

Die Blockstruktur von SRAMs, die zumeist als 4- (Nibble), 8- (Byte), 16- (Word) oder 32-Bit- (Doubleword) SRAMs organisiert sind, ist in Bild 3.10 dargestellt:

Die eingezeichneten Adressen A0 bis A14 werden innerhalb des SRAMs nicht mehr zwischengespeichert, sondern müssen gleichzeitig - und über die Zugriffs-dauer stabil - am IC anliegen. Je nach Zugriffsrichtung werden dann Ausgangs- oder Eingangspuffer aktiv geschaltet, so dass die entsprechende Operation ablaufen kann.

Die nicht-gemultiplexten Adressen bewirken, dass diese auch am Pinout sichtbar sein müssen. Bild 3.11 gibt für die 32 KByte (32k * 8 Bit) Bausteine einen Über-blick zum Pinout, wobei die scheinbar unsortierte Anordnung insbesondere des Adressenteils historische Gründe hat. Ein 32 KByte SRAM wird z.B. im 28poligen DIP-Gehäuse geliefert und hat dann wesentlich größere Ausmaße im Vergleich zu DRAMs.

Page 33: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

3 Speichertechnologien und -bausteine 29

...

A5 - A9,

A11 - A14

X-

Decoder

512 * 512-

Matrix

(1 aus

512)

...

...

Y-Decoder

(8 aus 512)

8 In-/Outputs

A0-A4, A10

I/O-

Puffer

I/O 0

I/O 7

...

/WE

/OE

/CS

Bild 3.10 Blockschaltbild SRAM 62256

A14

A7A6A5A4

A12

A3

A1A2

VCC

A13A8A9

/WE

A11

A10/OE

A0I/O0

I/O2I/O1

GND

/CS

I/O6I/O7

1234567891011121314

2827262524232221201918171615

I/O4I/O5

I/O3

Bild 3.11: Pinout des SRAM 62256

Page 34: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

30 Embedded Systems Engineering 1

Die Bedeutungen in Bild 3.11 der Abkürzungen lauten:

A0 bis A14 stellen der Adressbus dar, wobei zur Adressierung von 32 kByte 15 Adressleitun-gen auch tatsächlich notwendig sind.

I/O0 bis I/O7 häufig auch mit D0 bis D7 bezeichnet, werden mit dem Datenbus verbunden und zeigen ein Input- der Output-Verhalten, je nach Belegung von /WE.

/CS selektiert den Baustein, unabhängig von der Zugriffsrichtung (Chip Select)

/OE signalisiert in Zusammenhang mit /CS einen Lesevorgang (Output Enable)

/WE entspricht in Zusammenhang mit /CS einem Schreibvorgang (Write Enable)

SRAMs benötigen in der tatsächlichen Realisierung pro Speicherzelle mindestens 5, meist 6 Transistoren, DRAMs nur einen. Hinzu kommt, dass die bei SRAM verwendeten CMOS-Transistorpaare je einen PMOS-Transistor besitzen, die – um die gleiche Leitfähigkeit zu haben – eine dreifache Größe gegenüber den NMOS-Varianten besitzen. Dies erklärt, warum SRAMs in der jeweiligen Technologiestu-fe immer um einen Faktor von ca. 4 weniger Speicherkapazität bieten und somit entsprechend teurer sind, zumindest pro Speicherzelle.

Andererseits bieten SRAMs deutliche Vorteile:

• mit Ausnahme der Dekodierung werden keine externen Zusatzschaltkreise wie Refreshgeneratoren benötigt

• Batteriepufferung zur Langzeitspeicherung von Daten ist möglich

• Deutlich schnellere Zugriffs- und Zykluszeiten bis zu 10 ns sind möglich, da kein Adressmultiplexing auftritt und die SRAMs aufgrund ihres internen Aufbaus wesentlich stärkere Speichersignale mit schnelleren Ansprechzeiten der Puffer bieten

Die Vorteile zeigen bereits die Einsatzgebiete von SRAMs:

• Kleine, Einplatinencomputer mit möglichst geringem Hardwareaufwand

• Zusatzspeicher zur batteriegepufferten Speicherung von Konfigurationsdaten

• Schnelle Speicher, z.B. für Cache-Speicher zur Beschleunigung von Programm-abläufen.

3.3 Nur-Lesespeicher (PROM, EPROM, EEPROM)

Ein ROM, ein Read-Only-Memory, hat seinen Namen durch die Eigenschaft in Computersystemen, nur auslesbar, aber nicht beschreibbar zu sein, bekommen.

Page 35: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

3 Speichertechnologien und -bausteine 31

Diese Eigenschaft impliziert natürlich sofort, dass der Speicherinhalt zu jedem Zeitpunkt, also auch bei Verlust der Versorgungsspannung, eindeutig definiert sein muss, ansonsten wären diese Bausteine unbrauchbar.

Reine ROMs, die also bei der Herstellung bereits den späteren Inhalt mitgeteilt bekommen, sind aus einem leicht ersichtlichen Grund sehr selten geworden:

Der Herstellungsprozess, es handelt sich schließlich um einen Anwender-spe-zifischen IC, ist für Einzelexemplare zu teuer, eine gewisse Serie muss sofort aufgelegt werden. Das Programm, das in solche ICs produziert wird, muss aber außerordentlich gut ausgetestet sein und es muss zudem absehbar sein, dass keine Zusätze in absehbarer Zukunft hinzukommen sollen (Fehlerfreiheit und Zukunftssicherheit). Beide Probleme sind aber in Zusammenhang mit Computern schwer lösbare Probleme.

Nicht-löschbare ROMs werden daher heutzutage als Masken-ROMs (mit einer Metallmaske, die erst im letzten Herstellungsgang einer ansonsten für alle ROMs einheitlichen Fertigung) bei Massenproduktion oder als PROMs, die also nach der Herstellung einmal programmierbar sind, gefertigt. Diese PROMs, meist in bipolarer Technologie aufgebaut, haben intern Schmelzsicherungen eingebaut, die einmalig per Überspannung durchgebrannt werden können:

O

I2

I0I1

Bild 3.12 Aufbau ODER-Zelle mit pnp-Multi-Emitter-Transistor

Die in Bild 3.12 dargestellte ODER-Verknüpfung von maximal 3 Eingängen(Ix) bewirkt einen High Pegel am Ausgang O, falls einer der Eingänge auf high liegt und dessen Sicherung intakt ist, ansonsten low. Im ersten Fall wird die Basis-Emitter-Diode leitend und der Transistor schaltet durch, so dass das Potential vor dem Inverter auf high liegt. Dies ist exakt das Prinzip der PROMs, wobei die Sicherung während des Programmiervorgangs durchgebrannt werden.

Sehr häufig im Einsatz sind seit einigen Jahren EPROMs, Flash-EPROMs und EEPROMs (Erasable Programmable Read Only Memory bzw. Electrically Erasable Programmable Read Only Memory). Diese Speicher-ICs beruhen auf einer gemeinsamen Technologie, dem sog. Floating Gate; innerhalb eines MOS-

Page 36: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

32 Embedded Systems Engineering 1

Transistors stellt dies ein zusätzliches Gate dar, das im Prinzip isoliert angebracht ist, auf dem aber während des Programmiervorgangs Ladungen aufgebracht werden können (insbesondere durch den sogenannten Tunneleffekt). Bild 3.13 zeigt eine solche EPROM-Zelle im unprogrammierten Zustand, Bild 3.14 während des Programmiervorgangs:

Drain n+Source n+

Substrate

Select Gate

Floating Gate

Selektierungssignal

Produktzeile

Eingangs-

signal

Bild 3.13 EPROM-Zelle (FAMOS-Transistor) im unprogrammierten Zustand

Diese Transistorzelle wird auch als FAMOS (Floating-Gate Avalanche MOS-Transistor) bezeichnet.

Pinch Off

Depletion

Region

Drain n+Source n+

Substrate

Select Gate

Floating Gate - - -

VD

VPP

Bild 3.14 EPROM-Zelle während des Programmiervorgangs

Während des Programmiervorgangs wird durch eine (bei EPROMs extern ange-legte, bei EEPROMs intern erzeugte) Überspannung VPP (z.B. 12,5 V) ein elek-trisches Feld erzeugt, das in der Lage ist, Elektronen mit einer gewissen Wahr-

Page 37: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

3 Speichertechnologien und -bausteine 33

scheinlichkeit durch die das Floating Gate isolierende Umgebung diffundieren zu lassen und so dort Ladung anzusammeln (Avalanche-Effekt).

Nach der Programmierung bewirkt ein geladenes (also programmiertes) Floating Gate, dass keine Kopplung zwischen Source und Drain via Select Gate stattfindet; dies ist genau die Wirkung einer gelöschten Fuse, die ein Eingangssignal ebenfalls nicht durchlässt und somit am Ausgang – für sich genommen – nur ein '0'-Signal mitliefert.

Das Löschen der Programmierung geschieht auf dreierlei Weisen, hierin unter-scheiden sich die drei Bausteintypen:

• Bei EPROMs wird mittels UV-Licht bei 253,7 nm (Hg-Linie) gelöscht, sie besitzen daher ein Quarzfenster. Das UV-Licht beschleunigt die Elektronen so stark, dass sie das Floating Gate wieder verlassen können (lichtelektrischer Effekt)

• Bei EEPROMs, die intern sehr viel komplizierter und auch größer aufgebaut sind, werden die Ladungen durch 'umgepolte' elektrische Felder aus dem Floating Gate abgezogen, und zwar auf Zellenbasis. Die hierzu variierten Spei-cherzellen werden mit FLOTOX (Floating Gate Tunnel Oxide-Transistor) bezeichnet, zusätzlich kommt pro Zelle ein NMOS-Schalttransistor hinzu.

• Flash-EPROMs sind ähnlich zu EPROMs aufgebaut, gleichwohl werden sie elektrisch gelöscht, allerdings nur blockweise oder sogar im gesamten IC, da die individuellen Schalttransistoren durch die blockweise Beschaltung abgelöst werden.

VPP

A7A6A5A4

A12

A3

A1A2

VCC

A13A8A9

A14

A11

A10/OE

A0O0

O2O1

GND

/CS

O6O7

1234567891011121314

2827262524232221201918171615

O4O5

O3

Bild 3.15 Pinout des EPROM 27256

Page 38: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

34 Embedded Systems Engineering 1

Trotz der Wiederbeschreibbarkeit gelten - im Gegensatz zu SRAMs - die EPROMs und EEPROMs nicht als Schreib-/Lesespeicher, da die Programmierung einen erheblich anderen Betriebsmodus mit wesentlich längeren Zugriffszeiten im Vergleich zum normalen Lesen darstellt.

Die drei erwähnten Festwertspeicher haben gemeinsam, dass sie sowohl program-mierbar als auch löschbar sind. Daneben gibt es sie in identischen Bauformen und Anschlussbelegungen; ein typisches EPROM, 27256, organisiert als 32k * 8 Bit, ist in Bild 3.15 dargestellt:

Man beachte bei der Darstellung der Bausteinform die geringen, aber merklichen Unterschiede zum SRAM 62256!

3.4 Nichtflüchtige RAMs (Non-Volatile RAMs)

Seit langem wird dahingehend geforscht, einen einheitlichen Speicher für die wesentlichen Anwendungen im Lese-/Schreibbetrieb (Anwendungsfall: Daten) wie im Nur-Lesebetrieb (Anwendungsfall: Programm) zu haben. Grundvoraussetzung ist hierfür der langfristige Datenerhalt bei Verlust der Betriebsspannung bzw. Fortfall jeglicher Energieversorgung. Hierfür existieren mehrere Ansätze,alle unter dem Stichwort Non-Volatile RAM zusammen gefasst.

Die Bezeichnung Non-Volatile RAM zeugt bereits, wohin diese Bausteinklasse zielt: Gesucht ist eine RAM-Technologie, die nicht flüchtig ist, aber dennoch mit gleicher Geschwindigkeit beschrieben wie gelesen werden kann. Die einfachste Lösung, ein Batterie-gepuffertes RAM zu nehmen, ist für Einzelfälle sicher zuläs-sig, bei massenhaftem Einsatz jedoch nicht.

3.4.1 NVRAMs Ein möglicher, bereits frühzeitig genutzter Ansatz ist die Kombination von Fest-wertspeicher und Schreib-/Lese-Speicher in einem Baustein. Bei diesen ICs ist jede Speicherzelle doppelt ausgelegt, und zwar einerseits als statische RAM-Zelle, andererseits als EEPROM-Zelle. Während im normalen Betrieb der Baustein wie ein RAM benutzt werden kann, erlaubt es eine Steuerschaltung, den gesamten RAM-Inhalt in das EEPROM zu übertragen und von dort zu laden.

Die NVRAM-Speicherzelle ist damit die komplexeste Speicherzelle aller hier beschriebenen Speicherbausteine (→ Bild 3.16). Zusätzlich zu den 6 Transistoren der statischen RAM-Speicherzelle werden ein Transistor zur Kopplung (T6), einer zum Löschen (T8) und ein spezieller EEPROM-Transistor (FLOTOX, T7) benötigt, wodurch im Herstellungsprozess sowohl die Anzahl als auch die Unterschiedlichkeit der Transistoren berücksichtigt werden müssen:

Page 39: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

3 Speichertechnologien und -bausteine 35

/Q Q

DL1 DL0

/AA

WL

UB

T5 T

1T

3T

2T

4T

0

T6

T7

UTransmit

UProgram

T8

UClear

Bild 3.16 NVRAM-Speicherzelle

Die Funktionsweise dieser sehr interessanten Speicherzelle sei im folgenden genauer erklärt:

Die SRAM-Speicherzelle entspricht der normalen Zelle, also dem Aufbau als bistabiler Kippstufe. Die Transistoren T4 und T5 trennen das eigentliche Flipflop von den Bitleitungen DL0 und DL1.

T7 ist als EEPROM-Transistor ausgeführt. Zum Löschen dieses FLOTOX-Transistors werden die Gate-Eingänge auf die Potentiale UTransmit = 0V, UProgram = 0V und UClear = 21V gezogen. Dadurch sperrt T6, T8 wird leitend, und eventuelle Ladungen können von dem Floating Gate abfließen. T7 ist anschließend selbstleitender Transistor und ergibt beim Lesen eine '1'.

Beim Speichern der Informationen der RAM-Zelle in die EEPROM-Zelle werden die Betriebsspannung der RAM-Zelle (!) sowie die Gate-Potentiale der Transistoren T6 und T7 auf 21 V gesetzt. Dadurch kann die Information am Punkt A der RAM-Zelle als Programmierung in das Floating Gate des Transistors T7 übertragen werden, die Spannungen reichen dazu aus, dass bei einem '0' Potential am Punkt A sich ein leitender Kanal im FLOTOX-Transistor ausbildet (siehe auch 2.3, EPROM-Programmierung) und Ladungen zum Floating Gate fließen, so dass T7 anschließend selbstsperrend ist, während eine '1' in der RAM-Zelle zu keinen ausreichenden Spannungsdifferenzen und somit zu keinem Leitungskanal führt. Das Gate von T8 liegt während dieses Vorgangs auf low, so dass T8 sperrt.

Der Auslesevorgang schließlich überträgt bei normalen Potentialen eine '1' in eine zuvor gelöschte RAM-Zelle, indem das Potential UClear = 5V durch den selbstleitenden Transistor T7 auf A geschaltet wird, während ein selbstsperrender Transistor T7 die '0' belässt.

Page 40: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

36 Embedded Systems Engineering 1

NVRAMs können also als RAM-Baustein mit Speichermatrix und Hintergrund-Speichermatrix angesehen werden:

...

A0 - Ax

DecoderSRAM-Matrix

...

...

8 In-/OutputsI/O-

Puffer

I/O 0

I/O 7

...

/WE

/OE

/CS

...

Decoder ...

EEPROM-Matrix

Matrix-

Steuerung

STORE

RECALL

Programmier-

Spannung

/NE

Bild 3.17 Blockschaltbild NVRAM

Der Steuerpin /NE (NV Enable) steuert dabei, ob ein Schreib- oder Lesevorgang sich auf eine einzelne Zelle im SRAM (/NE = 1) oder auf die gesamte EEPROM-Matrix (/NE = 0) bezieht. Dieser Pin kann durch verschiedene externe Beschal-tungen, z.B. mit Spannungswächtern oder mit speziellen Portpins dazu benutzt werden, das NVRAM zu steuern und an die speziellen Gegebenheiten im Mikro-computer anzupassen.

NVRAMs sind – wenn übergaupt noch lieferbar – als 2k * 8 Bit-Bausteine erhältlich.

Page 41: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

3 Speichertechnologien und -bausteine 37

3.4.2 Ferroelektrische RAMs (FRAM, FeRAM) Eine bereits seit 1987 bekannte Bauform von Speicher ist in der Zwischenzeit auch lieferbar geworden: Ferroelektrische RAMs [5]. Bei dieser Bausteinfamilie beruht der Speichereffekt nicht auf Ladungsträger, sondern auf dem ferroelektrischen Effekt, der ähnlich wie ein ferromagnetischer Effekt („Dauermagnet“) wirkt.

Dieser Effekt, der nur in wenigen Materialien nachweisbar ist, liegt in der Eigen-schaft von Kristallstrukturen begründet, die eine durch ein äußeres elektrisches Feld hervorgerufene Polarisierung (Ausrichtung) auch nach dem Abschalten beibehält. Diese Ausrichtung wird als idealer Informationsspeicher genutzt, da nunmehr die Speicherung auch bei vollständigem Verlust der Betriebsspannung erhalten bleibt und trotzdem jederzeit änderbar ist. Dies ist durch eine entsprechende Molekülstruktur möglich.

Bild 3.18 zeigt den Aufbau der 2T/2C-FRAM-Zellstruktur. Diese Doppelstruktur ist zwar prinzipiell nicht notwendig, zur Zeit jedoch in Gebrauch. Im Unterschied zur DRAM-Struktur liegt der Kondensator hier nicht auf Masse, sondern auf eine Plateline, um die Umprogrammierung zu ermöglichen.

BL: BitleitungWL: WordleitungPL: Plateleitung

WL

BLBL

PL

Bild 3.18: Aufbau FRAM/FeRAM-Zelle

3.4.3 Magnetoresistive RAMs (MRAM) Magnetische Effekte werden seit langem zur Speicherung von Daten in Rechner-systemen genutzt, so z.B. auf Magnetbändern oder in Festplatten. Diese Speicher dienen jedoch als Massenspeicher mit sequenziellem Zugriff, d.h., die Zugriffs-reihenfolge auf Daten ist nicht beliebig.

Page 42: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

38 Embedded Systems Engineering 1

Der magnetoresistive Effekt hingegen ist erst in den 1990er Jahren entdeckt und seitdem weiterentwickelt worden. Der tunnelmagnetoresistive Effekt (TMR) beruht darauf, dass der Ladungstransport abhängig von dem magnetischen Feld ist.

Masse

Io

Steuerleitung

Leseleitung

Bild 3.19 Zweischichtenaufbau einer TMR-Zelle

Bild 3.19 zeigt den Aufbau einer solchen Zelle. Eine magnetisch harte Schicht (in Bild 3.19 oben) ist grundsätzlich in einer Richtung magnetisiert, die andere kann durch einen Stromimpuls auf der Steuerleitung umgeschaltet werden. Der Strom durch die Leseleitung ist nun abhängig davon, ob die beiden Schichten parallel (niedrigerer Widerstand) oder antiparallel (höherer Widerstand) magnetisiert sind. Derzeit sind in Bausteinen ca. 50% Widerstandsänderung realisierbar, im Labor ca. 600%.

Die Vorteile der Bausteine liegen in der Vereinigung der positiven Eigenschaften von SRAM, DRAM und EEPROM: Nicht-Flüchtigkeit, Schnelligkeit und die Ein-Transistor-Zelle. Der wesentliche Nachteil besteht in der Verwendung exotischer Materialien, die während der Herstellung in Reinsträumen Probleme ergeben.

Seit 2006 sind kommerzielle Bausteine verfügbar [6], derzeit mit einer Kapazität von 4 Mbit.

Page 43: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

3 Speichertechnologien und -bausteine 39

3.5 Zusammenfassung der verschiedenen Speichertechnologien

MRAM FRAM DRAM SRAM Flash EEPROM

Größe in F² < 4 ca. 4-8 8 100-150 4-10 ca. 20 (F: Feature Size) (NOR/NAND)

Nicht-Flüchtigkeit Ja Ja - (Pufferbat.) Ja Ja

Schreibgeschwindigkeit < 5 ns (Zelle) 150-200 ns 50-100 ns 5-100 ns 10-1000 µs 5-10 ms (pro Byte)

Anzahl Zyklen ∞ 1010-1013 ∞ ∞ <106 <106 (W/R) (W) (W)

Wesentl. Eigenschaft hohe Festig- geringe hohe Dichte Geschwin- Große Kleine nicht- keit gegen Leistungs- digkeit Speicher flüchtige Strahlung aufnahme Speicher

Tabelle 3.2 Vergleich Speichertechnologien

Page 44: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Der Mikroprozessor 8051

Während der tägliche Einsatz von PCs – quasi unbewusst – jeden Nutzer 32-Bit-Technologie anwenden lässt, kann der Hardwaredesigner bzw. -ingenieur die Grundprinzipien des Mikroprozessoreneinsatz bereits bei 4- oder 8-Bit-CPUs studieren, da – sieht man einmal von echten 32-Bit-Systemen mit Hardware-unterstützung von Multitasking und Multiuserfähigkeit sowie einem intensiven Memory Management ab – ausschließlich eine Verbreiterung von Bussystemen von 4 auf 32 oder gar 64 Bit prinzipiell keine neuen Erkenntnisse bringen.

Dies ist der Grund, zunächst eine 8-Bit-CPU einzuführen, um in diesem Kapitel die Grundzüge der Mikroprozessortechnik (als Basis von Embedded Systems) zu erkennen. Die Wahl fiel dabei auf die 8051-CPU, da

• sie sehr weit verbreitet ist, also auch heute noch viele neue Einsatzfälle findet und

• der interne Aufbau sowie der Makrobefehlssatz dem der 80x86-CPU ähnelt.

In diesem Kapitel werden also zunächst die äußeren Anschlusssysteme, die Bussysteme, von Mikroprozessoren näher betrachtet; anschließend wird das Pinout der 8051 (bzw. der ROM-losen Version 8031) eingeführt, und schließlich werden einige Makrobefehle in ihrem Busverhalten näher erläutert.

Der komplette Makrobefehlssatz einschließlich des Programmiermodells ist Thema des Kapitel 5.

Literatur:

[7] Köhn, K.-P.; Schultes, R.: 8051-Prozessoren. Franzis-Verlag, 3. Auflage München 1993, ISBN 3-7723-4333-3

[8] Bähring, H.: Mikrorechnersysteme. Springer-Verlag, ISBN 3-540-53489-X

4.1 Allgemeines zu Bussystemen bei Mikroprozessoren

Der Aufbau des von-Neumann-Rechners beinhaltet neben der Central Processing Unit (CPU), dem Speicher und dem Input/Output noch die Verbindungswege zwischen all diesen Einheiten innerhalb des Rechners (→ Kapitel 2.1, Bild 2.1). Diese Verbindungen sollen den Transport von Informationen symbolisieren, ohne dass dadurch gleich die Realisierung, also der physikalische Aufbau festgelegt sein muss.

Grundsätzlich unterscheidet man jedoch zwischen drei Arten von Informationen, für die üblicherweise auch getrennte Verbindungswege aufgebaut werden:

• Daten; hierzu zählen die Befehle, die Operanden und die Resultate

Page 45: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Der Mikroprozessor 8051 41

• Adressen zur Anwahl von Speicherzellen und Registern und

• Signale zur Steuerung des Informationsaustausches zwischen den einzelnen Komponenten.

Die daraus resultierenden drei Bussysteme, der Datenbus, der Adressbus und der Steuerbus, sind damit Ausdruck der internen Vorgänge im Mikroprozessor.

Adreßpuffer

+1

Programmzähler

AdreßbustreiberDatenbuspuffer

InternerDatenbus

InternerAdreßbus

ExternerDatenbus

ExternerAdreßbus

InternerSteuerbus

Bus-Steuerung

Bild 4.1 Die Systembus-Schnittstelle

Der Adressbus ist ein unidirektionaler, meist mit Tristate-Treibern versehener Bus, dessen Quelle innerhalb des Mikroprozessors aus dem Programmzähler (Program Counter, Instruction Pointer, bei Zugriffen auf Code) oder aus einem Adresspuffer (bei Zugriffen auf Daten als Interpretation des Befehlscodes) stammt. Dieser Pro-grammzähler wird bei sequentiellen Programmen ständig um '1' (genauer: Um eine Datenbusbreite) erhöht, bei Sprüngen mit einem neuen Wert (dem 'Sprungziel') geladen.

Das Adresspufferregister dient zunächst als Ziel der internen Adressberechnungen der CPU, dies insbesondere bei einigen, z.B. indirekten Adressierungsarten. Ist die für die gewünschten Daten korrekt berechnete Adresse fertig, dann kann via

Page 46: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

42 Embedded Systems Engineering 1

externem Adressbus, nunmehr nicht mehr vom Programmzähler, sondern vom Adressregister getrieben, zugegriffen werden.

Der Adressbus wird mit Tristate-Puffer, die also in einen hochohmigen Zustand ohne bestimmtes Potential gehen können ausgestattet, falls er abschaltbar sein soll, so dass andere Busmaster wie DMA-Controller ohne Störung zugreifen können.

Der in Bild 4.1 ausgeführte Datenbuspuffer kann sowohl als reine Treiberfunktion als auch mit Zwischenpufferungen ausgeführt sein. Es dient der Kopplung zwi-schen in- und externem Datenbus, also den Verbindungen, über die die Werte aus den verschiedenen Speichern tatsächlich transportiert werden, was eine Vielzahl von Aufgaben mit sich bringt:

• Schreiben von Daten nach außen

• Lesen von Daten aus externen Speichern

• ggf. Zwischenpufferfunktionen

• Abschalten der Bustreiber nach außen, um anderen Busteilnehmern den Zugriff zu gewähren

Ein solcher bidirektionaler Datenbustreiber – ohne Registerfunktion – ist in Bild 4.2 dargestellt.

& &

1

G

DIR

E A

Bild 4.2 Bidirektionaler Datenbustreiber

Die internen Steuersignale G und DIR steuern dabei die generellen Freigabe und die Datenrichtung; ähnliche Anordnungen finden man in bidirektionalen Puffer-bausteinen (74xx245 o.ä.), während die Herausführung der internen Steuersignale von der generellen Struktur des Systembus' (synchron, semi-synchron, asynchron) abhängt, wie im nächsten Unterkapitel behandelt werden wird.

Page 47: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Der Mikroprozessor 8051 43

4.2 Synchrone, semi-synchrone und asynchrone Systembusse

4.2.1 Der synchrone Systembus Bild 4.3 zeigt das Timing für einen Lese und einen Schreibzugriff mittels eines typischen, synchronen Systembus'. Der angenommene Taktzyklus kann z.B. 100 ns dauern, was einem Takt von 10 MHz entspräche.

Die Zeitspanne für eine Systembusoperation, d.h., Lesen oder Schreiben eines Datums, wird häufig als Buszyklus T bezeichnet, wobei sie bei dem betrachteten Prozessor mit dem Taktzyklus übereinstimmt.

Adresse

Daten

Takt

Ax

Dx

Ta Tb

T

/RD

/WR

Lesen

DatenDx

/RD

/WR

Schreiben

Tristateirrelevant

Legende:

Bild 4.3 Zeitliche Abläufe auf einem synchronen Systembus

Zu Beginn der positiven Halbwelle (Zeitspanne Ta) werden für beide Zugriffs-formen, lesend wie schreibend die Adressen und die Steuerleitung R//W auf den Adressbus bzw. die Steuerleitung gelegt. Die weiteren Operation unterscheiden sich nun:

Page 48: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

44 Embedded Systems Engineering 1

• Bei einer Leseoperation (/RD = low) erwartet der Prozessor, dass irgendwann während der Zeit Tb das adressierte Speicher- oder Peripheriegerät antwortet und die gültigen Datenbits auf dem Datenbus zur Übernahme, die mit dem Ende von Tb erfolgt, zur Verfügung stellt.

• Beim Schreibvorgang (/WR = low) legt der Prozessor spätestens bei Beginn der negativen Halbwelle des Takts (Phase Ta) die gültigen Werte auf den Datenbus, um dem adressierten Element entsprechende Zeit zur Übernahme zu lassen. Die Datenübernahme muss mit der positiven Flanke an /WR erfolgen.

Dieser Systembus zeichnet sich dadurch aus, dass alle Vorgänge vollständig syn-chron zum Taktzyklus ablaufen (müssen), Abweichungen davon sind nicht mög-lich. Die Steuerbussignale beschränken sich auf das Taktsignal und die /RD sowie /WR-Leitung, zuzüglich natürlich weiterer Signale für Reset, IRQ usw.

Diese Systembusform wird bei 8-Bit-Prozessoren (6502, 6809, 68HC11) einge-setzt. Sie ist besonders einfach, auch in der Implementierung auf einer CPU-Platine, hat jedoch den Nachteil, dass der maximal zulässige Takt durch den langsamsten Busteilnehmer bestimmt wird, der schließlich auch noch korrekt reagieren soll.

4.2.2 Der semi-synchrone Systembus Für interne Vorgänge im Mikroprozessor selbst kann der Systemtakt erheblich höher gesetzt werden, als dies für den Buszyklus T möglich ist, da sich dieser nach den äußeren Gegebenheiten richten muss. Dies bedeutet zunächst, dass Bus- und Taktzyklus nicht mehr übereinstimmen müssen, sondern mit unterschiedlichen Werten (meist in ganzzahligem Verhältnis) versehen sind.

Bild 4.4 zeigt die zeitlichen Abläufe auf einem semi-synchronen Systembus bei einem Taktverhältnis 4:1, d.h., ein Buszyklus dauert (ohne Sondermaßnahmen) 4 Taktzyklen lang.

Nach Beginn einer Speicheroperation legt der Prozessor möglichst frühzeitig zu Beginn des Zustands ("State") Ta die Adresse auf den Adressbus. Die Auswahl der Übertragungsrichtung wird wiederum durch die Steuerleitungen /RD und /WR (es ist auch eine Kombination R/ /W möglich) vorgenommen.

Bei einer Leseoperation mit hinreichend schnellen Speicher erscheinen während des letzten Taktzyklus von Tb die Daten auf dem Datenbus und können dann mit der aufsteigenden Taktflanke des nächsten Buszyklus in den Prozessor übernom-men werden.

Bei einer Schreiboperation folgen zu Beginn der zweiten Hälfte von Ta die Daten auf dem Datenbus. Auch hier gelingt die Übertragung, wenn das externe IC eine genügend kleine Zugriffszeit besitzt.

Page 49: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Der Mikroprozessor 8051 45

Adresse

Daten

Takt

Ax

Dx

Ta Tb

T

/RD

/WR

Lesen

/Ready

Tristateirrelevant

Legende:

Bild 4.4 Zeitliche Abläufe auf einem semi-synchronen Systembus

Adresse

Daten

Takt

Ax

Dx

Ta Tb

T'

/RD

/WR

Schreiben

/Ready

Tristateirrelevant

Legende:

TW

Bild 4.5 Zeitliche Abläufe auf einem semi-synchronen Systembus bei Zugriffsverlängerung

Page 50: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

46 Embedded Systems Engineering 1

Voraussetzung für beide Übertragungen ist die Signalisierung am Eingang /Ready des hypothetischen Prozessors, und zwar vor der letzten fallenden Flanke des Taktzyklus innerhalb von Tb. Liegt dieses Signal zu diesem Zeitpunkt auf high dann muss der Prozessor annehmen, dass das IC, auf das zugegriffen wird, lang-samer ist, als es dem Buszyklus entspräche, und legt wie in Bild 4.5 Wartezyklen (TW) ein. Dieses Instrument ermöglicht es dem Prozessor, im Prinzip mit belie-bigem Speicher oder Peripherie zu interagieren, was beim synchronen Systembus unmöglich war.

Die /Ready-Leitung wird gelegentlich auch prinzipiell auf low gelegt und nur beim Zugriff auf langsame ICs auf high zum Einfügen von Wartezyklen angehoben. Die semi-synchronen Systembusse laufen in der Vielzahl der Zugriffe entsprechend den synchronen ab, also mit festgelegter Zugriffsdauer. Diese Busse lassen sich sofort durch Festlegen des /Ready-Eingangs auf Masse zu synchronen Systembus-sen umstrukturieren, wobei dann allerdings die Fähigkeit des Zugriffs auf langsame ICs verloren geht.

Der semi-synchrone Systembus stellt die modernste Art des Systembus dar; insbe-sondere bei Hochgeschwindigkeits-CPUs (ab 80486, 68040) hat sich diese Art sehr bewährt.

4.2.3 Der asynchrone Systembus Der asynchrone Systembus, beispielsweise in den Motorola CPUs 68000, 68010, 68020 und 68030 realisiert, geht nicht mehr von einem normalen, taktgebundenen Verhalten und außerplanmäßigen Zugriffsverlängerung aus, sondern beherbergt eine andere Philosophie: Dem Busteilnehmer wird seitens der CPU das Vorliegen einer gültigen Adresse mitgeteilt, er selbst muss der CPU das Vorliegen der Daten (beim Lesen) oder das Übernehmen der Daten (beim Schreiben) mitteilen, ohne dass irgendeine getaktete Zeitspanne dazwischen vergehen müsste. Im Prinzip kann ein solcher Bustransfer beliebig lange dauern.

Bild 4.6 zeigt die maßgeblichen Signalverläufe:

Die für den Handshake maßgeblichen Signale heißen /AS (Address Strobe), das das Anliegen der gültigen Adresse und im Fall der Schreibens von Daten auch der Daten am Datenbus abgibt, und /DTACK (Data Transfer ACKnowledge), das sei-tens des Speicher- oder peripheren ICs das Ende des Datentransfers ankündigt.

Der Handshake verläuft dann so:

• Die CPU belegt die Adressen und ggf. die Datenleitungen mit den gültigen Werten und setzt /AS aktiv (low)

• Der angesprochene Speicherbaustein wird durch die Dekodierung selektiert und beginnt seinerseits mit den Aktionen, für die er beliebig viel Zeit bekommt.

• Ist der Baustein fertig, also sind z.B. beim Lesen die Datenleitungen richtig gesetzt, dann setzt er (oder Hilfsbausteine, falls, wie meistens, solche Hilfs-signale beim IC gar nicht vorgesehen sind) die Leitung /DTACK aktiv.

Page 51: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Der Mikroprozessor 8051 47

irrelevant Tristate

Daten

Daten

Adresse

Takt

Ax

/AS

/DTACK

Dx Lesen

R/ /W

Dx Schreiben

R/ /W

Legende:

Bild 4.6 Zeitliche Abläufe auf einem asynchronen Systembus

• Jetzt kann die CPU /AS zurücknehmen, auch wiederum in beliebig langer Zeit; anschließend nimmt die Peripherie /DTACK zurück.

Diese Form des Busses ist natürlich die allen Anforderungen am besten angepasste. Für den Hardware-Designer ist dabei zu beachten, dass Fehlzugriffe, also Zugriffe auf nicht-belegte Speicherplätze künstlich beendet werden müssen, da aufgrund des asynchronen Protokolls die CPU ggf. endlos warten würde!

Ferner müssen in den meisten Fällen die /DTACK-Antwortsignale generiert werden. Dies bedeutet, dass eine zusätzliche Logik eingebaut werden muss, die natürlich ihrerseits Verzögerungen hat und das /DTACK-Signal quasi künstlich aus einem Takt o.ä. generieren muss. Dieser Nachteil läßt die Vorteile des asynchronen Busses bei 'normalen' ICs wieder verschwinden, so dass auch Motorola wieder zum semi-synchronen Busprotokoll zurückgegangen ist.

4.3 Der Mikroprozessor 8051/8031

Nach den allgemeinen Behandlungen von Bussystemen wird jetzt der 8031-Mikro-controller im Detail behandelt. Dazu sind einige Vorbemerkungen notwendig:

4.3.1 Die Modi und das Pinout des 8031/51 Mikrocontroller sind i.a. optimiert auf den Single-Chip-Betrieb, d.h. sie enthalten alle notwendigen Teile wie Festspeicher und RAM. Gleichzeitig damit entfällt

Page 52: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

48 Embedded Systems Engineering 1

natürlich die Notwendigkeit für externe Daten- und Adressbusse, wie die Pinbe-legung für den 8051 in Bild 4.7 zeigt.

123456789

1011121314

282726252423222120

1918171615

P1.2P1.3

P1.1P1.0

P1.4

/PSENP2.7P2.6

P3.1

P1.6

P3.2

P2.5

P0.3P0.4

P3.0

2930

40393837363534333231

P1.5

P3.3

P1.7RST/VPD

P3.6P3.5

P3.7

P3.4

GNDXTAL1XTAL2

P2.3P2.2

P2.4

P2.1P2.0

P0.1P0.2

P0.0VCC

/EAALE

P0.5P0.6P0.7

Bild 4.7 8051 im Primärmode

Für Erweiterung im Programm- oder Datenbereich – auf den genauen Umfang der internen Ressourcen wird weiter unten eingegangen – oder für bestimmte Con-trollertypen, die von vornherein auf interne Speicherbereiche verzichten, sind die externen Busse jedoch notwendig; dies führt in einem sekundären Mode zu einer anderen Pinbelegung, die nachfolgend ausschließlich behandelt werden, Bild 4.8 zeigt dieses Pinout.

Die Unterscheidung zwischen diesen beiden Modi (für die Ports 0, 2 und 3) ge-schieht automatisch bei Bereichsüberschreitungen im Programm- oder Datencode, oder bei Belegung des Pin /EA mit low, was beim romlosen Modell 8031 immer geschehen muss.

Die Bedeutung der Pins im einzelnen:

Port 1.0 bis Port 1.7 bilden 8, sog. Quasi-bidirektionalen Portleitungen, die stän-dig auf Ausgang geschaltet sind und byteweise auf entsprechende Ausgabewerte gesetzt werden können. Eingangswerte können trotz der Unmöglichkeit des Übergangs in den Tristate-Zustand eingelesen werden, wenn die Ausgangsleitung auf high gesetzt ist, da aufgrund der internen Hardware dieser Pegel durch externe

Page 53: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Der Mikroprozessor 8051 49

TTL-Pegel auf low gezogen und so auch eingelesen werden kann. Dieser quasi-bidirektionale Port ist im Primärmode bei den Ports 1 bis 3 implementiert, während Port 0 einen tatsächlichen bidirektionalen Port mit Tristate-Möglichkeit darstellt.

RST/VPD dient der Eingabe eines Resets bei Anliegen des High Pegels an diesem Pin. Ist VCC ausgeschaltet, dann können die Inhalte der internen RAM-Zellen via diesem Pin (V Power-Down) zwischengespeichert werden.

123456789

1011121314

282726252423222120

1918171615

P1.2P1.3

P1.1P1.0

P1.4

/PSENA15A14

TxD

P1.6

/INT0

A13

AD3AD4

RxD

2930

40393837363534333231

P1.5

/INT1

P1.7RST/VPD

/WRT1

/RD

T0

GNDXTAL1XTAL2

A11A10

A12

A9A8

AD1AD2

AD0VCC

/EAALE

AD5AD6AD7

Bild 4.8: 8031/51 im Sekundärmode

RxD und TxD entsprechen den üblichen Kommunikationsein- und -ausgängen bei serieller Kommunikation.

/INT0 und /INT1 sind Eingänge für externe Interruptquellen.

T0 und T1 stellen Eingänge für die internen Timer im 8031/51 dar, z.B. für Zäh-lereignisse, Pulsweiten etc.

/WR und /RD werden für die Busoperationen als Schreib- oder Lesesignale für Datenzugriffe benötigt.

Der Anschluss für den Oszillator erfolgt an XTAL1 (Output für den Oszillator) und XTAL2 (Input).

Page 54: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

50 Embedded Systems Engineering 1

A8 bis A15 stellen die höherwertigen 8-Bit-Teil des Adressbus' dar. Während aller externen Zugriffe werden diese Leitungen mit den entsprechenden Adressbits belegt.

Der niederwertige Teil des Adressbus A0 bis A7 liegt zusammen mit den Datenbus an den Pins AD0 bis AD7. Dieser gemultiplexte Adress-/Datenbus benötigt weniger Anschlusspins im Pinout, dafür allerdings externe Hardware zur Zwischenspeicherung der niederwertigen Adressinformationen, die durch das weiter unten beschriebene ALE-Signal gesteuert wird.

/PSEN wird aktiv low gesetzt, falls der Mikrocontroller auf Programmcode zugreifen will. Die 8051-Familie benutzt dabei ein modifiziertes Harvard-CPU-Modell mit getrennten Speicher- und Datenbereichen. Die Unterschiede zum bekannten von-Neumann-Modell sind jedoch in der Praxis nicht zu bemerken, wenn man einmal von dem erweiterten Gesamtspeicherbereich absieht.

ALE kann externe Latch-Speicher steuern, die die niederwertigen Adressbits zwi-schenspeichern. ALE high bedeutet Transparenz der Latches, bei low sollen sie den Wert halten, da der Bus nunmehr mit dem Datenteil belegt wird.

/EA zuletzt dient der generellen Umschaltung zwischen Datenzugriff auf internes ROM im unteren Speicherbereich (Primärmode, /EA = high) und externes Memory in diesem Bereich (Sekundärmode, /EA = low). Letzterer Wert ist bei der 8031-CPU ständig einzustellen. Die Modusumschaltung bezieht sich nur auf die Ports 0 und 2, da diese bei Benutzung von externem Speicher für die Bussysteme benötigt werden.

4.3.2 Der Prozessorbus des 8031/51 im Sekundärmode Der 8031/51 nutzt ein synchrones Busprotokoll für die Zugriffe zur Peripherie, zum Code und zum externen Datenspeicher. Der Buszyklus entspricht dabei 12 Taktzyklen; im folgenden wird zunächst der Zugriff zum Codespeicher behandelt, während Datenspeicherzugriffe in Abschnitt 4.4 im Detail dargestellt sind.

Da, wie bereits erwähnt, der 8051 und alle Abkömmlinge (derer es eine ganze An-zahl gibt) eine (doppelt) modifizierte Harvard-Architektur mit getrennten Daten-speicher- und Programmspeicherbereichen besitzt, muss der Zugriff auf Pro-grammspeicher gesondert behandelt werden. In Bild 4.9 wird gezeigt, dass dieser Lesezugriff so optimiert ist, dass während eines Buszyklus zwei (beim Daten-speicher: Ein) Bytes eingelesen werden können. Diese Optimierung ist deshalb besonders sinnvoll, da die Vielzahl der 8051-Assemblerbefehle (Herstelleranga-ben: 44% und 41%) Ein- bzw. Zwei-Byte-Befehle sind.

Page 55: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Der Mikroprozessor 8051 51

State1

P1 P2

State2

P1 P2

State3

P1 P2

State4

P1 P2

State5

P1 P2

State6

P1 P2

State4

P1 P2

XTAL2

ALE

/PSEN

AD0..7Data Sample

PC lowData Sample

PC low

A8..15 PC high PC high

Bild 4.9: Zugriff auf Codespeicher (für 2-Byte-Befehle) am 8031/51

Die Optimierung auf 2-Byte-Befehle birgt damit auch ein Kuriosum in sich: 1-Byte-Befehle werden ebenfalls wie 2-Byte-Befehle geladen, nur wird das eine Byte zweifach ausgelesen; damit ist diese Befehlsart – was das Einlesen betrifft – kei-nesfalls schneller. 3-Byte-Befehle, die längste Art, werden in 4 Bytes mit Wieder-holung des letzten Bytes und damit in der doppelten Zeit als 2-Byte-Befehle einge-lesen.

Für die Konstruktion eines Controller-basierten Hardwaresystems sind die tatsäch-lichen Zeiten, die für den angeschlossenen Speicher mitsamt der notwendigen Dekodierung verbleiben, wichtig. Bild 4.10 und Tabelle 4.1 geben Aufschluss für den schnellsten Zugriff beim 8051-System, dem auf Programmcode.

ALE

TCY

TLHLL

A0..7 Inst. in A0..7 Inst. in

TLLIV

TAVLL

TLLPL

/PSEN

AD0..7

A8..15

TAVIV

Bild 4.10 Tatsächliche Zugriffszeiten beim 8051 (vereinfacht), Bezeichnungen

Page 56: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

52 Embedded Systems Engineering 1

Bezeichnung Wert allgemein Wert für fMAX = 15MHz [ns]TCY (Minimum Instruction Cycle Time) 12 TCLCL 800TLHLL (ALE Pulse Width) 2 TCLCL - 40 93TAVLL (Adress Setup to ALE) TCLCL - 30 37TLLIV ( ALE to Valid Instruction) 4 TCLCL - 100 168TLLPL (ALE to /PSEN) TCLCL - 25 42TAVIV (Address to Valid Instruction In) 5 TCLCL - 115 220

Tabelle 4.1 Berechnung der Zugriffszeiten

Die in Tabelle 4.1 angegebenen Zugriffszeiten ergeben bei einem 15 (12) MHz Systemtakt dann Zeiten von 168 (233) ns für die Dekodierung und den gesamten Zugriff; diese Zeit reicht bei heutiger Technologie bei weitem aus, ein stabiles System aufzubauen.

4.4 Der Ablauf einzelner Makrobefehle am Prozessor

Bisher wurde der sogenannte Fetch, das Laden des nächsten Befehls aus dem Codespeicher behandelt. Dieser Ablauf ist naturgemäß für den Programmablauf maßgebend, da die Befehle zur Interpretation aus den Speicher geladen sein müs-sen.

Die weitere Interpretation ist vom Befehl selbst abhängig. Aus diesem Grund wer-den vier Beispiele behandelt, ein Sprungbefehl, ein Transferbefehl mit einer Kon-stanten und zwei Transferbefehle mit Speicherinhalt, einmal lesend, einmal schreibend. Während der vollständige Befehlssatz erst in Kapitel 5 eingeführt wird, werden hier bereits Teile davon benutzt, um die Funktionsweise der CPU zu erklären.

4.4.1 Der Sprungbefehl LJMP (Long Jump auf 16 Bit Adresse)

Jeder Sprungbefehl einer CPU bedeutet ausschließlich das Neuladen des Pro-grammcounters mit einer absoluten oder relativen (in Bezug auf den bisherigen Wert) Sprungadresse. Dieses Neuladen kann dabei von bestimmten Eingangs-werten abhängig gemacht werden, z.B. vom Zustand bestimmter Flags im Sta-tusregister.

Geht man einmal davon aus, dass interne Vorgänge in einer CPU im Vergleich zu externen Ladeoperationen sehr schnell verlaufen, so müsste der Sprungbefehl von seinen zeitlichen Ansprüchen im Wesentlichen mit dem Laden des Befehls und des Sprungziels abgeschlossen sein. Diese Vermutung, die selbstverständlich nicht immer zutrifft, bewahrheitet sich beim 8031/51, wo der 3 Bytes lange Befehl

Page 57: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Der Mikroprozessor 8051 53

LJMP addr16 (codiert als 02h High_Byte Low_Byte)

in zwei Buszyklen (also 24 Takten) geladen und durch das Neuladen des Pro-grammcounters zugleich interpretiert wird.

Die genaue Betrachtung dieses Befehls verläuft also wie in Bild 4.9 dargestellt, wobei zwei Buszyklen dafür benötigt werden und der zweite Zugriff (Fetch) des zweiten Zyklus den gleichen Wert liefert wie der erste, so dass er verworfen wird.

4.4.2 Der Transferbefehl MOV A, #data (Immediate Adressierung)

Die Transferbefehle beim 8031/51 haben ähnliche Gestalt wie die der 80x86-Prozessoren, obgleich das Prozessormodell nicht übereinstimmt; zumindest die Registerstruktur (→ Kap. 5) zeigt einen anderen Aufbau.

Transferbefehle haben damit (fast) immer den Aufbau

MOV Ziel, Quelle

was im Fall der unmittelbaren Adressierung (immediate) z.B.

MOV A, #data (codiert als 74h Data_Byte)

bedeutet, dass aus dem Kontext des Programmcodes die 8-Bit-Konstante #data in den Akkumulator zu laden ist. Der Ablauf dieses Befehls verläuft dann auch entsprechend: Mit einem Programmcodefetch kann der Befehl und das zu ladende Datenbyte aus dem Programmspeicher geladen werden, anschließend wird dieses Datenbyte sofort in den Akkumulator, ein internes 8-Bit-Register, geschrieben, ohne zusätzliche Buszyklen zu benötigen. Der gesamte Befehl, 2 Bytes lang, benötigt zum Ablauf einen Buszyklus.

4.4.3 Der Transferbefehl MOVX A, @Ri (Inhalt der indirekten, auf externes RAM bezogenen Adressierung aus Ri in Akkumulator)

Die indirekte Adressierung beim 8031/51 benutzt eines von zwei 8-Bit-Registern, die dazu in der Lage sind, eine 8-Bit-Adresse aufzunehmen: Ri bedeutet im wie-teren Kontext immer R0 oder R1, während die weiteren 8-Bit-Register R2 bis R7 als Ziel oder Quelle für diese Adressierungsform nicht geeignet sind.

Der hier behandelte Befehl,

MOVX A, @Ri (codiert als 0e2h für R0, 0e3h für R1)

lädt also den Inhalt der Adresse (00h .. 0ffh), die in Ri steht, aus dem externen RAM in den Akkumulator.

Der Ablauf lässt sich nun wie folgt schildern: Zunächst wird der Befehl, also nur 1 Byte aus dem Programmspeicher geladen. Dies benötigt einen Buszyklus, inner-halb dessen das Befehlsbyte geladen und interpretiert wird. In einem zweiten Bus-

Page 58: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

54 Embedded Systems Engineering 1

zyklus, dieser Befehl benötigt damit insgesamt 24 Taktzyklen, wird das Datenbyte geladen und in den Akkumulator geschrieben.

Der Lesevorgang des Datenbytes aus dem externen RAM zeigt ein vom Codefetch abweichendes zeitliches Verhalten, wie in Bild 4.11 dargestellt ist.

State1

P1 P2

State2

P1 P2

State3

P1 P2

State4

P1 P2

State5

P1 P2

State6

P1 P2

State4

P1 P2

XTAL2

ALE

/PSEN

AD0..7 @RiData Sample

A8..15 00h

/RD

Bild 4.11 Lesen eines Datenbytes aus externem RAM

4.4.4 Der Transferbefehl MOVX @Ri, A (Inhalt des Akkumulators in indirekte Adresse aus Ri innerhalb des externen RAMs)

Der umgekehrte Vorgang, das Beschreiben einer externen Datenzelle mit einem Datenbyte, das aus dem Akkumulator stammt, und dessen neuer Platz durch R0 oder R1 bestimmt wird, wird durch den Befehl

MOVX @Ri, A (codiert als 0f2h bzw. 0f3h)

beschrieben. Der Ablauf entspricht dem aus 4.4.3 beschriebenen, zuerst wird der Befehl geladen und interpretiert, im zweiten Buszyklus wird das Datenbyte in das externe RAM geschrieben; letzterer Vorgang, bei einem Programmfetch überhaupt nicht vorgesehen (die CPU unterstützt sozusagen keinen selbstmodifizierenden Code), ist in Bild 4.12 grafisch dargestellt.

Page 59: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Der Mikroprozessor 8051 55

State1

P1 P2

State2

P1 P2

State3

P1 P2

State4

P1 P2

State5

P1 P2

State6

P1 P2

State4

P1 P2

XTAL2

ALE

/PSEN

AD0..7 @Ri Data Out

A8..15 00h

/WR

Bild 4.12 Schreiben eines Datenbytes in externes RAM

4.5 Aufbau eines Rechnersystems auf Basis 8051

Nachdem nun die Anschlussbelegung eines 8051 bekannt ist (und die folgenden Aussagen gelten auch für andere Derivate) und zudem unterschiedliche Speicherbausteine und deren Belegung bekannt sind, kann – zumindest theoretisch – ein Rechnersystem aufgebaut werden. Als Beispiel wird hier ein System mit folgenden Komponenten aufgebaut:

• 8051-CPU (oder 8031), im Sekundärmodus

• 1 EPROM-Baustein 27128 (16K * 8 bit) als Programmspeicher

• 2 statische RAM-Bausteine, 6264 (8K * 8 bit) und 62256 (32K * 8 bit) als Datenspeicher

• 1 Baustein 8255 (→ Kapitel 6) mit 24 parallelen Bitleitungen als allgemeiner Input/Output-Baustein (so genannter PIO, parallel Input/Output)

Bild 4.13 zeigt schematisch diese Konfiguration des aufzubauenden Mikrorech-ners. Dieser Mikrorechner verfügt damit über alle Komponenten eines Von-Neumann- bzw. Harvard-Rechners. Die folgende Aufgabe besteht nun darin, die Komponenten entsprechend zu verdrahten.

Der erste Teil der Verdrahtung ist in Bild 4.14 festgehalten. Hier werden Adress- und Datenbusanschlüsse der Bausteine miteinander verbunden, wobei eine Besonderheit am 8051 berücksichtigt werden muss: Der zeitlich gemultiplexte Adress-/Datenbus.

Page 60: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

56 Embedded Systems Engineering 1

6225

6

A0 ..

A14

/CS

/RD

/WR

D0 ... D7

6264

A0 ..

A12

/CS

1

CS

2

/RD

/WR

D0 ... D7

2712

8

A0 ..

A13

/CS

/OE

D0 ... D7

PIO

825

5

A0

A1

/CS

/RD

/WR

D0 ... D7

PA

0

... PA

7

PB

0

... PB

7

PC

0

... PC

7

8051

AD

0 ..

AD

7

A8 ...

A15

/PS

EN

/RD

/WR

/EA

Bild 4.13 Bausteine im 8051-basierten Mikrorechner

Page 61: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Der Mikroprozessor 8051 57

6225

6

A0 ..

A14

/CS

/RD

/WR

D0 ... D7

6264

A0 ..

A12

/CS

1

CS

2

/RD

/WR

D0 ... D7

2712

8

A0 ..

A13

/CS

/OE

D0 ... D7

PIO

825

5

A0

A1

/CS

/RD

/WR

D0 ... D7

PA

0

... PA

7

PB

0

... PB

7

PC

0

... PC

7

8051

AD

0 ..

AD

7

A8 ...

A15

ALE

/PS

EN

/RD

/WR

/EA

7457

3

I0 .. I7 LE /OE

O0 .. O7

A0

.. A

15

D0

.. D

7

Bild 4.14 Mikrorechner mit Verdrahtung des Adress- und Datenbusses

Page 62: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

58 Embedded Systems Engineering 1

Dieser AD-Bus muss nun zeitlich entkoppelt werden, hierzu dient das Latch 74573, das den Adressanteil im Signal durchlässt, solange das Steuersignal ALE auf low gesetzt ist (Register sind transparent), den zuletzt anliegenden Wert jedoch speichert, wenn ALE den Wert high besitzt.

Diese Entkopplung muss in Zusammenhang mit dem zeitlichen Verhalten des 8051 gesehen werden, siehe auch Bild 4.9, 4.10 und 4.11. Das Steuersignal ALE ist so gestaltet, dass bei Verwendung eines Standard-Latches die gewünschte Funktiona-lität erreicht wird. Hinter dem Latch liegt dann der ”reine“ Adressbus an, während das originäre Signal als Datenbus verwendet und dementsprechend verdrahtet wird.

Bild 4.15 zeigt nun die endgültige Verdrahtung – allerdings ohne die Zuführungs-leitungen für Masse und Betriebsspannung sowie ohne Takterzeugung. Um den einzelnen Bausteinen einen Bereich im Adressraum zuzuweisen, bedarf es einer Decodierung der Adressen und Generierung der Chip-Select-Signale. Hierzu seien einige Bemerkungen gemacht:

• Das Programm muss an den Adressen 0x0000 bis 0x0002 einen sinnvollen Wert aufweisen. Dies ist die so genannten Resetadresse, d.h., die CPU fängt bei einem Neustart (Power-On) bei der Adresse 0x0000 an und erwartet hier einen Befehl (z.B. JMP). Folglich wird das EPROM im Bereich 0x0000 – 0x3FFF eingeblendet. Weiterhin wird es nur durch das Steuersignal /PSEN (Program Space Enable) aktiviert, denn hier wird Programmcode gespeichert.

• Für die beiden statischen RAMs, die Daten speichern werden die Speicherbe-reiche 0x0000 – 0x7FFF (32 KByte) und 0xE000 – 0xFFFF (8 KByte) gewählt. Diese Wahl ist willkürlich. Hier erfolgt die Aktivierung durch ein aktives /RD oder /WR.

• Der I/O-Baustein wird ebenfalls im Datenspeicherbereich eingeblendet, und zwar bei 0x8000 – 0x9FFF. Der Baustein belegt zwar nur 4 Adressen, die Decodierung hat aber nur die Adresssignale A13 bis A15 zur Verfügung und kann daher nur Bereiche von einer Mindestgröße von 8 KByte unterscheiden.

Die Decodierung erfolgt durch einen programmierbaren Baustein GAL16V8. Die booleschen Gleichungen, die zur Programmierung notwendig sind, sind im Listing 4.1 aufgeführt.

Page 63: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Der Mikroprozessor 8051 59

6225

6

A0 ..

A14

/CS

/RD

/WR

D0 ... D7

6264

A0 ..

A12

/CS

1

CS

2

/RD

/WR

D0 ... D7

2712

8

A0 ..

A13

/CS

/OE

D0 ... D7

PIO

825

5

A0

A1

/CS

/RD

/WR

D0 ... D7

PA

0

... PA

7

PB

0

... PB

7

PC

0

... PC

7

8051

AD

0 ..

AD

7

A8 ...

A15

ALE

/PS

EN

/RD

/WR

/EA

7457

3

I0 .. I7 LE /OE

O0 .. O7

A0

.. A

15

D0

.. D

7

GA

L16V

8

A13

.. A15

PS

EN

RD

WR

/CS

_RA

M1

/CS

_RA

M2

/CS

_EP

RO

M

/CS

_825

5

Bild 4.15 Komplette Verdrahtung

Page 64: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

60 Embedded Systems Engineering 1

CHIP DECODER_8031 GAL16V8 NC A13 A14 A15 PSEN RD WR NC NC GND NC NC CE_EPROM CE_RAM1 CE_RAM2 CE_8255 NC NC NC VCC /CE_EPROM = /A15 * /A14 * /PSEN ; Programmspeicher 0000h ; .. 3fffh /CE_RAM1 = /A15 * /RD + /A15 * /WR ; 32 kByte RAM 0 000h .. ; 7fffh /CE_RAM2 = A15 * A14 * A13 * /RD + ; 8 kByte RAM e0 00h .. A15 * A14 * A13 * /WR ; ffffh /CE_8255 = A15 * /A14 * /A13 * /RD + ; 8 kByte PIO 8000h .. A15 * /A14 * /A13 * /WR ; 9fffh

Listing 4.1 Decodierungslogik in GDS-Syntax

Page 65: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

5 Einführung in die Assemblersyntax der 8051-CPU

Literatur:

[7] Köhn, K.-P.; Schultes, R.: 8051-Prozessoren. Franzis-Verlag, 3. Auflage München 1993, ISBN 3-7723-4333-3

5.1 Das Programmiermodell der 8051-CPU

Obwohl es sich bei der 8031/51-CPU um eine relativ einfache, 8-Bit-Rechnerar-chitektur handelt, ist das Programmiermodell, also die Beschreibung der Hardware innerhalb der CPU, die der hardwarenahe Softwareprogrammierer 'sieht', recht komplex. Der Grund hierfür liegt darin zu suchen, dass die 8031/51-Architektur nicht nur die reine CPU, sondern auch eine Anzahl von Peripherie-Einheiten um-fasst, und diese bilden sich natürlich ebenfalls im Programmiermodell ab.

Bild 5.1 stellt die symbolisch erreichbaren Register dar.

Akkumulator A

Hilfs-Akkum. BR0

R1

Akkumulatorregister 8-Bit-Register

R6

R7

R4

R5

R2

R3PSW

SP

Status: Program Status Word

Stack Pointer (8-Bit)

DPTR

Data Pointer (16-Bit)

PC

Program Counter (16 Bit)

Bild 5.1 Programmiermodell 8051, Register

Die in Bild 5.1 gezeigten Register benötigen natürlich auch einen Speicherplatz, insbesondere, wenn man bei den allgemeinen 8-Bit-Registern noch bedenkt, dass diese, wie angedeutet, vierfach ausgelegt sind, wobei jeweils ein Registersatz á 8 Registern selektiert ist, wie noch gezeigt wird.

Page 66: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

62 Embedded Systems Engineering 1

Die Abbildung der Register und der Special Function Register (SFR), die einen direkten Bezug zu Hardwarefunktionen wie Ports etc. haben, in das interne RAM, von dem mindestens 128 Byte vorhanden sind (bei größerer Ausbaustufen der 8051-Architektur auch mehr), zeigt Bild 5.2.

30h20h

00h

80h

100h

Register 4 * R0 .. R7

Bitadressierbarer Bereich

Nur direkt adressierbar

Direkt und indirektadressierbar

Special Function Register

Bild 5.2 Abbildung der Register im internen RAM

Diese Abbildung im RAM bzw. den Special Function Register bedeutet damit auch (teilweise) zweifache Erreichbarkeit. Um es nochmals deutlich auszudrücken: Es gibt in jeder 8051-architekturbasierten CPU mindestens 128 Bytes RAM, die direkt und indirekt (zu den Adressierungsmodi später mehr) erreicht werden können, weiterhin Special Function Register (SFR), deren Lage im folgenden exakt beschrieben wird, die aber nur direkt erreicht werden können. In weiteren CPUs, z.B. der 8032/52 sind bereits 256 Bytes RAM vorgesehen, die zusätzlich 128 befinden sich dann im gleichen Adressraum wie die SFR, sind dann aber nur noch indirekt erreichbar, was den Neuling bei dieser CPU gewöhnlich verwirrt.

Zur Abbildung der internen Register und der Hardware-bezogenen Funktionen:

Die Register R0 bis R7 sowie die weiteren Schattenregister befinden sich im internen RAM an den Adressen 00h bis 1fh. Der weitere RAM-Bereich ist von CPU-Registern nicht belegt und wird z.B. als Stack genutzt.

Bei den Special Function Register unterscheidet man noch (etwas willkürlich) zwischen Software-bezogenen Registern und Hardware-bezogenen Registern; zur ersteren Gruppe gehören:

Page 67: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

5 Einführung in die Assemblersyntax der 8051-CPU 63

Der Stackpointer SP an der Adresse 81h, der immer die aktuelle Adresse des Stacks enthält und in der 8051-Architektur beim Schreiben um 1 Byte erhöht, beim Lesen um 1 Byte erniedrigt wird; dieser Stackpointer zeigt immer in das interne RAM.

Der Data Pointer Low und High an den Adressen 82h und 83h, die zusammen das Data Pointer Register (DPTR) bilden, mit dem bei Datenzugriffen auf maximal 64 KByte zugegriffen werden kann.

Das Program Status Word (PSW) an der Stelle 0d0h, das die Flags für den jeweiligen Programmstatus enthält; dieses Register ist in Bild 5.3 dargestellt. Hier-bei fällt auf, dass ein allgemeines Interrupt Enable oder Disable Flag fehlt: Inter-rupts müssen einzeln im Interrupt Enable Register freigegeben werden (siehe SFR).

CY AC F0 RS1 RS0 OV - P

Bild 5.3 Program Status Word (PSW)

CY bedeutet dabei Carry , AC Auxiliary-Carr y, Hilfs-Carry; letzteres wird für die BCD-codierte Addition benötigt. F0 stellt ein Kuriosum dar, ein User-definiertes Flag, das bei Interrupt Requests auf dem Stack gerettet wird.

RS0 und RS1 legen als Register Select die Registerbank (0 bis 3) fest, auf die sich alle Rx-Operationen beziehen. OV stellt ein Overflow-Flag dar und unterstützt so-mit die vorzeichenbehaftete Arithmetik. Das mit - gekennzeichnete Flag ist reser-viert und darf keineswegs geändert werden! Zum Schluss wird im mit P bezeich-neten Flag die Akkumulator-Parität (0 = gerade Anzahl von '1') angezeigt.

Der Akkumulator A (hier oft auch als ACC bezeichnet) befindet sich an der Speicherstelle 0e0h und ist somit auch dort erreichbar. Ein Hilfsakkumulator B , wird hingegen ausschließlich mittels direktem Datenzugriff auf 0f0h erreicht.

Die Hardware-bezogenen Register, auch Peripherie-bezogen genannt, haben fol-gende Adressen und Bedeutungen:

P0 bei 80h stellt den Port 0 mit 8 externen Anschlüssen, Pin 39 .. 32, dar. Im Unterschied zu den 80x86-Systemen gibt es keine speziellen I/O-Befehle, die Ports sind 'Memory-mapped', sie verhalten sich scheinbar wie normaler Speicher. In 8031-Systemen muss der Port 0 als AD-Bus benutzt werden!

Das Timer Control Steuer- und Statusregister TCON, bei 88h zu erreichen, beher-bergt im oberen Halbbyte Werte für die Timer 0 und 1, im unteren für die Inter-rupt-Logik.

Der Modus der Timer 0 und 1 wird im Register TMOD , 89h, bestimmt. Die Timer selbst, also die 16-Bit breiten Zählregister, befinden sich bei 8ah/8ch (Timer 0 low/high) sowie bei 8bh/8dh (Timer 1 low/high).

Page 68: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

64 Embedded Systems Engineering 1

Port 1 wird durch das Register P1 (90h) gesteuert. Die dafür vorgesehenen An-schlüsse 1 .. 8 am Mikrocontroller behalten auch beim 8031 ihre Funktion. Die Anschlüsse sind quasi-bidirektional ausgelegt, d.h. eigentlich als Ausgang konfiguriert kann ein Eingangssignal richtig gelesen werden, wenn der Ausgang vorher auf high gesetzt war, da externe TTL-Treiber ein solches Ausgangssignal überschreiben können.

Die serielle Schnittstelle wird durch das Serial Control Steuer- und Statusregister SCON (98h) kontrolliert und sendet bzw. empfängt die Zeichen via SBUF (99h). SBUF selbst stellt zwei Register dar, wobei aus dem Empfangsteil nur gelesen, in den Sendeteil nur geschrieben werden kann.

P2 (0a0h) kontrolliert den Port 2 (Anschlüsse 21 .. 28), der beim 8031 als A8 .. 15 benutzt wird und somit nicht zur Verfügung steht.

IE (0a8h), das Interrupt Enable Register, gibt die diversen Interruptquellen (in- und externe) frei.

P3 (0b0h) kontrolliert den wiederum am 8031 nicht benutzbaren Port 3 (Anschlüsse 10 .. 17), ebenfalls quasi-bidirektional ausgelegt.

IP (0b8h) bestimmt als Interrupt Priority Register die Priorität der Interruptquellen in einer zweistufigen Hierarchie.

Tabelle 5.1 fasst nochmals alle SFRs in aufsteigenden Adressfolge zusammen.

P0 Port 0 80h (Peripherie)SP Stack Pointer 81h (Software)DPL Data Pointer Low 82h (Software)DPH Data Pointer High 83h (Software)TCON Timer Control Register 88h (Peripherie)TMOD Timer Modus Register 89h (Peripherie)TL0 Timer 0 Low 8ah (Peripherie)TL1 Timer 1 Low 8bh (Peripherie)TH0 Timer 0 High 8ch (Peripherie)TH1 Timer 1 High 8dh (Peripherie)P1 Port 1 90h (Peripherie)SCON Serial Control Register 98h (Peripherie)SBUF Serial Buffer Register 99h (Peripherie)P2 Port 2 0a0h (Peripherie)IE Interrupt Enable Register 0a8h (Peripherie)P3 Port 3 0b0h (Peripherie)IP Interrupt Priority Register 0b8h (Peripherie)PSW Program Status Word 0d0h (Software)ACC Accumulator 0e0h (Software)B Auxiliary Accumulator 0f0h (Software)

Tabelle 5.1 Special Function Register

Page 69: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

5 Einführung in die Assemblersyntax der 8051-CPU 65

5.2 Speichermodell im 8031/51

Bedingt durch die besondere Struktur der 8031-CPU, getrennte Steuersignale für externe Daten (/RD, /WR) und Code (/PSEN) anzubieten, ergibt sich ein Speicher-modell, d.h. eine modellhafte Vorstellung der Erreichbarkeit von Speicher wie in Bild 5.4 dargestellt. Der interne Speicher, beim 8031 128 Bytes RAM, beim 8032 auf 256 Bytes ansteigend, ist hierin ebenso integriert wie die Special Funktion Register; beide werden an den gleichen Adressen wie externer Speicher adressiert, die Art des Mikroprozessorbefehls unterscheidet hier den Zugriff (vergleiche auch Bild 5.2 und Abschnitt 5.4).

Programm-code

(intern,extern)

ExterneDaten(RAM)

InternesRAM

SpecialFunctionRegister

0000h

0080h

0100h

0FFFFh

/RD = 0oder

/WR = 0

/PSEN = 0

Bild 5.4 Speichermodell 8031/8051

5.3 Das Stack-Konzept

Der Zugriff auf die im Kapitel 3 vorgestellten RAM-Bausteine war wahlfrei – da-her auch der Name Random Access. Diese Wahlfreiheit bedeutet, dass die Adres-sierungsreihenfolge beliebig gewählt werden kann.

Andererseits existieren zwei andere Zugriffskonzepte in weiter Verbreitung, die eine zeitliche Reihenfolge des Lese- und Schreibzugriffs erzwingen: FIFO und Stack.

Page 70: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

66 Embedded Systems Engineering 1

FIFO bedeutet dabei First-In-First-Out. Dieses Prinzip kann mit einer Warte-schlange verglichen werden, bei der sich neu hinzukommende Elemente an das Ende anreihen (Schreibzugriff), während die Abarbeitung am Kopf der Schlange abläuft (Lesezugriff). Hierfür existieren eine Reihe von FIFO-RAM-Bausteinen (obwohl der Name RAM nicht mehr korrekt ist, wird dieser beibehalten), wobei als typische Anwendung die Kommunikation zwischen Prozessoren oder Tasks in Multitaskingsystemen genannt werden können. Ebenso ist eine Softwarerealisie-rung mit Hilfe zweier Datenpointern möglich (Schreib- und Lesezeiger). FIFOs haben den Vorteil, dass sie bei strenger Einhaltung des Konzepts die Daten in exakter (Schreib-)Reihenfolge wieder auslesen lassen.

Im Gegensatz hierzu wird das Stack-Prinzip, im Deutschen Stapel oder Keller-speicher genannt, gewöhnlich nicht durch spezielle Speicherbausteine oder reine Softwarelösung implementiert, sondern als Hardwareteil innerhalb einer CPU. Der Stack arbeitet dabei nach dem LIFO-Prinzip (Last-In-First-Out), das sich mit einem Tellerstapel vergleichen lässt: Lese- und Schreibzugriffe beziehen sich immer auf den obersten Teil des Stapels (Top-of-Stack), Schreibzugriffe auf das nächste freie Element, Lesezugriffe auf das oberste besetzte Element, das damit gleichzeitig für neue Schreibzugriffe freigegeben wird.

Wie jetzt ein Stackkonzept konkret in einer CPU realisiert ist (praktisch hat jede CPU einen Stack, wobei allerdings beträchtliche Größenunterschiede zu verzeich-nen sind), hängt stark von dem Hardwaredesigner ab; so existieren Stacks, die bei Schreibzugriffen zu niedrigeren Adressen hin wachsen (Beispiel: 8086) ebenso wie zu höheren Adressen (8051). Das Stackkonzept wird bei drei Aktionen der CPU stark in Anspruch genommen:

• Unterprogrammsprünge: Die Rücksprungadresse landet auf dem Stack und wird beim Rücksprung wieder in den Programmzähler geladen

• Lokale Variablen: In funktionalen Sprachen wie C, Pascal werden lokale Va-riablen, die also einen beschränkten Gültigkeitsbereich besitzen, auf dem Stack angelegt und somit wieder verworfen, wenn es zu einem Rücksprung aus der Routine kommt.

• Interrupt Requests: Sowohl die Rücksprungadresse nach Behandlung der IRQs als auch (falls erforderlich) gerettete Registerinhalte und das Prozessorstatus-register werden auf dem Stack gelagert.

Beim 8051 existiert ein Stackpointer (SP) mit 8-Bit Breite, dessen Ziel immer eine Stelle im internen RAM ist. Der effektive Zugriffsbereich wird natürlich begrenzt: Im Allgemeinen stehen 128 Bytes zur Verfügung, von denen jedoch die unteren 32 Byte jedoch für die Registerbanks 0 .. 3 und die nächsten 16 Bytes für den bitadres-sierbaren Bereich zur Verfügung stehen. Werden diese Bereiche nicht benötigt, können sie vom Stack in Anspruch genommen werden. Vorsicht ist dennoch bei einer Doppelbelegung geboten, denn dies führt zu schwer identifizierbaren Fehlern.

Page 71: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

5 Einführung in die Assemblersyntax der 8051-CPU 67

30h

34h

38h

3ch

36h

SP

Akkumulator

55h

vorher

0aah0bbh

30h

34h

38h

3ch

37h

SP

Akkumulator

55h

nach: PUSH ACC

0aah055h

Bild 5.5 Stackoperation Push

Bild 5.5 zeigt die Funktionsweise des Stacks beim 8031/51: Bei einem Schreib-zugriff wird der momentane SP-Inhalt zuerst um 1 inkrementiert und dann der Inhalt auf die dann adressierte Zelle im internen Speicher geschrieben, bei einem Lesezugriff wird zuerst gelesen und dann SP um 1 dekrementiert. Nach einem Reset zeigt SP auf die Speicherzelle 7, so dass der erste Schreibzugriff auf die Zel-le 8 erfolgen würde. Hier liegt jedoch zugleich das Register R0 der Registerbank 1, so dass Konflikte nicht auszuschließen sind. Während der Wert 7 historische Gründe hat (das Vorgängermodell 8048 hatte hier keine Registerbank!), sollte ein vorsichtiger Programmierer mit Hilfe der Anweisung

mov SP, #STACK_BOTTOM - 1

mit STACKBOTTOM = 30h (oder ähnliche Werte) den Stack auf ‘ungefähr-lichere’ Bereiche setzen.

5.4 Die Adressierungsmodi

Bevor die Assemblernotation behandelt wird, müssen die Adressierungsmodi der 8051-CPU näher betrachtet werden. Dies erfolgt vorab, da viele Maschinenbefehle, insbesondere die Speichertransferbefehle mit diversen (aber durchaus nicht allen) zulässig sind.

Die Modi im einzelnen:

Direkte Adressierung Die ersten 128 RAM-Zellen im internen Speicherbereich an den Adressen 00h .. 7fh sowie die Special Function Register im Bereich 80h .. 0ffh sind direkt adres-sierbar, d.h., die Adresse der Speicherzelle kann als Zahlenwert oder - je nach As-sembler - symbolisch im Befehl eingesetzt werden. Da dieser Adressbereich mittels eines Bytes adressiert werden kann, ist in diesem Fall auch die eingetragene Adresse ein Byte groß.

Page 72: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

68 Embedded Systems Engineering 1

Sprungbefehle adressieren natürlich den vom Datenspeicher getrennten Codespei-cher. Da die 8031/51-CPU 64 KByte Codespeicherraum zur Verfügung hat, muss eine direkte Adressierung bei Sprungbefehlen (Sprungzieladresse) 2 Bytes lang sein, wie dies z.B. beim LJMP-Befehl der Fall ist.

Indirekte Adressierung Bei einer indirekten Adressierungsform trägt ein Register immer das eigentliche Zugriffsziel, also die Adresse. Im Assemblerbefehl selbst wird dann nicht die Adresse, sondern dieses Zugriffsregister eingetragen, so dass erst im Programmab-lauf die effektive Zugriffsadresse durch den Registerinhalt festgelegt ist.

Für solche indirekten Zugriffe sind die Register R0, R1 und das DPTR geeignet. R0 und R1 tragen jeweils eine 8-Bit Adresse, sind also für die indirekte Adres-sierung des internen RAM-Speichers (128 bis 256 Bytes, je nach Controller-Stufe) bzw. eines externen, in den ersten 256 Bytes gelegenen Datenspeichers geeignet. Die Notation erfolgt über

@Ri,

um vom Zugriff auf den Registerinhalt Ri selbst zu unterscheiden.

Zugriffe auf den vollen Datenbereich von 64 KByte können ausschließlich via DPTR erfolgen, das eine 16-Bit Adresse trägt. Auch hier ist die Notation wieder mittels '@' notwendig, so dass ein Datenzugriff auf das externe RAM mittels des Assemblerbefehls

MOVX A, @DPTR

veranlasst wird.

Unmittelbare Adressierung (Immediate) Eine Programmkonstante wird – siehe auch Kapitel 4 – direkt im Programmspei-cher hinterlegt und ist somit Bestandteil des Programmcodes. Diese Zugriffsform, bei der also keine Datenspeicherzelle gelesen wird, heißt unmittelbar, da sich der Wert unmittelbar ergibt.

In Assembler wird dafür die Notation

#Konstante

zur Unterscheidung von der direkten Adressierung notwendig; In 8031/51-Syste-men kann die Konstante bis zu 8-Bit (dezimal 0 .. 255) groß sein.

Relative Adressierung Für Sprungbefehle, insbesondere in Schleifen, ist eine absolute, auf 16-Bit ausge-legte Adressierung nicht immer notwendig, so dass – vom Sprungstart aus gesehen – eine kurze, aber relative Sprungdistanz platz- und zeitsparender ist. Eine kurze, absolute Adressierung hätte hier wenig Sinn, da sich diese nur auf die ersten 256 Bytes des Codespeichers beziehen könnte.

Page 73: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

5 Einführung in die Assemblersyntax der 8051-CPU 69

Anstelle dessen wird die relative, besser PC-relative Adressierung eingeführt. Um den momentanen Wert des Program Counters kann damit um bis zu +127 oder -128 Bytes gesprungen werden, wobei die Berechnung des richtigen (relativen) Sprungwerts zumeist das Assemblerprogramm bemüht werden sollte. Ein Befehl, der diese Adressierung nutzt, ist

SJMP Schleife

Indirekte, indizierte Adressierung Bei dieser komplexesten Adressierungsform schließlich wird ein Basisregister und ein zweites, Index genanntes Register benötigt. Während das Basisregister z.B. die Zugriffsbasis, also ein Array-Beginn vorgibt, kann der (Zugriffs-) Offset im In-dexregister, natürlich variabel, stehen.

Ein Beispiel hierzu:

MOVC A, @A+DPTR

lädt in den Akkumulator den Inhalt der Code-Adresse, auf die A und DPTR mitein-ander addiert zeigen.

5.5 Die Assemblernotation für die 8051-CPU

Die 8031/51-CPU bietet sieben Gruppen von Assemblerbefehlen, die in den fol-genden Abschnitten behandelt werden sollen: Transferbefehle, Bitverarbeitungs-befehle, Logische Verknüpfungen, Arithmetische Befehle, Sprungbefehle, Unter-programmbefehle und sonstige Befehle.

Alle Befehle haben eine einheitliche Syntaxgrundstruktur:

Befehls-Mnenomic Ziel [, Quelle] wobei unäre Befehle natürlich nur das Ziel angeben.

5.5.1 Transferbefehle In der Gruppe der Transferbefehle sind folgende Befehle zusammengefasst:

• MOV (Kopie, bezogen auf Register und internen Datenbereich)

• MOVX (Kopie, bezogen auf externen Datenbereich)

• MOVC (Kopie, bezogen auf Codebereich)

• XCH (Austausch Register-Register, Register-direktes RAM, Register- indirektes RAM)

• XCHD (Austausch der niederwertigen Halbbytes von Akkumulator und indirektem RAM)

• CLR (Kopieren einer Null in Akkumulator)

• SWAP (Austausch der Halbbytes im Akkumulator)

Page 74: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

70 Embedded Systems Engineering 1

invon

A

Rr

DPTR

dadr

@Ri

@DPTR@Ri

DATENSP.

CODE

A

Konst.

@A+DPTR@A+PC

Rr DPTR dadr @Ri @DPTR@Ri

Datenspeicher

Konst. @DPTR@PC

Codespeicher

* * * *

* *

* * **

*

*

* * * * *

* *

Tabelle 5.2 Erlaubte Transfer-Adressierungsarten

• PUSH (Kopie einer direkten RAM-Zelle auf Stack)

• POP (Kopie des Stack-Inhalt in direkte RAM-Zelle)

Für die Kopie-Befehle MOV, MOVX und MOVC (und nur für diese) gilt die in Tabelle 5.2 gegebene Aufstellung für die Gültigkeit der Adressierungsformen.

5.5.2 Bitverarbeitungsbefehle Der 8031/51 bietet die Möglichkeit, Einzelbit zu adressieren und zu manipulieren. Dies unterscheidet ihn in erheblicher Weise von nahezu allen anderen Prozessoren und bietet dem Programmierer die Möglichkeit, bestimmte Programme zur Hard-waremanipulation sehr effizient zu schreiben.

Andererseits sollte bedacht werden, dass die Anzahl der Speicherstellen, die unmit-telbar bitadressierbar sind sehr begrenzt ist, und zwar auf maximal 256 Bits, also 32 Bytes. Von diesen 256 Bits sind 128 im internen RAM an der Byteadressen 20h bis 2fh, die übrigen an den durch 8 teilbaren Adressen im Bereich der Special Function Register (soweit in der jeweiligen Controllerarchitektur vorhanden) ver-teilt.

Die (Bit-)Adressen der ersten 128 Bits berechnen sich durch

Bitadresse = (BYTE-Adresse - 20h) * 8 + Bitstelle im Byte,

Page 75: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

5 Einführung in die Assemblersyntax der 8051-CPU 71

was nichts anderes bedeutet, als dass die Bits durchnumeriert wurden.

Im SFR-Bereich gilt ähnliches, nur beginnt die Weiternummerierung natürlich mit 80h, so dass hier

Bitadresse = SFR-Adresse + Bitstelle im Byte

gilt. Bitte beachten Sie, dass dieser Zugriff nur für SFR-Adressen mit durch 8 teil-barer Adresse gilt, und dass beim 8031/51 davon 11 Byte-Adressen belegt sind.

Die Bitmanipulationsbefehle, die zur Verfügung stehen, sind dann:

• CLR für Löschen eines Bits

• SETB für Setzen eines Bits

• CPL für Komplementbildung eines Bits

• ANL für das logische UND

• ORL für das logische ODER und

• MOV für Kopieren eines Bits

Die Adressierungen sind teilweise neu: Die unären Befehle CLR, SETB und CPL wirken entweder auf das Carry-Bit, adressiert mit 'C' (also z.B. CLR C), oder auf direkt zu adressierende Bits, siehe oben.

Die übrigen Befehle benötigen 2 Operanden, wobei einer jeweils das Carry-Bit darstellt, der andere eine direkt adressierbare Bitstelle. ANL und ORL haben dabei als Ziel immer das Carry-Bit, allerdings können sie den Inhalt der Bitstelle auch invertiert, z.B. ANL C, /35h, angeben. MOV kann als Ziel sowohl das Carry-Bit als das RAM-Bit haben, beherrscht aber die Invertierung nicht.

5.5.3 Befehle zur logischen Verknüpfung Als Befehle zur logischen Verarbeitung können

• das logische UND via ANL ,

• das logische ODER via ORL ,

• das logische EXKLUSIV-ODER via XRL ,

• das Einer-Komplement via CPL ,

• der Rotationsbefehl links RL ,

• der Rotationsbefehl links mit Carry RLC ,

• der Rotationsbefehl rechts RR und

• der Rotationsbefehl rechts mit Carry RRC

angewendet werden.

Die unären Befehle CPL, RL, RLC, RR und RRC wirken dabei ausschließlich auf den Akkumulator. Für die übrigen drei Befehle, ANL, ORL und XRL gelten die Adressierungen:

Page 76: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

72 Embedded Systems Engineering 1

• Ziel = Akkumulator, dann kann die Quelle ein Register Rn, direktes oder indirektes RAM (nicht extern!) oder eine Konstante sein,

• Ziel = direkt adressierbares RAM, dann kann die Quelle der Akkumulator oder eine Konstante sein

5.5.4 Arithmetische Verarbeitungsbefehle Die Arithmetik in den Prozessorbefehlen wurde bei der8031/51-Architektur durch Befehle zur Addition, Subtraktion, Multiplikation und Division sowie zum Inkre-ment, Dekrement und zur Justierung bei BCD-Zahlen implementiert.

Im einzelnen gibt es die arithmetischen Befehle

• Addition ohne Berücksichtigung des Carrys ADD

• Addition mit Berücksichtigung des Carrys ADDC

• Subtraktion mit Berücksichtigung des Carrys (Borrow) SUBB

• Multiplikation MUL

• Division DIV

• Inkrement eines Registers oder Speicherzelle INC

• Dekrement eines Registers oder Speicherzelle DEC und

• Dezimale Justitierung (Decimal Adjust) DA.

Zunächst fällt auf, dass ein Subtraktion ohne Borrow des Carry-Flags nicht vorge-sehen ist. Dies bedeutet, dass vor jeder ersten Subtraktion (bei z.B. 16-Bit-Arith-metik) durch CLR C das Carry-Bit gelöscht werden muss!

Die Adressierungen für die Befehle ADD, ADDC und SUBB beinhalten als Ziel immer den Akkumulator A. Als Quelle sind die Register Rn, direkt oder via Ri (R0, R1) indirekt adressierbare RAM-Speicherzellen sowie Konstanten (#data) erlaubt.

Multiplikation und Division, beide vorzeichenlos ausgeführt, beziehen sich immer auf die Akkumulatoren A und B und müssen folglich immer als MUL AB oder DIV AB angegeben werden. Bei der (8 * 8 Bit) Multiplikation steht das 16-Bit Ergebnis in A (low Byte) und B (high Byte), das Carry-Bit wird gelöscht. Die Division legt das 8-Bit-Ergebnis in A und den Rest in B ab, wobei das Carry-Bit gelöscht und bei Überlauf das Overflow-Bit gesetzt wird; im letzteren Fall, also bei Division durch 0, ist der Inhalt von A und B undefiniert.

Die dezimale Justierung bezieht sich auf den Akkumulator. BCD-Zahlen werden normal binär addiert oder subtrahiert und können dann wieder durch DA A in das BCD-Format gewandelt werden.

Die unären Befehle Inkrement und Dekrement INC und DEC, auch als Zählbefehle bezeichnet, können Register- oder Speicherinhalte erhöhen bzw. erniedrigen, wo-bei keinerlei Einfluss auf die CY-, AC- oder OV-Bits genommen wird, also auch kein Über-/Unterlauf angezeigt wird. Beide Befehle gestatten als Operanden den

Page 77: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

5 Einführung in die Assemblersyntax der 8051-CPU 73

Akkumulator A, die Register Rn sowie direkt oder via Ri indirekt adressierbare RAM-Speicherzellen; INC (und nur INC!) kann auch DPTR inkrementieren!

5.5.5 Sprungbefehle Sprungbefehle verändern den Inhalt des Program Counters, so dass die CPU den nächsten Befehl nicht mehr an den konsekutiven Stelle im Programmcode, sondern an einer beliebigen anderen lädt und ausführt. Derartige Sprungbefehle lassen sich in zwei Kategorien unterteilen, unbedingte und bedingte Sprungbefehle.

Als unbedingten Sprungbefehle, meist auch als Jumps bezeichnet, gestattet die 8031/51-Architektur die Benutzung der Befehle

• Absolute Jump AJMP

• Long Jump LJMP

• Short Jump SJMP und

• Jump indirect relative JMP,

die sich durch Sprungweite und Adressierungsart unterscheiden.

AJMP bietet ein Springen innerhalb des aktuellen 2 KByte Blocks, in dem sich die CPU befindet. Dieser Befehl belässt die Adressbits A11 bis A15 im Program Counter und ersetzt die anderen Bits ohne jeden Übertrag durch das Sprungziel. Diese als adr11 bezeichnete Adressierungsform gehört zu den direkten Adressen; der Wert wird zumeist durch das Assemblerprogramm bei symbolischer Adres-sierung berechnet, das auch bei Bereichsüberschreitungen warnt. Die Vorteile die-ses Befehls liegen in der 2-Byte-Codierung mit schneller Ausführung in 2 Bus-zyklen.

Mittels LJMP kann in dem kompletten 64 KByte Codesegment gesprungen wer-den. Die Adresse ist dabei als adr16, also 2 Bytes ausgeführt, so dass der Befehl insgesamt 3 Bytes umfasst, allerdings auch in 2 Buszyklen abgearbeitet wird.

SJMP bietet die relative Adressierung unabhängig von Blockgrenzen, indem um -128 oder +127 Bytes gesprungen werden kann. SJMP kann durch AJMP nicht vollständig ersetzt werden!

JMP ist besonders für sogenannte Mehrfachweisungen ausgelegt. Die Adresse, die angesprungen wird, steht im Akkumulator und im Data Pointer Register, so dass die korrekte Form JMP @A+DPTR lautet. In DPTR kann beispielsweise die Grundadresse einer Sprungtabelle gehalten werden, in A dann der Offset innerhalb der Tabelle.

Die bedingten Sprungbefehle, häufig auch als Branch bezeichnet, sind in der 8031/51-Architektur alle mit relativer Adressierung, d.h. mit Sprungzielen im Bereich -128 bis +127 Bytes, ausgeführt. Bei den bedingten Sprüngen gibt es drei Unterkategorien:

• Befehle abhängig vom Inhalt des Akkumulator: JZ, JNZ testen den Akkumula-torinhalt und springen bei 0 bzw. nicht 0

Page 78: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

74 Embedded Systems Engineering 1

• Befehle, die einen Registerinhalt dekrementieren und dann – abhängig vom In-halt des Registers – verzweigen: DJNZ Rn, rel und DJNZ dadr, rel dekremen-tieren zunächst ein Register R0..7 oder eine direkt zugänglich Speicherstelle und verzweigen, wenn das Ergebnis nicht 0 ist.

• Kombinierte Vergleichs- und Sprungbefehle: CJNE A, dadr, rel , CJNE A, #data, rel, CJNE Rn, #data, rel und CJNE @Rn, #data, rel vergleichen zuerst den Akkumulator-, Register- oder indirekten RAM-Inhalt mit dem direkten RAM-Inhalt oder der Konstanten und springen bei Ungleichheit.

5.5.6 Unterprogrammbefehle Unterprogramme werden zumeist durch CALL-Befehle angesprungen und durch Return-Befehle wieder an die der aufrufenden Programmstelle folgende Stelle verlassen. Dies findet seinen Niederschlag in der 8031/51-Architektur durch fol-gende Befehle:

• LCALL adr16 für Unterprogrammaufrufe innerhalb des gesamten 64 KByte großen Adressraums

• ACALL adr11 für Unterprogrammaufrufe innerhalb des aktuellen 2 KByte Blocks

• RET für die Rückkehr aus dem Unterprogramm

• RETI für die Rückkehr von Interrupt-Service-Routinen.

Unterprogramme nutzen den Stack für die Speicherung der Rückkehradresse. Dies geschieht so, dass der Stackpointer, ein SFR an der Adresse 81h, zunächst inkre-mentiert wird, und an die Stelle im RAM, auf die er (8-Bit-Pointer!) dann zeigt, der Program Counter Inhalt als 2 Bytes kopiert, bevor dieser durch den Unterpro-grammaufruf überschrieben wird. Für einen korrekten Ablauf ist die richtige Ein-stellung des Stackpointers also unumgänglich.

Der SP-Wert, den dieser nach einem Hardware-Reset einnimmt, liegt bei 07; er ist historisch begründet (8048-Architektur) und für die 8031/51-Architektur wenig geeignet, da hier Registerbanks liegen. Mittels des Befehls

MOV SP, #47

beispielsweise setzen Sie den Stackpointer auf einen günstigeren Wert.

Der RET-Befehl kopiert die Rücksprungsadresse vom Stack (Achtung, SP und Stackinhalt dürfen beim Rücksprung nicht verändert sein!) in den Program Counter zurück. Gleiches gilt für den RETI-Befehl, wobei zusätzlich noch interne Interrupt-Flags rückgesetzt werden.

5.5.7 Sonstige Befehle Die Gruppe der sonstigen Befehle ist beim 8031/8051 recht klein und umfasst nur einen, 1 Byte langen und einen Buszyklus einnehmenden Befehl:

Page 79: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

5 Einführung in die Assemblersyntax der 8051-CPU 75

NOP (No Operation)

Der Sinn dieses Befehls liegt in der Veränderung der Ablaufdauer eines Pro-gramms, also zum Beispiel im Schaffen von Schleifen mit einer bestimmten Laufzeit.

Page 80: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs

[9] Messmer, H.-P.: PC-Hardwarebuch. Addison Wesley Publishing Company, Bonn, 1993

[10] Intel Corporation: Microprocessor and Peripheral Handbook, Vol. I und II

6.1 Einleitung und Unterteilung

Die so genannten Peripheriebausteine, die sich gemäß dem klassischen Schema des von-Neumann-Rechners im Ein- und Ausgabebereich befinden, sind für die individuelle Gestaltung eines Computersystems von großer Wichtigkeit. Der Unterschied im Umgang mit Speicherbausteinen einerseits und der Ein- und Ausgabe andererseits macht sich dadurch bemerkbar, dass Speicherbausteine bzw. der Speicher selbst zwar ein eigenständiger, aber in sich abgeschlossener Teil mit Zugang zum bzw. vom Mikroprozessor darstellt.

Peripheriebausteine hingegen schaffen Schnittstellen oder Interfaces zwischen dem Mikroprozessor einerseits und einer (fast) beliebigen Außenwelt andererseits mit eigenständigem Verhalten, anderen Geschwindigkeiten, neuen Signalpegeln oder auch nicht-elektrischen Größen usw.

Peripheriebausteine haben daher die Aufgaben,

• zeitliche Verhaltensweisen und/oder

• Signalgrößen

zwischen Rechnersystem und Außenwelt anzupassen.

Diese Aufgabe ist sehr weit gespannt, womit bereits klargestellt ist, dass es eine große Anzahl an Peripheriebausteinen geben muss. In diesem Kapitel werden Beispiele für serielle und parallele Interfacebausteine ebenso behandelt wie Interrupt Request Controller und Direct Memory Access Controller, deren Einsatz in fast allen Computersystemen der individuellen Gestaltung dient.

6.2 Parallele Interfacebausteine

Stellvertretend für eine Vielzahl von parallelen ICs (letztlich kann auch ein 74xx373 als paralleler Interfacebaustein eingesetzt werden) wird in diesem Kapitel der parallele Input/Output-Baustein (8255, PIO) vorgestellt. Die Wahl fällt nicht zuletzt deswegen auf diese Bausteine, da die Einsatzhäufigkeit gerade dieser ICs in Mikroprozessorsystemen besonders hoch ist. Im Übrigen wurde dieser Baustein bereits im Kapitel 4.5 benutzt.

Page 81: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 77

6.2.1 Der Parallel-Input-Output-Baustein 8255 Bild 6.1 zeigt die Pinkonfiguration des 8255 sowie der dazu kompatiblen 82C55 und 82C55A, Bild 6.2 die interne Blockstruktur:

123456789

1011121314

282726252423222120

1918171615

PA1PA0

PA2PA3

/RD

D5D6D7

PC6

GND

PC5

VCC

/WRRESET

PC7

2930

40393837363534333231

/CS

PC4

A1A0

PC2PC1

PC3

PC0

PB2PB1PB0

PB6PB5

PB7

PB4PB3

PA6PA7

PA5PA4

D3D4

D0D1D2

Bild 6.1: Pinkonfiguration des 8255 (82C55, 82C55A)

Das Interface zum Prozessorsystem wird durch die Anschlüsse D0 bis D7, also dem Datenbus, A1 und A0, zwei Adressbits, so dass 4 interne Adresse ange-sprochen werden können, dem Selektierungssignal /CS, das den 8255 überhaupt aktiv zur Mikroprozessorseite hin schaltet, den Datenbusrichtungsanzeigen /RD und /WR und dem Reset-Signal geschaffen. Eine korrekte Verschaltung mit dem Mikroprozessor wird daher Daten- und Adressbusbits (nahezu) direkt am Mikro-prozessor anschließen, /RD und /WR sowie Reset ebenfalls, während /CS aus den übrigen Adressen des Mikroprozessors generiert werden muss (Adressdekodie-rung).

Die Peripherieseite des 8255 weist drei Ports, A, B und C auf, die zu 2 Gruppen zusammengefasst sind. Prinzipiell lassen sich also 24 I/O-Leitungen, die alle von-einander unabhängige (TTL-)Pegel führen können oder als Inputleitungen externe (digitale) Pegel aufnehmen können, mit dem 8255 betreiben.

Page 82: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

78 Embedded Systems Engineering 1

I/O PA7 bis PA0

GruppeA

Port A(8)

I/O PC7 bis PC4

GruppeA

Port C

(4)(upper)

I/O PC3 bis PC0

GruppeB

Port C

(4)

I/O PB7 bis PB0

GruppeB

Port B

(8)

(lower)

GruppeA

Control

GruppeB

Control

Read/Write

ControlLogic

/RD

Reset

A0

A1

/WR

/CS

D0-D7

InternerDatenbus

Daten-bus

Treiber

Bild 6.2 Blockschaltbild des 8255

Für den/die Softwaretechniker/in ist das Programmiermodell des 8255 ausschlag-gebend, da die dort aufgeführten Register durch die Software angesprochen werden können und den Baustein konfigurieren bzw. In- und Outputs am 8255 sich in diesen Register spiegeln. Die Tabelle 6.1 gibt für die Buskontrollbits A0, A1, /RD, /WR und /CS wieder, welche interne Operation sich im 8255 dahinter verbirgt.

Die den Ports entsprechenden Register enthalten die Ausgabebits (Port konfiguriert als Output) bzw. die Eingabepegel (Port konfiguriert als Input). Die Konfiguration selbst wird im Kontrollregister an der Adresse Basisadresse + 3 eingestellt. Zu diesem Zweck haben die Bits in diesem Kontrollregister spezielle Bedeutungen, die in Bild 6.3 und anschließend erläutert sind:

Page 83: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 79

A0 A1 /RD /WR /CS Operation 0 0 0 1 0 Input von Port A (-> Datenbus) 1 0 0 1 0 Input von Port B (-> Datenbus) 0 1 0 1 0 Input von Port C (-> Datenbus) 1 1 0 1 0 Controllword wird ausgelesen 0 0 1 0 0 Output in Port A (Datenbus -> Port A) 1 0 1 0 0 Output in Port B (Datenbus -.> Port B) 0 1 1 0 0 Output in Port C (Datenbus -> Port C) 1 1 1 0 0 Controllword wird beschrieben X X X X 1 Datenbus in Tristate X X 1 1 0 Datenbus im Tristate

Tabelle 6.1: Operationen im 8255

Soll ein 8255 konfiguriert werden, so muss im Kontrollwort immer Bit 7 gesetzt sein. Wie man weiterhin der Bild 6.3 entnehmen kann, können die Gruppen A und B einzeln in bestimmte Modi geschaltet werden, die zunächst erklärt werden:

Mode 0 stellt den einfachsten Mode dar. Innerhalb dieses Mode werden alle Lei-tungen entweder als Input oder als Output genutzt, die Konfiguration wird dabei durch die Datenbits D4, D3, D1 und D0 bestimmt. Um also als Beispiel beide Gruppen im Mode 0, Port A und Port B als Outputs, Port C als Input zu konfi-gurieren, muss das Steuerwort

10001001b bzw. 89h

in das Register geschrieben werden, etwa in Form der 8086-Assemblersequenz mov dx, 303h mov al, 89h out (dx) ,

wobei natürlich die Basisadresse 300h nur eine Annahme ist.

Mode 1 weicht von diesem einfachen Schema weit ab, da nun diejenigen Leitungen des Port C, die zu der jeweiligen Gruppe (A oder B) gehören, nicht mehr als individuelle I/O-Leitungen genutzt werden, sondern als spezielle Handshakelei-tungen. Mode 1 wird durch die Bitwerte

01 (D6/D5) für die Gruppe A bzw.

1 (D2) für die Gruppe B

erreicht. Der Mode 1 bedeutet für die Gruppe A im Einzelnen:

• Ist D4 = 1 gesetzt (Input-Mode ), so wird PC4 zum /STBA-Signal (STroBe, Input), das bei 'LOW' die Eingangssignale an Port A in einem Zwischenspei-cher speichert ('Latch'). Gleichzeitig wird PC5 zum IBFA-Signal (Input Buffer Full, Output), das solange High anzeigt, bis der Zwischenspeicher für Port A wieder ausgelesen wurde. Bild 6.4 zeigt die Signalverläufe, die ideal zum Über-nehmen von Daten mit einem Handshake-Verfahren geeignet sind.

Page 84: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

80 Embedded Systems Engineering 1

D0D1D3 D2D4D5D7 D6

Port C (lower)1 = Input0 = Output

Port B1 = Input0 = Output

Mode-Selektion0 = Mode 01 = Mode 1

Gruppe B

Port C (upper)1 = Input0 = Output

Port A1 = Input0 = Output

Mode-Selektion00 = Mode 001 = Mode 1

Gruppe A

1X = Mode 2

Mode-Set-Flag1 = aktiv

Bild 6.3 Mode-Definitionsformat im Controlregister

Durch den negativen Impuls an /STB werden die Daten zunächst transparent in das interne Register geschrieben, ab der steigenden Flanke bleiben diese stabil erhalten. Zugleich wird das Signal IBF auf High gesetzt. Ein Lesezugriff (/RD) löscht IBF bei Beendigung und kann zugleich das erneute Übermitteln von Daten signalisieren.

Der INTRA-Ausgang (Interrupt Request, Pin PC3, gehört eigentlich zur Gruppe B) wird auf High gesetzt, wenn /STB und IBF auf high sind und zuvor eine '1' in die Speicherstelle entsprechend dem Bit PC4 geschrieben wurde

Page 85: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 81

(sogenanntes Interrupt-Enable-Bit). INTR kann dann als Interrupt-Quelle agie-ren.

/STB

IBF

INTR

/RD

Daten

Bild 6.4 Signale am 8255 in Mode 1 (Input)

Die übrig bleibenden Outputpins PC6 und PC7 können wie in Mode 0 als beliebige Input/Outputpins konfiguriert und genutzt werden (Konfigurationsbit im Controlregister: D3)

• Im Output-Mode (D4 = 0) wird der Pin PC7 zu /OBFA (Output Buffer Full, Output) und Pin PC6 zu /ACKA (Acknowledge, Input) umkonfiguriert, während nun PC5 und PC4 beliebig sind sowie INTRA auf PC3 bleibt.

/WR

/OBF

INTR

/ACK

Daten (Port)

Bild 6.5: Signale am 8255 in Mode 1 (Output)

Page 86: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

82 Embedded Systems Engineering 1

OBF geht auf den Wert low, wenn die CPU ein Datenbyte in das Port A-Register geschrieben hat, und steigt wieder auf High, wenn das Signal /ACK auf Low geht. Diese Pins lassen sich vorteilhaft mit den Pins /STB und IBF eines zweiten 8255, der in Mode 1 als Input konfiguriert ist, verbinden.

Für Port B gilt entsprechendes, wobei frei konfigurierbare Pins nicht vorhanden sind und sich die verbleibenden Pins so verteilen:

• Im Input-Mode 1 wird PC2 zu /STBB, PC 1 zu IBFB und PC0 zu INTRB. Das Interrupt-Enable-Bit ist nun Bit PC2.

• Im Output-Mode 1 wird PC2 zu /ACKB, PC1 zu /OBFB und PC0 bleibt INTRB.

Der Mode 1 wird als Handshake-Mode zur Datenübertragung eingesetzt.

Der Mode 2 kann nur für Port A unter Verwendung von 5 Leitungen (PC3 bis PC7) des Port C eingerichtet werden. Er dient der Übertragung in bidirektionaler Weise, wird aber aufgrund seiner großen Komplexität in diesem Skript nicht weiter behandelt.

6.2.2 Allgemeine parallele Interfacebausteine Die Benutzung von Latch- oder Register-ICs als Input- oder Output-IC (die Daten-busrichtung ist dabei nicht konfigurierbar, sondern wird im Hardware-Design fest-gelegt!) bietet sich immer dann an, wenn ausschließlich I/Os, die nicht umschaltbar oder konfigurierbar sein sollen, sondern einem von vornherein festgelegten Zweck dienen, eingesetzt werden sollen. Bild 6.6 zeigt einen solchen Aufbau als Output-IC, der bei Selektierung durch die Dekodiereinheit (hier als GAL ausgeführt) einen Low-Impuls erhält. Die Wahl des ICs (74LS574) als Register, dessen Ausgang sich also mit der positiven Flanke am Clock-Pin (Pin 11) entsprechend den Ein-gangsdaten einstellt, bedeutet, dass es bei jedem Schreibzugriff der CPU einen Wechsel am Ende dieses Zyklus geben kann. Voraussetzung ist dazu, dass die Eingangsbits in diesem Moment noch stabil anliegen, so dass eventuelle Laufzeit-bedingungen des Registers nicht verletzt werden.

Die zugehörige Dekodierung im GAL kann beliebig ausgeführt sein; insbesondere können neben den Adressierungssignalen weitere Steuersignale wie /IOW, /WR o.ä. eingesetzt werden. Das Design einer solchen Schnittstelle nach außen obliegt in starkem Maß dem Hardwareingenieur, wobei ebentuelle Timingprobleme in jedem Fall mitberücksichtigt werden sollten.

Page 87: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 83

Q0

Q2Q3Q4

Q1

Q5Q6Q7

D0

D2D3D4

D1

D5D6D7

2

4

67

5

3

89

19

171615

18

141312

1/OE

8vom µP

Clock 11

GAL16V8

74LS574

A0

A2A3A4

A1

A5

...

A6

vom µP

Bild 6.6 Registerbaustein als Output-Port

6.3 Serielle I/O-Systeme: RS232 und RS422

6.3.1 Die Geschichte der RS232-Schnittstelle Serielle Schnittstellen standen am Anfang aller externen Verbindungen bei Com-putern. Eine der vordergründigsten Probleme bestand in der Datenfernübertragung (DFÜ) via Telefonnetz, zu Beginn des Computerzeitalters die einzige Chance des Datenaustausches.

Von einem Netzwerk konnte man an dieser Stelle noch keineswegs sprechen. Bild 6.7 gibt einen exemplarischen Überblick über die Form der Verbindung, die man als Punkt-zu-Punkt-Verbindung mit Wählleitung (oder auch Standleitung) bezeichnet.

Die Bezeichnungen in Bild 6.7 sind auch heute noch üblich; so steht DEE für Daten End-Einrichtung (englisch: DTE, Data Terminal Equipment) und DÜE für Daten-Übertragungs-Einrichtung (englisch: DCE, Data Communication Equip-ment). Sinn dieser Verbindung war die Datenfernübertragung oder auch Datenfern-verarbeitung. Die Übertragung im Übertragungskanal geschah und geschieht zumeist in analoger Form mit modulierten Frequenzen; das DÜE-Gerät wird daher auch oft als Modem (Modulator-Demodulator) bezeichnet.

Page 88: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

84 Embedded Systems Engineering 1

Übertragungs-kanal

DEE DEEDÜE DÜE

Datenverbindung

Datenfernverarbeitung

Bild 6.7: Frühe Form der DFÜ

Die Verbindung zwischen DEE und DÜE wurde als erste genormt, und diese Normung galt zunächst auch nur für diese (unsymmetrische) Verbindung. CCITT benannte die Empfehlungen für die Schnittstellenleitungen V.24, für die elek-trischen Pegel V.28.

Die EIA formulierte später aus einem Teil der V.24/V.28-Empfehlungen seinen Recommended Standard RS232, dessen letzte Revision RS232E genannt wird und den heute üblichen (aber jetzt als EIA/TIA 562 bezeichneten) Standard darstellt.

Zu den V.24-Schnittstellenleitungen gehörten insgesamt 25 Leitungen, dies trotz der Bezeichnung "Serielle Schnittstelle", was sich ausschließlich auf die Form der Datenübertragung bezieht. Der Grund für die ungeheure Vielzahl an "Hilfs-leitungen" ist in der damaligen Technologie zu sehen, wo DEE und DÜE sich gegenseitig durch Hardwaresignale steuern mussten, da der Austausch von Soft-ware-Steuerinformation mangels der Verfügbarkeit von geeigneten Mikroprozes-soren zur Auswertung nicht möglich war.

Die Vielzahl der Schnittstellenleitungen läßt sich in 7 Gruppen einteilen:

• Betriebserde und Rückleiter

• Datenleitungen

• Steuerleitungen

• Meldeleitungen

• Taktleitungen

• Leitungen des Hilfskanals und

• Übergabe analoger Signale

6.3.2 Die RS232-Schnittstelle im Detail In der Zwischenzeit ist eine Teilausrüstung zum eigentlichen Standard geworden, so dass auf eine Darstellung der gesamten Vielfalt verzichtet werden soll. Bild 6.8 zeigt diese Teilausrüstung der V.24-Schnittstellen mit Belegung am 25poligen Submin-D-Stecker (ISO 2110) und am 9poligen Submin-D-Stecker (PC/AT-Norm):

Page 89: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 85

(25:1, 9:-) Schutzerde PG

(25:2, 9:3) Sendedaten TxD

(25:3, 9:2) Empfangsdaten RxD

(25:4, 9:7) Sendeteil einschalten RTS

(25:5, 9:8) Sendebereitschaft CTS

(25:6, 9:6) Betriebsbereitschaft DSR

(25:7, 9:5) Signal-/Betriebserde SG

(25:8, 9:1) Empfangssignalpegel DCD

(25:20, 9:4) DEE betriebsbereit DTR

Bild 6.8: Teilausrüstung V.24-Schnittstelle

Die in Bild 6.8 genannten Abkürzungen haben dabei folgende Bedeutung:

Betriebserde und Rückleiter: • PG (Protective Ground, Schutzerde) Die Schutzerde wird mit dem Gehäuse und dem Schutzleiter der miteinander

gekoppelten Übertragungseinrichtungen DEE und DÜE verbunden. Im 9poligen System entfällt dieser Pin, nicht aber die Funktion durch die Kabelschirmung.

• SG (Signal Ground, Betriebserde) Die Betriebserde liegt auf einem Pegel von 0 Volt und dient für alle Signale als

gemeinsamer Bezugspunkt. Sie muss von der Schutzerde getrennt sein!

Datenleitungen: • TxD (Transmit Data, Sendedaten) Über diese Leitung werden der DÜE die zu übertragenden Daten als bitserieller,

digitaler Datenstrom zugeführt. Die Zuführung ist zumeist asynchron, also ohne zusätzliche Taktleitung, das empfangende Gerät synchronisiert seinen Empfang selbständig. Diese Datenübertragung ist nur möglich, wenn sich die Steuerleitungen RTS und DTR sowie die Meldeleitungen CTS und DSR im EIN-Zustand befinden.

• RxD (Receive Data, Empfangsdaten)

Die DEE empfängt auf gleiche Art die empfangenen Daten aus der DÜE.

Page 90: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

86 Embedded Systems Engineering 1

Steuerleitungen: • RTS (Request To Send, Sendeteil einschalten)

Diese Steuerleitung veranlasst das Modem, das Sendeteil einzuschalten und in diesem Zustand zu verbleiben, solange RTS den Pegel EIN behält. Zum RTS-Signal zugehörig ist die Meldeleitung CTS, so dass dieses Leitungspaar mit gegenseitiger Kopplung zur direkten Rechner-Rechner-Anbindung genutzt werden kann.

• DTR (Data Terminal Ready, DEE betriebsbereit) Der Zustand EIN auf dieser Leitung signalisiert der DÜE, dass die DEE

eingeschaltet und empfangsbereit ist, falls Daten an den Rechner gesendet werden sollen.

Meldeleitungen • CTS (Clear To Send, Sendebereitschaft)

meldet die DÜE via EIN-Zustand auf dieser Leitung an die DEE. RTS/CTS bilden, wie bereits erwähnt ein Leitungspaar.

• DSR (Data Set Ready, Betriebsbereitschaft)

ist eine durchaus vergleichbare Meldeleitung, mit der aber die Verbindung zum Übertragungskanal und die Betriebsbereitschaft (ON-Line) durch den EIN-Zustand signalisiert werden soll.

• DCD (Data Channel Received Line Signal Detector, Empfangssignalpegel) zeigt den Empfangssignalpegel innerhalb gewisser Grenzen durch den EIN-

Zustand an. Werden zwei Rechner ohne Übertragungskanal miteinander gekoppelt, dann soll DCD sofort den Zustand EIN annehmen oder mit dem RTS bzw. DTR-Signal der gegenüberliegenden Seite gekoppelt werden, um sofort den Zustand des verbundenen Kabels anzuzeigen.

Wird die V.24-Schnittstelle als synchrone Schnittstelle betrieben, gehören noch Taktsignale zur Definition. Da dies jedoch unüblich geworden ist, wird an dieser Stelle darauf verzichtet.

Es muss an dieser Stelle nochmals auf die unsymmetrische Definition der V.24-Schnittstelle hingewiesen werden. Die Leitungsbezeichnungen sind für DEE und DÜE identisch, nur bedeutet TxD für die DEE, dass wirklich Daten gesendet werden, während für die DÜE auf dieser Leitung Daten von der DEE empfangen werden. Dies ergibt gewöhnlich Probleme bei der Kopplung zwischen Computer und einem anderen Gerät gemäß RS232, da beide Geräte die "Norm" erfüllen können, ohne dass es sofort zusammenpassen muss.

Page 91: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 87

6.3.3 Elektrische Signalpegel Die Definition der elektrischen Signalpegel beinhaltet die Spannungswerte für die logischen Werte '0' und '1' sowie Festlegungen zu den Geschwindigkeiten, An-stiegs/Abfallraten der Spannungswerte usw.

Gemäß V.28 haben die Spannungswerte auf den Datenleitungen folgende Defi-nition:

U

+15 V

-15 V

+3 V

-3 V

0 V

log. '0'

SPACE

log. '1'

MARK(Ruhezustand)

Übergangsbereich

(logisch undefiniert)t

Bild 6.9: Logikdefinition für Datenleitungen

Ist die Spannung auf einem der Datenleitungen (TxD, RxD) also gegenüber der Betriebserde (SG) um 3 bis 15 Volt (Empfang) bzw. 5 bis 15 Volt (Sendebetrieb) im Betrag unterschiedlich und

• negativ, so liegt eine logische '1' auf der Leitung; dies wird auch MARK genannt und stellt den Ruhezustand dar: hingegen

• positiv, so wird eine logische '0' repräsentiert; dieser Zustand heißt auch SPACE.

Für Signal- und Meldeleitungen gibt es eine eigene Definition:

Ist die Spannung einer Signal- oder Meldeleitung im Betrag 3 bzw. 5 bis 15 Volt größer als die Betriebserde (SG) und

• negativ, so herrscht der AUS-Zustand,

• positiv, so herrscht den EIN-Zustand.

Bild 6.10 stellt dies grafisch dar.

Mit den logischen und physikalischen Pegeln ist noch nichts über die minimale Anstiegsrate (in V/µs), Welligkeit (in % vom Vollausschlag) usw. ausgesagt worden, und in der Tat definieren V.24/V.28 sowie RS232C, RS232D und RS232E keine minimalen bzw. maximalen Werte zu diesen Größen, allerdings zur

Page 92: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

88 Embedded Systems Engineering 1

maximalen Anstiegsrate mit 30 V/µs. Abhilfe schafft an dieser Stelle erst der mit RS232 kompatible neue (1991) Standard EIA RS562, der z.B. eine Mindest-anstiegsrate von 4 V/µs und eine maximale Welligkeit von 5% (bezogen auf den Spannungshub VHigh - VLow) zulässt.

U

+15 V

-15 V

+3 V

-3 V

0 V

EIN-Zustand

t

AUS-Zustand

Übergangsbereich

(undefiniert)

Bild 6.10: Logikdefinition für Steuer- und Meldeleitungen

6.3.4 Synchronisation und Übertragungs-geschwindigkeit

Synchrone Übertragungsverfahren senden einen Takt zu den jeweiligen Datenbits auf einer Extraleitung mit und bieten so jederzeit die Synchronisation zu den Bits.

Asynchrone Verfahren müssen ohne diese zusätzlichen Leitungen auskommen. Um dennoch die gesendeten Zeichen, die ja in einen Bitstrom zerlegt sind, zusammensetzen zu können, werden bestimmte Vorvereinbarungen sowie spezielle Zeichenrahmen notwendig.

Zu den Schnittstellenvereinbarungen zweier gekoppelter Geräte gehören

• Anzahl der Bits pro gesendeten Zeichen

• Übertragungsgeschwindigkeit (Wechselfrequenz) der Bits

• gelegentlich auch spezielle Vereinbarungen, z.B. spätestens nach 5 * logisch '0' wird einmal logisch '1' automatisch dazugegeben (nicht V.24/V.28 bzw. RS232)

Der Zeichenrahmen besteht seinerseits aus zusätzlichen Bits, die also keine Nutzinformationen mehr enthalten. Diese Bits sind

• 1 Start-Bit, das im Wechsel zum Ruhezustand steht (logisch '0'),

Page 93: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 89

• kein oder 1 Paritätsbit, dessen Wert definierbar von den Werten der Datenbits abhängt, und

• 1, 1.5 oder 2 Stop-Bits, die den Zustand logisch '1' innehaben und sofort vom nächsten Start-Bit gefolgt sein können.

Das Paritätsbit wird, wenn es vereinbart wurde, wie folgt bestimmt:

Paritätskontrolle Datenwort Paritätsbit gerade (even) 10011000 1 (zusammen 4 * '1') 11110101 0 (zusammen 6 * '1') ungerade (odd) 10011000 0 (zusammen 3 * '1') 11110101 1 (zusammen 7 * '1')

Das Paritätsbit ergänzt den Datenstrom also so, dass eine gerade oder ungerade Anzahl von Bits, je nach Wunsch, entsteht und dient so der Fehlererkennung (nicht der automatischen Fehlerbehebung).

Der vollständige Bitstrom, der übertragen wird, hat also die Gestalt wie in Bild 6.11 angegeben:

Startbit Paritätsbit

Stopbit

‘1’

‘0’

D0 D3 D7(Ruhezustand)

Bild 6.11 Bitstrom im asynchronen Verfahren (1 Start-, 1 Stoppbit, gerade Parität, 8 Datenbits)

Im asynchronen Verfahren ist die maximale Geschwindigkeit der RS232-Schnitt-stelle auf 20 kBit/s, auch 20 kBaud genannt begrenzt (RS562: 64 kBit/s). Übliche Übertragungsgeschwindigkeiten sind 110 Baud, 300 Baud, 600 Baud, 1.2 kBaud, 2.4 kBaud, 4.8 kBaud, 9.6 kBaud und 19.2 kBaud. In Computern gelegentlich auf-findbare höhere Bitraten von 38.4, 57.6 oder 115.2 kBaud werden gewissermaßen "auf eigene Gefahr" betrieben.

Bei 19200 Bit/s hat ein Bit eine Sendedauer von 52 µs. Der Wirkungsgrad einer bitseriellen Übertragung mit 1 Startbit, 1 Paritätsbit und 1 Stoppbit bei 8 Datenbits beträgt 8/11 = 72,3 % maximal, für die Übertragung von 1 MByte Nutzdaten werden rund 9,5 Minuten Zeit benötigt.

Page 94: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

90 Embedded Systems Engineering 1

6.3.5 Ein IC für den Betrieb einer RS232: Der USART 8251 (Intel, NEC)

Der USART 8251 (Universal Synchronous Asynchronous Receiver/Transmitter) wurde zunächst als Peripheriebaustein für die 8080-, 8085 und später 80x86-Familien konzipiert. Bild 6.12 zeigt die Pin-Belegung, Bild 6.13 das Block-schaltbild des USART.

Die Schnittstelle des 8251 zum Prozessor besteht aus

• D0...D7, dem bidirektionalen 8-Bit-Datenbus,

• /RD, dem low-aktiven Leseeingangssignal,

• /WR, dem entsprechenden Schreibsignal

• C/ /D, den Control-(high)/Daten-(low)Steuerregisterzugang, dieser Pin kann als Adressbit aufgefasst werden,

• dem Reset-Eingang zum Rücksetzen des kompletten Bausteins,

• dem CLK-Eingang, an dem ein Taktsignal zur Erzeugung der internen Vor-gänge liegen muss und

• dem /CS-Eingang zur Bausteinselektierung.

Bild 6.12: PIN-Belegung USART8251

Zur Modemsteuerung besitzt der 8251 2 Ein- und 2 Ausgangsleitungen, die den RS232-Signalen direkt zugeordnet sind:

• /RTS, Request to Send, als Sendeaufforderung, Ausgangssignal,

• /CTS, Clear To Send, Eingangssignal mit Freigabe der Sendedaten,

• /DTR, Data Terminal Ready, Ausgangssignal zur Sendesteuerung und

Page 95: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 91

• /DSR, Data Set Ready, Eingangssignal entsprechend DTR.

Die dritte Signalgruppe dient der Sendesteuerung in Zusammenarbeit mit dem Prozessor:

• TxRDY zeigt den Sendebereitschaftstatus (Transmitter Ready) an und kann an einen Interrupt-Eingang des Mikroprozessors angeschlossen werden. Da ein High-Zustand anzeigt, dass der Sendepuffer frei für das nächste Zeichen ist, wird genau dann ein Interrupt ausgelöst, um z.B. das nächste Zeichen aus einem Sendepuffer holen zu lassen.

• TxE (Transmitter Empty) zeigt an, dass der Sendepuffer leer ist, dass also auch kein Zeichen mehr in der Übertragung befindlich ist. Beide Ausgänge können zur Statusabfrage wie zur IRQ-Erzeugung genutzt werden.

• TxC (Transmitter Clock) ist der Master-Sendetakt, der hier für die Erzeugung der eigentlichen Bitrate bereitgestellt wird.

DatenbusPuffer

Lese/Schreib-Steuer-

MODEMSteuerung

logik

ResetCLKC/ /D/RD/WR

/DTR/DSR

/RTS/CTS

/CS

D0 .. D7

Steuerung

SENDE-Puffer

SENDE-

TxD

TxC

TxE

TxRDY

Steuerung

EMPFANGS-Puffer

RxD

RxC

SYNDET

RxRDYEMPFANGS-

InternerDatenbus

Bild 6.13: Blockstruktur USART8251

Die letzte Gruppe der Pins am 8251 dient der Empfangssteuerung:

Page 96: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

92 Embedded Systems Engineering 1

• RxRDY bedeutet Empfänger bereit (Receiver Ready). Dieser Ausgang kann wie TxRDY als Interruptsignal oder zur Statusabfrage genutzt werden, da es anzeigt, dass ein Zeichen empfangen wurde und abgeholt werden sollte.

• RxC stellt wie TxC den Empfangstakt bereit. In asynchronen Operationen werden TxC und RxC häufig gemeinsam an einen Takt auf dem Pro-zessorboard, z.B. 19.2 kHz , angeschlossen.

C/ /D /RD /WR /CS Bedeutung0 0 1 0 Empfangsdatenregister aus 8251 auslesen0 1 0 0 Sendedaten in 8251 Sendedatenregister schreiben1 0 1 0 Statuswort aus 8251 lesen1 1 0 0 Steuerwort in Steuerregister 8251 schreibenX X X 1 Datenbus hochohmig

Tabelle 6.2: Erreichen der internen Register 8251

Das Verhalten des USART wird über interne Register gesteuert bzw. ausgelesen. Die Tabelle 6.2 gibt die Möglichkeiten zur Erreichung dieser Register an.

Nach einem Reset erwartet der USART 8251 die Initialisierung zunächst durch ein Betriebsartenwort , anschließend durch ein Kommandowort. Beide Bytes werden an die gleiche Stelle im 8251 geschrieben (Statuswort), daher ist die Reihenfolge zu beachten. Das Betriebsartenwort kann nur als erstes Byte nach einem Reset (Hardware-Reset oder Kommandowort mit D6 = 1) geschrieben werden, während das Kommandowort jederzeit neu ladbar ist.

Das Betriebswort wird bitweise zusammengestellt (Bild 6.14). Es bedeuten hierbei:

D7

S2

D6

S1

D5

EP

D4

PEN

D3

L2

D2

L1

D1

B2

D0

B1

Bild 6.14: Betriebsartenwort 8251

B1/B2: Baudratenfaktor: Die extern anliegende Frequenz wird durch 1 (B1 = 1, B2 = 0), 16 (B1 = 0, B2 = 1) oder 64 (B1 = 1, B2 = 1) geteilt.

L1/L2: Zeichenlänge: Die auszusenden Zeichen bestehen aus 5 Bits (L2, L1 = 00), 6 Bits (01), 7 Bits (10) oder 8 Bits (11)

PEN: Parity Enable: PEN = 1, Paritätsbit wird eingebaut, PEN = 0 Übertragung ohne Parität

EP: Erzeugte/überprüfte Parität: EP = 1, Parität gerade wird erzeugt oder über-prüft, EP = 0, dann ungerade Parität.

S1/S2 legen die Anzahl der Stop-Bits fest: S2/S1 = 01 bedeuten 1 Stoppbit, 10 1.5 Stoppbits und 11 2 Stoppbits.

Page 97: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 93

Das Kommandowort wird ebenfalls bitweise zusammengestellt, Bild 6.15 gibt für den schreibenden, Bild 6.16 für den lesenden Zugriff auf die gleiche Adresse (Statuswort) Aufschluss über die Zusammenstellung.

D7

EH

D6

IR

D5

RTS

D4

ER

D3

SBRK

D2

RxE

D1

DTR

D0

TxEN

Bild 6.15: Kommandowort 8251 (schreibend)

D7

DSR

D6

SYNDET

D5

FE

D4

OE

D3

PE

D2

TxE

D1

RxRDY

D0

TxRDY

Bild 6.16: Statuswort 8251 (lesend)

TxEN gibt die Aussendung generell frei; Voraussetzung für eine Transmission ist, dass /CTS = Low gilt.

DTR steuert den Ausgangspin /DTR: DTR = 1, /DTR = Low und umgekehrt.

RxE = 1 gibt den Empfang von Bitströmen frei, RxE = 0 sperrt dies.

SBRK = 0 stellt den Normalbetrieb dar, der Ausgang TxD entspricht den Sendedaten oder MARK, falls Sendepause ist. SBRK = 1 setzt TxD auf SPACE (logisch '0').

ER (Error Reset = 1 setzt alle aufgelaufenen Fehlerflags im Statusregister zurück.

RTS steuert den Ausgang /RTS: RTS = 1, /RTS = Low und umgekehrt.

IR = 1 (interner Reset) setzt den Baustein intern in den Resetzustand (inaktiv), so dass eine komplette Neuinitialisierung begonnen werden kann.

EH (Enter Hunt Mode) dient nur dem hier nicht betrachteten Synchronbetrieb.

Im Statusregister werden die Bits wie folgt interpretiert:

TxRDY, RxRDY und TxE sind die Interruptflags, die direkt mit den äußeren Pins gleichen Namens korrespondieren.

PE (Parity Error) = 1 zeigt bei Paritätskontrolle an, dass eine Bitfolge mit Paritätsfehler empfangen wurde (Fehlerdetektierung).

OE = 1 (Overflow Error) zeigt an, dass ein Zeichen empfangen wurde, ohne dass das vorhergehende bereits abgeholt war. Das erste Zeichen ist damit verlorengegangen.

FE = 1 (Frame Error) zeigt Rahmen-Fehler, also fehlerhafte Stopbits an. Alle Fehlerbits können mit ER = 1 im Kontrollwort wieder rückgesetzt werden.

DSR spiegelt den Zustand am Eingangspin /DSR, also in umgekehrter Logik, wider.

Page 98: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

94 Embedded Systems Engineering 1

Zum Schluss dieser ausführlichen Betrachtungen zum 8251 sei noch gesagt, dass es durchaus modernere Bausteine gibt, beispielsweise den NS16451 mit zwei seriellen Schnittstellen. Die Baudratenerzeugung wird häufig auch mit einer Fre-quenz (bsp. 1.8432 MHz) und einem vielfachen internen Teiler geschehen, so dass der Leser auf andere Bausteine hingewiesen sei.

6.4 Der Timer-Baustein 8253/8254

Ein Timer stellt einen Taktzähler dar, der unter bestimmten Vorgaben (interne Konfiguration oder externe Anschlüsse) zählabhängige Signale nach außen geben kann. Faßt man den Timerbaustein so auf, dann dient er nicht als Interfacebaustein, sondern als reiner Hilfsbaustein, der zeitliche Prägungen unabhängig von der Ausführungsgeschwindigkeit der CPU in das Computersystem bringt.

Dennoch gehören Timer-ICs in die Mess- und Prozesstechnik. Der Grund dafür liegt darin, dass bei allen Prozessvorgängen nicht nur die (rechnerische) Richtig-keit der Werte wichtig ist, sondern zugleich (z.T. sogar höher zu bewerten) die Rechtzeitigkeit der Werte, der Berechnungen usw.

123456789

101112 13

14

24232221201918171615

D2D3

D1D0

D4D5D6D7

GND

/WR

OUT 0

/RD

CLK 0

VCC

/CS

CLK 2

A1A0

OUT 2GATE 2CLK 1OUT 1GATE 1

GATE 0

Bild 6.17: PIN-Belegung Timer-IC 8253/54

Einer der gängigen Bausteine zur zeitlichen Steuerung von Signalen ist der IC 8253 bzw. 8254. Beide ICs sind pinkompatibel und unterscheiden sich nur in dem inneren Aufbau, wobei der 8254 alle Funktionen des 8253 beherrscht und zugleich etwas komfortabler ist. Bild 6.17 zeigt das Pinout des 8253/54.

An der Pinbelegung läßt sich bereits ablesen, dass es sich wiederum um einen 8-Bit-Baustein handelt (der Datenbus ist 8 Bit breit), der intern 4 Register besitzt (2 Adressbits) und über eine Chip-Select-Leitung, eine Read- und eine Write-Leitung (alle low aktiv) angesteuert wird. Diese Pins müssen mit entsprechenden Signalen

Page 99: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 95

der CPU oder des Bussystems verschaltet werden, wie in Kapitel 7 beispielhaft dargestellt wird.

Die externen Signale OUT x, GATE x und CLK x beeinflussen die Zählung des 8253/54. GATE x muss auf high sein, damit überhaupt eine Zählung startet; OUT x signalisiert zumeist Zählereignisse (s.u.) entsprechend den einzelnen Modi, während CLK x den eigentlichen Zähltakt darstellt: Der 8253/54 zählt den internen Zählerstand mit dem anliegenden Takt bis auf 0.

Die 4 internen Register haben eine spezielle Bedeutung; in Bild 6.18 ist ein Block-schaltbild für den 8253 angegeben, Tabelle 6.3 und die folgenden Abschnitte erläutern die Bedeutung der Register und die Konfigurationen des Timer-ICs:

Counter

#0

CLK 0

OUT 0

GATE 0

Counter

#1

CLK 1

OUT 1

GATE 1

Counter

#2

CLK 2

OUT 2

GATE 2Control

Word

Reg.

DataBus

Read/

LogicWrite

Buffer8

D0 - D7

Interner Datenbus

/RD

/WR

A0

A1

/CS

Bild 6.18: Blockschaltbild des 8253/54

Der Timerbaustein wird generell über Schreiboperationen (zumeist im I/O-Bereich) konfiguriert, und zwar für jeden der drei Timer unabhängig voneinander. Dies bedeutet, dass in das Mode-Register (Adresse + 3) für jeden der drei Timer individuelle Konfigurationsbytes geschrieben werden müssen. Die Konfigurations-bits sind im Einzelnen:

Page 100: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

96 Embedded Systems Engineering 1

/CS /RD /WR A1 A0 Operation 0 1 0 0 0 Laden in Counter #00 1 0 0 1 Laden in Counter #10 1 0 1 0 Laden in Counter #20 1 0 1 1 Laden in Mode Register0 0 1 0 0 Lesen Counter #00 0 1 0 1 Lesen Counter #10 0 1 1 0 Lesen Counter #20 0 1 1 1 Keine Operation, Tristate (!)1 X X X X Keine Operation, Tristate0 1 1 X X Keine Operation, Tristate

Tabelle 6.3: Übersicht der internen Register und Zugänge 8253/54

SC1

D7

SC0 RL1 RL0 M2 M1 M0 BCD

D0

Bild 6.19: Konfigurationsbits

SC0 und SC1 (Select Counter) sprechen den gewünschten Timer an; '00' entspricht Timer 0 usw., die Kombination '11' ist nicht erlaubt.

RL0 und RL1 (Read/Load) bestimmen das Zugriffsformat zu dem angewählten Timer bzw. zu seinem momentanen Speicherinhalt. Hierbei bedeuten:

RL1 RL0 Bedeutung 0 0 Momentaner Zählerstand zwischenspeichern 0 1 Lesen/schreiben nur des unteren Bytes 1 0 Lesen/schreiben nur des oberen Bytes 1 1 Lesen/schreiben zuerst des unteren (LSB), dann des oberen Bytes (MSB)

Die Zwischenspeicherungsoperation muss näher erläutert werden, sie wird auch Grundlage des Beispiels im Anschluss sein: Soll ein Timer ausgelesen werden, so muss zunächst bestimmt werden, in welchem Format (1 Byte, 2 Bytes) dies geschehen soll. Unmittelbar zum Zeitpunkt des Auslesens kann dann der momentane Zählerstand durch die genannte Latch- oder Zwischenspeicherope-ration festgehalten werden (der Zähler läuft allerdings weiter!), nur müssen jetzt die Zählerstände auch durch ein oder zwei Leseoperationen ausgelesen werden!

Die Modebits M2, M1 und M0 schalten den angesprochenen Zähler in einen der 6 Modi:

M2 M1 M0 Mode-#

Page 101: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 97

0 0 0 Mode 0: (Interrupt on Terminal Count) OUT x ist zunächst 0; läuft der Timer ab, so geht OUT x auf High, verbleibt dort bis zum Neuladen des Timers, während der Timer stoppt

0 0 1 Mode 1: (Programmable One-Shot) OUT x nimmt den Wert low an, falls eine positive Flanke an GATE x den Zähler startet. Bei Ablauf geht OUT x wieder auf high

X 1 0 Mode 2: (Rate Generator) OUT x geht für eine Taktperiode an CLK x auf low, anschließend wieder auf high. Der Zähler zählt auf 0, wird automatisch neu mit dem bisherigen Wert geladen, und das Verfahren fängt von vorne an. Ist GATE x allerdings low, dann wird alles gesperrt.

Dieser Mode ist sehr wichtig für Messwertaufnahmen usw., da er ein periodisches Timing erzeugt.

X 1 1 Mode 3: (Square Wave Rate Generator) Dieser Mode entspricht Mode 2 bis auf das Verhalten von OUT x, der nicht nur eine Taktperiode, sondern die Hälfte aller Taktperioden auf dem Wert low, die andere Hälfte auf high verbleibt (Frequenzgenerator mit Rechteckfunk-tion).

1 0 0 Mode 4: (Software Triggered Strobe) OUT x ist zu-nächst high und nimmt für eine Taktperiode an Out x den Wert low an, wenn der Zähler abläuft. Der Zähler läuft, wenn Gate x high Level hat.

1 0 1 Mode 5 (Hardware Triggered Strobe) Dieser Mode läuft wie Mode 4 ab mit dem Unterschied, dass der Zähl-vorgang nur mit einer positiven Flanke an Gate x gestartet werden kann.

BCD schließlich gibt das Zählformat (0 = binär, 1 = binär codierte Dezimalzahlen) an.

Die Modi des 8253/54 wirken recht vielseitig und sind daher auch komplex ein-zustellen. Wie bereits erwähnt, stellt Mode 2 für Messwerterfassung den wich-tigsten Mode dar,

An der Tabelle 6.3 zum Zugriff auf die Register kann man ersehen, dass das Mode-register lesend nicht erreicht werden kann. Dies ist auch vernünftig, da sich hinter der einen Adresse 3 Moderegister (für die 3 Zähler) verbergen, die auf so einfache Art sicherlich nicht lesend zugreifbar sein können.

Im 8253 sind die Modi der einzelnen Timer auch tatsächlich nicht aus dem IC heraus feststellbar und müssen im Programm selbst zwischengespeichert werden, wenn man später Informationen darüber benötigt. Die wesentliche Erweiterung im

Page 102: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

98 Embedded Systems Engineering 1

8254 (82C54 usw.) besteht nun darin, dass hier Statusinformationen erhältlich sind, wenn auch nicht durch direktes Auslesen des Moderegisters, sondern in einem speziellen Verfahren:

Zunächst wird ein für den 8253 nicht zugelassenes Kommandowort in dem in Bild 6.20 abgebildeten Format in das Moderegister geschrieben; dieses Kommando nennt man Read-Back-Kommando. Im 8253 war die Bitkombination 11 für D7/D6 nicht zulässig!

1

D7

/COUNT /STATUS CNT2 CNT1 CNT0 0

D0

1

Bild 6.20: Konfigurationsbits für Read-Back-Kommando 8254

CNT0 bis CNT2 bedeuten dabei die Zählernummer, bei gesetzter 1 wird also der Zustand des Zählers zwischengespeichert, wobei gleichzeitig mehrere (oder auch alle) Zähler ansprechbar sind.

/COUNT = 0 bewirkt eine Zwischenspeicherung des Zählerzustands, /STATUS = 0 eine Zwischenspeicherung des Statusregisters. Beide Zwischenspeicherungen sind zugleich möglich, an der Adresse des jeweiligen Zählers erhält das auslesende Programm dann zuerst das Statusbyte, dessen Bits im folgenden erklärt sind, dann ein oder zwei Bytes des momentanen Zählerstands, je nachdem, wie programmiert worden war.

Es sollte beachtet werden, dass das Bit D0 immer zu 0 gewählt wird, da spätere Erweiterungen eventuell auf D0 = 1 anders reagieren könnten (Aufwärtskom-patibilität).

Output

D7

RW1 M2 M0 BCDM1

D0

NullCount

RW0

Bild 6.21: Statusbits für 8254

Das Output -Bit zeigt den Status des OUT x-Pins am 8254 an, 1 bedeutet OUT x-Pin ist high, 0 entsprechend 0. Null Count = 0 bedeutet, dass kein Zählerstand zur Verfügung steht, weil z.B. in einem Modus noch kein Start stattgefunden hat. 1 bedeutet, dass ein Zählerstand ausgelesen werden kann.

RW1, RW0, M2 bis M0 und BCD entsprechen exakt den Bits, die im Mode-kommando für den jeweiligen Zähler gesetzt wurden.

Zum Abschluss dieses Abschnitts soll in einem Beispiel erläutert werden, was ein Assemblerprogramm in der Programmierung des 8253/54 zu beachten hat:

; Es wird angenommen, dass sich der Timer 8254 an d er

Page 103: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 99

; Basisadresse 031Ch im PC ansprechen lässt.

; Ferner soll der Eingangstakt an allen CLK x-Eingä ngen 1

; MHz betragen.

; Im ersten Vorgang wird das Statusregistern des 82 54 so

; geladen, dass periodisch alle 40 Millisekunden ei n Impuls

; an OUT 0 (Hier wird nur Timer 0 programmiert) erz eugt

; werden wird.

mov bx, 031Ch ; in bx steht ab sofort immer die ; Grundadresse

mov dx, bx ; Zugriffsregister ist aber immer dx!

add dx, 3 ; Moderegister: +3

mov al, 00110100b ; bedeutet: Timer 0 in Mode 2, bi närer ; Zähler, Laden/Speichern von 2 Bytes, ; dabei LSB zuerst

out (dx), al ; Jetzt wird alles gesetzt

mov ax, 40000 ; 40000 Taktzyklen a 1 MHz sind für 4 0 ; Millisekunden notwendig

mov dx, bx ; Grundadresse kopiert

out (dx), al ; LSB zuerst ausgeben

mov al, ah ; MSB vorbereiten

out (dx), al ; und ausgeben: Timer startet!

.....

; Jetzt soll der Status und der Zählerstand ausgele sen ; werden, wobei dies nur beim 8254 möglich ist:

mov dx, bx ; wieder Kopie Grundadresse

add dx, 3 ; +3 für Mode-Register

mov al, 11001100b ; bedeutet: Zwischenspeichern Sta tus und ; Count des Timer 0

out (dx), al ; jetzt wird zwischengespeichert

mov dx, bx ; Vorbereiten zum Auslesen

in al, (dx) ; 1. Byte: Status

mov cl, al ; wird zwischengespeichert

in al, (dx) ; 2. Byte: Zählerstand LSB

mov ch, al ; nur zwischenspeichern

in al, (dx) ; 3. Byte: Zählerstand MSB

mov ah, al ; und in AX zusammenbasteln

mov al, ch ;

; jetzt könnte die weitere Auswertung beginnen.

Page 104: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

100 Embedded Systems Engineering 1

Soweit zu diesem kurzen Beispiel der 8254-Programmierung

6.5 Interrupt-Request-Controller

In Embedded Systems (eingebetteten Systemen) ist der Rechner nicht zentrales oder gar einziges Element des Systems, sondern er dient der Funktionalität eines Geräts und ist nach außen hin oft nicht direkt wahrnehmbar. Für derartige Rechner, die fast ausschließlich auf Mikrocontrollern (oder auf digitalen Signalprozessoren, DSP) beruhen, ist eine Kopplung des Rechners mit der Außenwelt unerlässlich.

Diese Kopplung kann prinzipiell auf zwei Arten erfolgen:

• Der Prozessor fragt zyklisch die Eingangssignale ab, die ihn erreichen und bestimmte Zustände signalisieren können (sog. Polling).

• Der Prozessor wird durch spezielle Signale alarmiert, d.h., bei Auftreten von Pegeln oder Flanken an diesen Signalen versetzt den Prozessor in einen besonderen Betriebszustand.

Die Signale zur besonderen Kommunikation mit dem Prozessor werden Interrupt-Requests (abk.: IRQ) genannt. Sie entstammen der Umgebung, in die der Rechner eingebettet ist, und teilen einen bestimmten Zustand asynchron zum normalen Programmablauf mit. Die Reaktion des Mikroprozessors besteht dabei in dem Verlassen des bisherigen Programmablaufs und dem Sprung in eine besondere Routine, im folgenden Interrupt-Service-Routine (ISR) genannt.

Der Inhalt der ISR ist sehr stark von der den Mikroprozessor umgebenden Peri-pherie und natürlich dem Verursacher des IRQs abhängig. Hier wird vom System-designer erwartet, dass er/sie ein den Anforderungen entsprechendes System zusammenstellt: Viele Anforderungen erfordern Hardwareunterstützung, wenige (oder ’unwichtige‘) können in Software, ggf. sogar mit Polling bearbeitet werden. Hier beginnt das Gebiet des Hardware/Software Co-Design.

Die konkrete Reaktion des Mikroprozessorsystems auf bestimmte Ausnahmezu-stände kann im Allgemeinen nicht vom Hersteller vorherbestimmt werden, der Pro-zessor leitet nur die Reaktion ein, wenn das Signal auftritt, und der/die Program-miererIn hat zu bestimmen, was erfolgt. Allerdings können bestimmte Peripherie-ICs einen Teil der ISR, insbesondere die Feststellung des IRQ-Verursachers bei diversen Quellmöglichkeiten, erheblich vereinfachen.

Die einfachste Methode zur Quellenbestimmung der Unterbrechung ist es, nach Auflaufen eines IRQs alle möglichen Quellen abzufragen und bei Bedarf zu behandeln; diese wird im wesentlichen von einfachen, 8-Bit orientierten Systemen (z.B. 6502, 6805, 68HC11, 8051) durchgeführt. Bei komplexeren Gesamtsystemen wird die Quelle per Hardware vorbestimmt (Vektor-IRQ) und in diesem Zusammenhang Interrupt-Request-Controller eingesetzt, die automatisch die Ursache feststellen und sie an die CPU melden, die ihrerseits sofort – via einem Sprungvektor – die zuständige ISR aufruft.

Page 105: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 101

6.5.1 Der Ablauf eines IRQs im 80x86-System

Der Ablauf eines IRQs gestaltet sich in folgender Reihenfolge:

1. Die Peripherie des Mikroprozessors fordert eine Interruptbehandlung durch Setzen eines speziellen Pins an. Der Pegel dieses Pins ist µP-spezifisch, beim 80x86-System muss ein positiver Pegel erreicht werden, um den Interrupt anzufordern.

2. Am Ende nahezu aller Befehle (es gibt Ausnahmen, z.B. mov-Befehle, an denen Segmentregister beteiligt sind, da hier davon ausgegangen wird, dass der nächste Befehl zur Sequenz gehört entsprechend 32-Bit-Pointer-Kopie) prüft die CPU den Pegel am INTR-Eingangspin; ist dieser high, dann wird die Bearbeitung gestartet, falls das Interrupt-Enable-Flag gesetzt ist.

3. Die 80x86-CPU bestätigt den Erhalt des IRQs durch ein (aktiv low) Signal /INTA (Interrupt Acknowledge), auf das einen Buszyklus später ein weiteres Signal /INTA folgt.

4. Die Peripherie muss jetzt auf das zweite Signal /INTA die Vektoradresse in Form eines 8-Bit-Werts auf die unteren 4 Datenbusleitungen legen.

5. Die CPU nimmt diesen 8-Bit-Wert auf, multipliziert ihn mit 4 und benutzt ihn als Offset in die Vektortabelle für IRQs, die mit 4 Byte-Werten für jeden der 256 möglichen IRQs belegt sein sollte und sich in den ersten 1024 Spei-cherstellen befindet. Dieser Tabellenwert wird als der gültige Einsprungwert für die ISR genommen, so dass mittels eines Long Jumps bzw. Long Calls dorthin gesprungen wird.

6.5.2 Der programmierbare Interrupt-Request-Controller 8259A

Speziell für 80x86-Systeme (und 8080/85!) wurde der IRQ-Controller 8259A kon-zipiert, um ankommende Interrupts hardwaremäßig unterstützen zu können. Diese Unterstützung kann bis zu 64 IRQ-Quellen umfassen, da ein 8259A 8 IRQ-Ein-gänge besitzt und diese Bausteine einmal kaskadierbar sind. Als Beispiel hierzu sei auf den PC/AT verwiesen, in dem 2 ICs vom Typ 8259A kaskadiert sind.

Der IRQ-Controller ist aufgrund seiner Programmierbarkeit sehr komplex auf-gebaut; da zusätzlich noch ältere µPs unterstützt werden, sind zwei Modi vorgesehen, von denen allerdings in diesem Skript nur der für 80x86-Systeme vorgesehene behandelt werden wird. Bild 6.22 zeigt die Pinbelegung des 8259A:

Die Pins bedeuten im Einzelnen:

Page 106: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

102 Embedded Systems Engineering 1

123456789

1011121314

2827262524232221201918171615

D2D3

D1D0

D4D5D6D7

A0

GND

CAS0

/WR/CS

CAS1

/RD /INTA

VCC

IR7IR6IR5IR4IR3IR2IR1IR0INT/SP / /ENCAS2

Bild 6.22: PIN-Belegung 8259A

/CS (I) Chip Select ist ein Eingang, an dem mit Hilfe eines aktiv low Signals aus der Dekodierung der IC angesprochen wird.

/WR (I) und /RD (I) stellen die wohlbekannten Write- und Read-Eingänge dar.

D7 - D0 (I/O) Der Datenbus ist bei diesem Baustein 8-bit breit ausgeprägt; über diese Ein-/Ausgänge werden alle Datentransfers abgewickelt.

CAS0 - CAS2 (I oder O) In einem kaskadierten System von 8259A-ICs werden diese Pins zur Kommuni-kation zwischen den verschiedenen Controllern, insbesondere vom Master zu dem/den Slave-ICs genutzt. Diese Pins sind beim Masterbaustein als Outputs, bei einer Slave-Konfigurierung als Inputs geschaltet, können aber während des Betriebs keine wechselnden Funktionen ausführen.

/SP (I) / /EN (O) Dieser Pin besitzt eine duale Funktionalität, die mit verschiedenen Modi des 8259A zusammenhängen. Im so genannten 'Buffered Mode' wird die /EN-Funktion eingeschaltet, d.h., es liegt ein Ausgang vor, der Treiber via des /EN (Enable) -Ausgangs aktiv schalten kann. Im anderen Fall wird dieser Pin zum Eingang /SP (Slave Program), über den durch high Pegel ein Master, durch low Pegel ein Slave konfiguriert wird.

Page 107: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 103

Datenbus

Puffer

Read/

LogikWrite

/RD

/WR

A0

/CS

Cascade

ComparatorBuffer/

CAS0

/SP / /EN

CAS1

CAS2

INServiceRegister

(ISR)

InterruptRequestRegister

(IRR)

Prioritäts-

Logik

Kontroll-Logik

INT/INTA

D0 .. 7

IR0

IR7

..

Interrupt Mask Register

(IMR)

Interner Bus

Bild 6.23: Blockschaltbild 8259A

INT (O) übermittelt den Interrupt Request durch Einnehmen des high Pegels an die angeschlossene CPU.

IR0 bis IR7 (I) Diese Interrupt Requests stellen asynchrone Inputs dar, an denen die angeschlos-sene Peripherie die Unterbrechung signalisieren kann. Diese Pins sind Flanken-gesteuert (Low_to_high Flanke mit Halten des Pegels, bis dieser bestätigt wurde) oder Zustands-gesteuert (High Pegel bis Bestätigung) konfigurierbar.

/INTA (I) Die CPU antwortet - falls die Interruptbearbeitung nicht gesperrt ist - bei begin-nender Bearbeitung mehrfach über diesen Eingangspin (Interrupt Acknowledge), so dass bei vereinbartem Hardwareprotokoll die entsprechenden Informationen wie Interrupt-Vektornummer übermittelt werden können.

A0 (I)

Page 108: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

104 Embedded Systems Engineering 1

selektiert schließlich als Adressleitung bei Schreib- oder Lesezugriffen das entsprechende Register auf dem 8259A.

Zum Verständnis der internen Vorgänge im 8259A dient das Blockschaltbild (Bild 6.23), in dem auch einzelne Register, die softwareseitig konfiguriert werden müs-sen, eingezeichnet sind:

Die korrekte Inbetriebnahme eines 8259A beinhaltet einerseits die grundsätzliche Initialisierung des Chips, die allerdings ständig wiederholt werden kann und von einem Reset etc. unabhängig ist, sowie die kurzfristigeren Änderungen im Betrieb, z.B. die aktuelle Maskierung von Interrupts.

Die grundsätzliche Initialisierung wird durch sog. Initialization Command Words (ICWs) vorgenommen. Die Initialisierungen enthalten dabei Informationen zu

• Einzel- oder kaskadierter Betrieb

• Flanken- oder Zustandssensitven IRQs

• Vektoren-Grundadresse

• Identifikationsnummern (bei kaskadierten ICs

• 8086- oder 8080/85-Betrieb

• Modi (Buffered, Nested, automatischer EOI)

Eine Initialisierungssequenz wird immer durch einen Schreibzugriff auf die Adresse 0 mit gesetztem Datenbit D4 eingeleitet, dem sogenannten ICW1:

D7

0 (*)

D6 D5 D4

1

D3

LTIM

D2

ADI

D1

SNGL

D0

IC4

A0

0 0 (*)0 (*)

Bild 6.24: Initialisierungswort ICW1 für 8259A (nur schreibend)

In diesem ICW sind die Bits D7 bis D5 mit 0 belegt; im 8080-Mode allerdings werden hier die Adreßbits A7 bis A5 der Interrupt-Vektor-Adresse festgelegt.

LTIM legt den Triggermode fest, LTIM = 1 bedeutet Level Triggered Mode, = 0 entsprechend Edge Triggered (Flanken-getriggert). ADI = 1 legt (für 8080/85-Systeme) die Schrittweite der CALL-Aufrufe, nicht der IRQ-Vektoren, auf 4 fest, = 0 auf 8. Dies hat keinen Einfluss bei 8086.Systemen.

Das SNGL-Bit legt bei '1' fest, dass dieser 8259A der einzige IRQ-Controller an dieser Stelle ist, = 0 entsprechend, dass er sich in einem kaskadierten System befindet. Für Stand-Alone-Controller erübrigt sich die spätere Ausgabe des ICW3. IC4 = 1 stellt zum Schluss fest, dass ein 4. Wort, ICW4 benötigt wird; bei IC4 = 0 werden hingegen alle Bits, diese Initialisierung betreffend (s.u.), auf 0 gesetzt.

ICW1 startet - neben den darin bereits vorhandenen Initialisierungen - eine Sequenz von benötigten ICWs, von denen mindestens das nächste zwingend vorgeschrieben ist: ICW2

Page 109: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 105

D7

T7

D6 D5 D4

T4

D3

T3

D2 D1 D0A0

1 0 (*)T6 0 (*) 0 (*)T5

Bild 6.25: Initialisierungswort ICW2 für 8259A (nur schreibend)

In ICW2, durch Schreiben an Adresse 1 des ICs einstellbar, werden die Bits 3 bis 7 des Vektors festgelegt, die dieser Controller als IRQ-Vektor später ausgeben soll. Im PC beispielsweise gibt der 1. Controller die Vektoren 8h bis 0fh entsprechend den Speicherstellen 0020h bis 003ch aus, die Initialisierung hierfür lautet also T3 = 1, T4 .. 7 = 0. Im 8080/85-Mode steht das komplette High Byte der Sprungadresse in diesem ICW2.

ICW3 wird nur erwartet, wenn es sich um ein kaskadiertes System handelt; hierbei muss auch für die Bits unterschieden werden, ob das ICW3 in den Master- oder einen der Slave-Bausteine, zu unterscheiden durch den Eingang /SP oder, gleich folgend, im ICW4, Bit 2 (M/S), geschrieben wird.

D7

S7

D6 D5 D4

S4

D3

S3

D2 D1 D0A0

1 S6 S5

Master-Device:

D7 D6 D5 D4 D3 D2 D1 D0A0

1 0

Slave-Device:

S0S2 S1

0 00 0 ID0ID2 ID1

Bild 6.26: Initialisierungswort ICW3 für 8259A (Master/Slave)

Dem Master-Device wird mit einem gesetzten Sx-Bit mitgeteilt, dass sich hinter dem korrespondierenden Eingang ein Slave-8259A befindet, bei Sx = 0 nur ein normaler IRQ-Eingang. Dem oder den Slave-Devices wird eine Identifikations-nummer, die in einem kaskadierten System natürlich eindeutig sein muss, mit Hilfe der Bits ID2 .. 0 mitgeteilt, die im späteren Betrieb mit den CAS2 .. 0-Eingängen verglichen werden, um bestimmte Aktionen ablaufen zu lassen. Die IDx-Nummer muss also mit dem Eingang IRx übereinstimmen.

ICW4 wird notwendig, falls das Bit IC4 in ICW1 gesetzt war:

D7 D6 D5 D4 D3 D2 D1 D0A0

1 0 0 SFNM0 BUF µPMM/S AEOI

Bild 6.27: Initialisierungswort ICW4 für 8259A

Page 110: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

106 Embedded Systems Engineering 1

SFNM bedeutet dabei 'Special Fully Nested Mode'; im normalen Mode werden Prioritäten an die Interrupts vergeben, höchste Priorität liegt bei IR0, niedrigste bei IR7, wobei diese Prioritäten z.B. rotieren können, um balancierte Systeme zu erhalten. Wird ein Interrupt Request zum Prozessor durchgelassen, kann dieselbe oder alle niedirger priorisierten Quellen keinen zweiten IRQ durchgeben, wohl aber die höher priorisierten.

Liegt nun ein kaskadiertes System vor, dann kann es sinnvoll sein, einen Interrupt von einem Slave, der dort eine höhere Priorität besitzt, durchzugeben, selbst wenn ein IRQ dieses Controllers schon behandelt wird. Dieser Spezialfall wird durch SFNM = 1 eingeschaltet.

BUF schaltet den gepufferten Mode ein, mit dem /SP / /EN zum Ausgang wird, um externe Treiber einschalten zu können. Dies ist für große Systeme, bei denen die Leistungsfähigkeit der 8259A-Bustreiber ggf. nicht ausreicht sinnvoll, wobei in diesem Fall die Determinierung, ob es sich um einen Master- oder Slave-Baustein handelt, durch das nachfolgende Bit, M/S geschieht. M/S = 1 bedeutet dabei Master-IC.

AEOI = 1 programmiert den automatischen End-of-Interrupt, so dass ein solches Kommando bei Beenden einer Sequenz nicht mehr durch die CPU zu programmieren ist.

µPM legt schließlich den Mikroprozessormode fest. µPM = 1 bedeutet dabei 8086-Mode, µPM = 0 entsprechend den 8080/85, so dass im PC immer ein ICW4 zu den 8259A geschickt werden muss!

Eine Beispielsequenz soll die Initialisierung des 8259A für den 8086-Mode, als Master in einem kaskadierten System mit einem Slave an der Stelle IR2 und mit der Vektorengrundadresse 8 zeigen, wobei angenommen wird, dass sich der IC bei 20h/21h adressieren lässt:

mov al, 00011101b ; ICW1out 20h, al ;mov al, 00001000b ; ICW2, der Vektorgrundadresse ents prechendout 21h, al ;mov al, 00000100b ; an IR2 soll ein Slave-8259A seinout 21h, al ; ICW3 für Master-ICmov al, 00000101b ; 8086-Mode, kein AEOI, nicht-gepuf fertout 21h, al ;

Im normalen Betrieb kann nun mit Hilfe der Operation Control Words (OCWs) weiter konfiguriert werden, wobei sich diese Form mehr auf Maskierungen sowie direkt ausführbare Kommandos bezieht:

OCW1 hat dabei folgende Gestalt:

Page 111: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 107

D7 D6 D5 D4 D3 D2 D1 D0A0

1 M7 M6 M4M5 M1M3 M2 M0

Bild 6.28: Operation Controlwort OCW1 für 8259A

OCW1 wird als Maske für erlaubte/unterbundene IRQs an die Stelle A0 = 1 im 8259A geschrieben bzw. daraus gelesen. Ein auf '1' gesetztes Bit bedeutet dabei Maskierung, d.h. Unterdrückung des IRQs. Das dadurch adressierte Interrupt Mask Register (siehe auch Blockschaltbild) kann auf diese Weise direkt erreicht werden.

OCW2 stellt eine Art Vielzweck-Kommando dar; die Adressierung für OCW2 findet durch A0 = 0, D4 = 0 und D3 = 0 statt.

D7 D6 D5 D4 D3 D2 D1 D0A0

0 R SL EOI L1L2 L00 0

Bild 6.29: Operation Controlwort OCW2 für 8259A

Die Bits R, SL und EOI haben folgende Bedeutung:

Das End-Of-Interrupt-Kommando kann auf diverse Arten gegeben werden, wichtig ist nur, dass der 8259A ein gültiges Kommando erhält, da ansonsten weitere Aktionen im Betrieb ggf. unterbunden werden. Ist AEOI eingeschaltet, setzt sich der 8259A automatisch nach Beendigung des Handshakes mit der CPU zurück. Dieser Mode ist sinnvoll, falls die CPU selbständig für Unterbrechungsbereitschaft sorgt, und die Prioritätenvergabe keine große Rolle spielt.

In komplexeren Systemen sollte zum CPU-gesteuerten EOI übergegangen werden; dies bedeutet, dass vor Abschluss einer Interrupt-Service-Routine (ISR), die einen IRQ aus dem/den 8259A stammend bedient, ein Kommando an den betreffenden Baustein geschickt werden muss. Dieses Kommando kann ein EOI-Kommando sein, falls der 8259A selbständig entscheiden kann, welcher IRQ der höchst-

Page 112: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

108 Embedded Systems Engineering 1

priorisierteste war (Fully Nested Mode), oder es muss ein SEOI sein, falls der Special Fully Nested Mode eingeschaltet war.

Zusätzlich kann die Priorität automatisch oder durch die CPU verstellt werden, um allen Anforderungen des Gesamtsystems gerecht zu werden. Mit dem Prioritäts-kommando wird dabei z.B. der höchste Level festgesetzt, alle weiteren Prioritäten reihen sich danach ein.

OCW3 wird via A0 = 0, D4 = 0 und D3 = 1 erreicht. Dieses OCW bestimmt einen hier nicht weiter behandelten Special Mask Mode, der besonders bei komplexen Systemen mit stetiger Prioritätenänderung seine Berechtigung findet. Ferner - und dies ist an dieser Stelle wichtiger - kann ein Polling-Mode, den 8259A

D7 D6 D5 D4 D3 D2 D1 D0A0

0 0 ESMM SMM RRP RIS0 1

Bild 6.30: Operation Controlwort OCW3 für 8259A

direkt betreffend, eingerichtet werden, bei dem die entsprechenden IRQ-Bits gesetzt sind, und es kann das nächste Register zum Auslesen festgelegt werden. Die in Bild 6.30 genannten Bits haben folgende Bedeutung:

ESMM = 1 (Enable Special Mask Mode) bedeutet, dass der Special Mask Mode eingeschaltet (SMM = 1) bzw. ausgeschaltet (SMM = 0) wird; ESMM = 0 bewirkt keine derartige Operation.

P = 1 (Poll) schaltet den Polling Mode ein, ein Mode, bei dem das ISR und das IRR direkt ausgelesen werden können, wobei als Herstellerempfehlung dann die Interrupt-Initiierung des 8259A außer Acht gelassen werden sollte. Der nächste Leseimpuls (/RD = 0, /CS = 0, A0 beliebig) ergibt dann ein Byte, bei dem D7 = 1 anzeigt, dass ein IRQ aufgetreten ist, und D2 .. 0 den höchsten Level aller aufge-tretenen IRQs angibt.

Das Auslesen von ISR und IRR kann auf folgende Weise geschehen: Ein OWC3 mit RR = 1 schaltet einen Mode ein, bei dem auf den nächsten Leseimpuls (wieder beliebige Adresse!) am 8259A das In Service Register (RIS = 1) oder das Interrupt Request Register (RIS = 0) am Datenbus ausgegeben werden. ISR bezeichnet dabei den momentan angemeldeten IRQ, IRR die zur Bearbeitung anstehenden IRQs.

6.5.3 Das Hardware-Interface zwischen 80x86 und 8259A

Nachdem der 8259A einen Interrupt Request von einem Peripheriebaustein via IRx-Eingang empfangen hat, wird das korrespondierende IR-Bit im Interrupt Re-quest Register gesetzt. Die interne Logik des IRQ-Controllers entscheidet nun, ob

• dieser IRQ im Interrupt Mask Register (IMR) freigegeben (korrespondierendes IM-Bit = 0) ist,

Page 113: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 109

• falls ja, ob dieses IR-Bit die höchste anfordernde Priorität hat,

und setzt, falls alle Bedingungen erfüllt sind, die INT-Leitung aktiv high, zugleich das korrespondierende In-Service-Bit (IS-Bit) auf 0.

Der Mikroprozessor empfängt den INT-Impuls und wird darauf antworten, wenn das Interrupt-Enable-Flag gesetzt ist, ansonsten wartet die Verarbeitung. Der 8086 reagiert intern durch Beendigung des Befehls, teilweise (Beispiel: LDS) durch längere Abarbeitung z.B. eines 32-Bit-Befehls, und sendet eine doppelte /INTA-Signalfolge an den 8259A, von der in Bild 6.31 die zweite gezeigt ist:

CLK

INTA#

TT

1T

2T

4T

3

PointerAD0 .. AD15Float

DT/R#

DEN#

WR#, RD# high

Float

BHE# low

Bild 6.31: Buszyklus INTA (2. Impuls)

Auf den zweiten /INTA-Impuls hin sendet der 8259A die Vektorinterruptnummer via den Datenleitungen D0 .. D7, die der 8086 in der bereits geschilderten Weise mit 4 multipliziert und eine entsprechende Interrupt-Service-Routine mittels des auslesenen Sprungvektors auslöst.

Im Fall eines kaskadierten Systems von 8259A-ICs muss der entsprechende Slave-controller die Vektornummer ausgeben, der Master kommuniziert ggf. über die CASx-Leitungen mit den angeschlossenen Controllern.

Die INT-Leitung des/der 8259A wird nach dem zweiten /INTA-Impuls wieder inaktiv; der bzw. bei kaskadierten Systemen die beteiligten Controller müssen jedoch unbedingt ein EOI-Signal (automatisch, nicht-spezifisch oder spezifisch) erhalten, um den gleichen IRQ wieder auslösen zu können.

6.6 Direct Memory Access Controller

DMA-Controller sollen den Transfer zwischen Peripheriegeräten und Speicherbereichen bzw. zwischen zwei verschiedenen Speicherbereichen auf

Page 114: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

110 Embedded Systems Engineering 1

schnelle Weise realisieren. Diese Aufgabe ist z.B. beim Laden von Programmen sehr sinnvoll, da eine größere Datenmenge von der Harddisk in den Speicher zur Ausführung kopiert wird; Multitasking-Systeme mit Verwaltung von virtuellem Speicher müssen in jedem Fall häufig Daten auf die Festplatte ausgelagert werden.

DMA-Controller stellen also das Interface zwischen den am Mikroprozessorbus angeschlossenen Speicherbausteinen und ausgewählten Peripherie-ICs dar. Ent-sprechend dieser Aufgabe gestaltet sich ihr Aufbau gemäß Bild 6.32:

...

...DB

AB

Zum Speicher

HRQ

HDLA

ZumMikroproz.

DREQ

DACK ZurPeripherie

Bild 6.32: Prinzipieller Aufbau DMA-Controller

Der Ablauf eines DMA-Transfers ist dann wie folgt:

1. Der DMA-Baustein muss konfiguriert sein, d.h., er muss entsprechende Informationen über die Art des Transfers, die Adresse des anfordernden Partners usw. bereits erhalten haben.

2. Die Anforderung des DMA-Wunsches erreicht den Controller über den Eingangspin DREQ (DMA Request); er bestätigt diesen Eingang via seiner Ausgangsleitung DACK (DMA Acknowledge). DMA-Controller verfügen zumeist über mehrere Leitungspaare DREQ/DACK, so dass entsprechend mehrere DMA-Kanäle zur Verfügung stehen.

3. Der Controller fordert nun seinerseits vom Mikroprozessor die Kontrolle über den Adress- und Datenbus an, um den anfordernden Baustein und die Speicherbereiche adressieren zu können. Diese Anforderung wird über HRQ (Hold Request) an den Mikroprozessor übermittelt, diese Leitung muss in 8086.Systemen mit dem HOLD-Eingang des Mikroprozessors verbunden sein. Der Mikroprozessor gibt den Adress- und Datenbus frei, indem er auf 'Float' schaltet, und meldet dies via HLDA (Hold Acknowledge) an den DMA-Controller.

4. Nun beginnt der eigentliche Transfer, zu dessen Zweck der DMA-Controller den kompletten Adressbus setzen muss.

Page 115: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

6 Serielle und parallele Interface-ICs 111

Der Baustein 8237A von Intel ist ein (bereits betagtes) Beispiel für einen DMA-Controller. Er gestattet 4 DMA-Kanäle, allerdings nur mit 16 Bit Adressbusbreite, also einer Transferlänge von maximal 65536 Bytes bei 8 Bit Datenbusbreite. Um den im PC vorhandenen Speicherbereich von mind. 1 MByte korrekt adressieren zu können, müssen Hilfsbausteine, die den oberen Teil des Adreßbus' entsprechend dem Ziel richtig setzen, benutzt werden.

Zur genaueren Analyse des Bausteins sei an dieser Stelle auf die entsprechende Literatur, insbesondere die Datenbücher verwiesen.

Page 116: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

Literatur

[1] Scholz, P.: Softwareentwicklung eingebetteter Systeme. Springer Verlag Berlin Heidelberg New York, 2005.

[2] http://www.unicode.org

[3] Christian Siemers, ”Prozessorbau“. Carl-Hanser Verlag, München und Wien, 1999.

[4] Christian Siemers, Axel Sikora (Hrsg.), ”Taschenbuch Digitaltechnik”. Fachbuchverlag Leipzig im Carl Hanser Verlag, München Wien, 2. Auflage, September 2007. ISBN 978-3-446-40903-3

[5] Marc Haberland, ”Gedächtnis ohne Ladungsträger“. Elektronik 45(26), S. 46 .. 50 (1996).

[6] Tom Lee, ”Der erste kommerzielle MRAM-Baustein“. Elektronik 55(23), S. 68 .. 73 (2006).

[7] Köhn, K.-P.; Schultes, R.: 8051-Prozessoren. Franzis-Verlag, 3. Auflage München 1993, ISBN 3-7723-4333-3

[8] Bähring, H.: Mikrorechnersysteme. Springer-Verlag, ISBN 3-540-53489-X

[9] Messmer, H.-P.: PC-Hardwarebuch. Addison Wesley Publishing Company, Bonn, 1993

[10] Intel Corporation: Microprocessor and Peripheral Handbook, Vol. I und II

Page 117: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

Sachwortverzeichnis

8 8051

Abbildung Register zu Speicher ......... 62 ALE .................................................... 50 arithmetische Befehle ......................... 72 Auxiliary-Carry .................................. 63 Bitverarbeitungsbefehle ..................... 70 Carry-Flag .......................................... 63 Data Pointer Register ................... 63, 68 Datenzugriff ....................................... 54 direkte Adressierung .......................... 68 EA ...................................................... 50 indirekte Adressierung ....................... 68 indirekte indizierte Adressierung ....... 69 LJMP-Befehl ...................................... 52 logische Befehle ................................. 71 modifizierte Harvard-Architektur ....... 50 MOV-Befehl ...................................... 53 No Operation ...................................... 75 Overflow-Flag .................................... 63 Paritäts-Flag ....................................... 63 Pinbelegung ........................................ 47 Primärmodus ...................................... 48 Program Counter .......................... 73, 74 Program Status Word ......................... 63 Programmiermodell ............................ 61 PSEN .................................................. 50 Rechnersystem auf Basis .................... 55 Register .............................................. 61 Register Select .................................... 63 Registermodell ..................................... 8 relative Adressierung.................... 68, 69 Resetadresse ....................................... 58 Secial Function Register ..................... 62 Sekundärmodus .................................. 50 Speichermodell ................................... 65 Sprungbefehle .................................... 73 Stack ............................................. 67, 74 Stackpointer ................................. 63, 74 Transferbefehle .................................. 69 unmittelbare Adressierung ................. 68 Unterprogrammbefehle ...................... 74 Zugriff auf Codespeicher.................... 51 Zugriffszeiten ..................................... 51

A Accumulator ........................................... 63 Address Latch Enable ...... Siehe 8051, ALE Adressbus ................................................ 41 Adressierungsart

direkt .................................................. 67 immediate ..................................... 53, 68 indirekt ............................................... 68 indirekt indiziert ................................. 69 relativ ................................................. 68 unmittelbar ................................... 53, 68

arithmetische Befehle .............................. 72 ASCII ...................................................... 11 Assembler

Beispielcode ....................................... 16 asynchroner Systembus ........................... 46

Handshake .......................................... 46 Auxiliary-Carry ....................................... 63

B Befehl

arithmetisch/logische Befehle .............. 9 Kontrollflussbefehle ............................. 9 Transferbefehle .................................... 8

Befehlsbearbeitung ................................... 5 Bitverarbeitungsbefehle .......................... 70 Bussystem ........................................... 7, 40

asynchron ........................................... 46 Handshake .......................................... 46 semi-synchron .................................... 44 synchron ............................................. 43 Wartezyklus........................................ 46

C Carry-Flag ............................................... 63 CAS ........................................................ 21 Code

ASCII ................................................. 11 Unicode .............................................. 11

Column Address Strobe ............. Siehe CAS Control Unit .............................................. 4

Page 118: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

2 Embedded Systems Engineering 1

D Data Pointer Register ........................ 63, 68 Datenbus ........................................... 41, 42 Datentypen .............................................. 11

Festkommaformat .............................. 14 Festkommazahlen ............................... 13 Gleitkommaformat ............................. 14 Integer-Zahlen .................................... 13 Komplementdarstellung ..................... 13 Vorzeichen ......................................... 13 Zweierkomplement............................. 13

Decodierung ............................................ 58 direkte Adressierung ............................... 67 DPTR .............. Siehe Data Pointer Register DRAM

Blockschaltbild ................................... 22 CAS .................................................... 21 Fehlerbehebung .................................. 26 Fehlererkennung ................................. 26 Interleaving ........................................ 24 Page Mode.......................................... 23 RAS .................................................... 21 Refresh ......................................... 21, 24 Speicherprinzip .................................. 20 Static Column Mode........................... 24 zeitlicher Verlauf ................................ 23 Zugriffszeit ......................................... 22 Zykluszeit ........................................... 22

Dynamic RAM ....................... Siehe DRAM

E ECC ........................................................ 26 EEPROM ................................................ 31

Flash-.................................................. 33 FLOTOX-Transistor........................... 33

Einerkomplement .................................... 13 Eingebettete Systeme ................................ 1 Electrically Erasable Programmable ROM

..................................... Siehe EEPROM embedded systems .................................... 1 EPROM .................................................. 31

FAMOS-Transistor ............................ 32 Erasable Programmable ROM ........... Siehe

EPROM Error Correction Code................ Siehe ECC External Address ................ Siehe 8051, EA

F FAMOS-Transistor ................................. 32

Programmierung ................................. 32 FeRAM ................................................... 37

Speicherzelle ...................................... 37 Fetch ................................................. 52, 53 FIFO........................................................ 66 Flash-EEPROM ...................................... 33 Floating Gate Tunnel Oxide Transistor

.................... Siehe FLOTOX-Transistor Floating-Gate Avalanche MOS .......... Siehe

FAMOS FLOTOX-Transistor ......................... 33, 34 FRAM .................................. Siehe FeRAM

G Gleitkommaformat .................................. 14

H Handshake ............................................... 46 Harvard-Architektur ................................ 50 Hex-File .................................................. 17

I indirekte Adressierung ............................ 68 indirekte indizierte Adressierung ............ 69 Interleaving ............................................. 24

L Linker ...................................................... 17 logische Befehle ...................................... 71

M magnetoresistives RAM ........ Siehe MRAM Mikrocontroller ....................................... 47 MRAM .................................................... 37

Speicherzelle ...................................... 38

N No Operation........................................... 75 Non Volatile RAM .................................. 34 NVRAM ................................................. 34

Speicherzelle ...................................... 34

Page 119: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

Sachwortverzeichnis 3

O Overflow-Flag ......................................... 63

P Page Mode .............................................. 23 Paritäts-Flag ............................................ 63 PC .......................... Siehe Program Counter Phasenpipelining ....................................... 7 Program Counter ................. 5, 9, 69, 73, 74 Program Space Enable ............. Siehe PSEN Program Status Word .............................. 63 Programmcounter.................................... 52 programmierbares ROM ........ Siehe PROM Programmiermodell

Speicher .............................................. 65 Programmzähler .................................... 5, 9 PROM ..................................................... 31 PSEN ................................................ 50, 65 PSW ................ Siehe Program Status Word

R RAM ....................................................... 19

DRAM ................................................ 20 FeRAM .............................................. 37 FRAM ................................................ 37 MRAM ............................................... 37 Non Volatile RAM ............................. 34 NVRAM ............................................. 34 SRAM ................................................ 26

Random Access Memory ......... Siehe RAM RAS ........................................................ 21 Read-Only Memory ................. Siehe ROM Refresh .............................................. 21, 24

RAS-only Refresh .............................. 24 relative Adressierung .............................. 68 ROM ....................................................... 30

EEPROM ........................................... 31 EPROM .............................................. 31 Masken- .............................................. 31 programmierbar .................................. 31 PROM ................................................ 31

Row Address Strobe .................. Siehe RAS

S Secial Function Register ......................... 62 self-contained systems .............................. 1

semi-synchroner Systembus .................... 44 Wartezyklus........................................ 46

SFR ........... Siehe Special Function Register Special Function Register

Accumulator ....................................... 63 Hilfsakkumulator B ............................ 63 Peripherie-bezogen ............................. 63

Speicher DRAM ................................................ 20 EEPROM ........................................... 31 EPROM .............................................. 31 FeRAM............................................... 37 FRAM ................................................ 37 MRAM ............................................... 37 RAM .................................................. 19 SRAM ................................................ 26 SRAM-Speicherzelle .......................... 27 Technologie ........................................ 19 Vergleich Technologien ..................... 39

Speichermodell ....................................... 65 FIFO ................................................... 66 Stack ................................................... 66

Speichertechnologie ................................ 19 Sprungbefehle ......................................... 73 SRAM ..................................................... 26

Blockstruktur ...................................... 28 Speicherzelle ...................................... 27 Vorteile............................................... 30

Stack ................................................. 66, 74 Stackpointer ...................................... 63, 74 Static Column Mode ............................... 24 Statisches RAM ..................... Siehe SRAM Steuerbus................................................. 41 Steuerwerk ................................................ 4 synchroner Systembus ............................ 43 Systembus

asynchron ........................................... 46 semi-synchron .................................... 44 synchron ............................................. 43 Wartezyklus........................................ 46 Zugriffszeiten ..................................... 51

T Transferbefehl ......................................... 53 Transferbefehle ....................................... 69

U Universalrechner ....................................... 3

Page 120: Embedded Systems Engineering 1 V0.93 WS 2011/2012 · resultiert, dass das eingebettete System Randbedingungen erfüllen muss, die durch die Maschine vorgegeben sind, häufig z.B.

4 Embedded Systems Engineering 1

unmittelbare Adressierung ...................... 68 Unterprogrammbefehle ........................... 74

V Variable

char ..................................................... 15 int ....................................................... 17

Von-Neumann-Flaschenhals ..................... 7 Von-Neumann-Modell

Adressbus ........................................... 41 Datenbus....................................... 41, 42 Steuerbus ............................................ 41 Verbindungswege ............................... 40

Von-Neumann-Rechner ............................ 3 arithmetisch/logische Befehle .............. 9 Befehlsbearbeitung ............................... 5 Bussystem ............................................ 7 CPU ...................................................... 3 Datentypen ......................................... 11 Flaschenhals ......................................... 7

Kontrollflussbefehle ............................. 9 Programmzähler ............................... 5, 9 Transferbefehle .................................... 8 Zentraleinheit ....................................... 3

W Wait State ...................... Siehe Wartezyklus Wartezyklus ............................................ 46

Z Zahlensystem

Dezimalsystem ................................... 10 Dualsystem ......................................... 10 Hexadezimalsystem ............................ 10 Oktalsystem ........................................ 10 polyadisch .......................................... 10 Sedezimalsystem ................................ 10

Zweierkomplement ................................. 13