2.1 Zugriff auf die Speicher
2.1.1 Zugriff auf den internen SRAM
Damit man Daten aus dem SRAM lesen kann, wird zunächst die Adresse des gewünschten Datenbereichs auf den Adressbus gelegt. Die Anzahl der Adressbits richtet sich nach dem Speicherausbau des jeweiligen Controllers. Danach wird die Read-Leitung des Steuerbusses aktiviert (log. 0), und auf dem internen Datenbus ist der Inhalt der adressierten SRAM-Zelle. Mit einer steigenden Flanke des Read-Signals ( /RD-Signal) werden die Daten in ein Arbeitsregister übernommen.
Soll in einen SRAM Daten eines Arbeitsregisters geschrieben werden, so werden die Daten auf den Datenbus, und die gewünschte Adresse auf den Adressbus gelegt. Es wird die Write-Leitung des Steuerbusses auf log. 0 gesetzt und wieder auf log. 1. Mit der steigenden Flanke des Write-Signals wird der Inhalt des Arbeitsregisters in den SRAM eingeschrieben.
2.1.2 Zugriff auf den nichtflüchtigen Speicher (EEPROM)
Für den Schreib-/Lesezugriff auf den nichtflüchtigen Speicher sind drei I/O-Register des SRAMs relevant. Diese sind:
EEPROM Adress-Register
EEPROM Daten-Register
EEPROM Control-Register
Bit7 Bit6 Bit5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Adresse
$1C ($3C) - - - - - EEMWE EEWE EERE
Tab. 1: EEPROM-Control-Register
Beim Lesen wird die zu lesende EEPROM-Adresse in das EEPROM-Adress-Register (EEAR), das sich auf dem I/O-Speicherplatz $1E (RAM: $3E) befindet, eingeschrieben. Dann wird in das EEPROM-Daten-Register (EEDR), auf dem I/O-Speicherplatz $1D (RAM: $3D), der zu speichernde Inhalt abgelegt. Erst durch das Setzten des Read-Enable-Control-Bits (EERE) im
EEPROM-Control-Register (EECR), das sich auf dem I/O-Speicherplatz $1C (RAM: $3C) befindet, können die Daten gelesen werden.
Der Schreibzugriff auf das EEPROM erfolgt in ähnlicher Weise. Jedoch muss das EEWE-Bit (EEPROM-Write-Enable-Bit) gesetzt sein. In dem EEAR muss die Adresse, und im EEDR das zu speichernde Datenbyte vorhanden sein. Um ein unbeabsichtigtes Schreiben auf das EEPROM zu verhindern muss zusätzlich das EEMWE-Bit im Controll-Register gesetzt sein. Zum Programmieren sind folgenden Schritte notwendig.
1. Warten, falls ein Programmiervorgang läuft, bis dieser beendet ist.
2. Die EEPROM-Adresse in das EEAR einschreiben.
3. Das zu speichernde Datenbyte in das EEDR einschreiben.
4. Das EEMWEBit auf log. 1 setzten.
5. Das EEWE-Bit auf log. 1 setzten und ca. 2,5 - 4 ms ( 4 Perioden des Systemtaktes) warten.
Das EEWE-Bit wird nach dem Programmiervorgang automatisch auf log. 0 zurückgesetzt. Bevor also das nächste Byte programmiert werden darf, ist es notwendig dieses Bit abzufragen und zu warten bis es den Wert log. O erreicht hat.
2.1.3 Zugriff auf den Programmspeicher
Der Lesevorgang auf den Programmspeicher wird von der CPU gesteuert. Der Programmierer muss nicht extra ein Programm dafür schreiben. Der Ablauf des Lesevorganges der Gleiche, wie bei dem SRAM-Lesevorgang.
Der Schreibvorgang auf den Programmspeicher wird nur einmal für eine Anwendungsaufgabe durchgeführt. Dies kann mit einem PC, mit entsprechender Software, erfolgen. Der Programmiervorgang des Flash-EPROMs kann eingeschränkt seriell (in der Schaltung), oder parallel erfolgen. Für den parallelen Programmiermodus muss der Mikrocontroller aus der Schaltung genommen werden.
2.2 Programmbearbeitung
Die jeweiligen Arbeitsanweisungen für den Controller stehen im Programm, das sich im Programmspeicher befindet. Jeder Befehl hat eine bestimmte Adresse. Nach einem Neustart des Controllers ruft die CPU die erste Adresse ($0000) auf. Der Inhalt geht über den Datenbus
zu der CPU. Jeder Befehl besteht aus mehreren Bytes. Das erste Byte enthält immer den Operationscode, der dem Rechenwerk sagt, welche Operation auszuführen ist. Weiterhin gibt das erste Byte über die Länge des Befehls Auskunft. Erst wenn der gesamte Befehl gelesen ist, führt der Controller ihn aus. Dies kann unter anderem Lesen / Schreiben in Speicher oder Ausführen von Rechenoperationen sein. In den folgenden Byte/s stehen die Adressen oder die Register, die angesprochen werden sollen. Nach der Ausführung des Befehls holt die Ablaufsteuerung den nächsten Befehl aus dem Programmspeicher. Ist der letzte Befehl im Programmspeicher bearbeitet beginnt die CPU wieder bei der ersten Adresse ($0000), soweit keine anderen Sprünge oder Schleifen programmiert sind.
2.3 Die Ein- / Ausgabeports (I/O-Ports)
Alle Ports der AVR-RISC Controller verfügen über 8 Bit breite, bi-direktionale I/O-Ports. Bei dem AT90S1200 sowie dem AT90S2313 ist der Port D jedoch nur mit 7 Bit breit, da das Gehäuse nur 20 Anschlüsse hat. Bidirektional bedeutet, dass jeder Pin eines Ports als Ein- sowohl auch als Ausgang verwendet werden kann. In der Funktion als Eingang kann ihm nach Bedarf auch ein Pull-Up-Widerstand zugeschaltet werden kann. Jeder einzelne Port des Controllers wird über drei I/O-Bereiche des SRAMs angesprochen. Die Tabelle (siehe Anlage) zeigt welche Register erforderlich sind, sowie deren Adresse. Initial zeigt den Wert des Registers nach einem Reset an.
Jeder I/O-Pin ist nach dem gleichen Prinzip aufgebaut
Bild 5: Prinzipschaltung eines I/O-Pins
2.3.1 Das Datenrichtungsregister
Im Datenrichtungsregister (DDX) wird festgelegt, ob die einzelnen Pins eines Ports als Ein- oder Ausgang arbeiten sollen. Steht in einem Bit (n) im Datenrichtungsregister eine "0" so ist der Pin
als Eingang konfiguriert. Bei einem Eingang ist der Schalter S3 geöffnet und trennt den Pin von seinem dazugehörigem Port. Der Schalter S1 (Öffner) ist geschlossen, dadurch wird der Pull-Up-Widerstand an den Pin geschalten, falls der Schalter S2 durch ein High am Ausgang von seinem Port geschlossen ist.
Wird in ein Datenrichtungsregister-Bit eine "1" eingeschrieben, so wird der entsprechende Pin als Ausgang festgelegt. S3 ist dann geschlossen und verbindet den jeweiligen Port mit seinem dazugehörigen Pin. Der Öffner S1 ist offen und trennt den Pull-Up-Widerstand vom Pin, unabhängig vom Schalter S2.
2.3.2 Das Portregister
In das eigentliche Port-Register (PortX) wird bei einer Ausgangskonfiguration der auszugebende Wert eingeschrieben. Ist der Pin als Eingang konfiguriert, besteht die Möglichkeit den internen Pull-Up-Widerstand einzuschalten. Der Schalter S2 ist dann geschlossen.
2.3.3 Das Eingangs-Pin-Register
Mit Hilfe dieses Registers kann man die logischen Pegel eines Pins (PinX) einlesen. Um die Inhalte auszulesen, aktiviert die Steuerlogik die Signale RD (Read Direction), RL (Read Latch) bzw. RP (Read Pin), die den jeweiligen Wert über den entsprechenden Treiber TD, TL bzw. TP auf den internen Datenbus schalten.
|