Einchipmikrorechner und Signalprozessoren
Einleitung
Einordnung
- Einchipmikrorechner (EMR, µC)
- Digitaler Signalprozessor (DSP)
Gemeinsamkeiten
- Einchip-Konzept: wesentliche Bauteile alle auf einem Chip (CPU, Speicher, IO, Taktgeber)
- minimierte (minimale) Außenbeschaltung: Abblockkondensator, Quarz
- autonomer Betrieb: Unbeaufsichtigter Betrieb, ohne (nur mit applikationsspezifischem) Bedienereingriff
- aufgabenspezifisch angepasst: "Nur soviel (Hardware) wie nötig"
- große Typenfamilien: viele Typen mit jeweils mehreren Ausführungen, Unterschiede in Speicher/Pins
- Crosswerkzeuge: Entwicklung auf PC, aber Code für Chips
- Software: muss sich nicht mehr verändern (ist in sich geschlossen)
Unterschiede
EMP | DSP | |
Leistung | niedrig bis mittel | mittel bis hoch |
Datenbreite | 4, 8, 16, 32 | 16, 32, 64 |
Speichergröße | ||
* intern | sehr wenig bis mittel | meist nur mittel |
* extern | wenig bis mittel | groß bis sehr groß |
Besondere Befehle | Bit-Befehle, Bit-Adressierung |
MAC (Multiplikation und Addition in einem Befehl), zirkuläre Adressierung, Saturation (Festkomma-Arithmetik) |
Typische Anwendungen | Steuergeräte in Industrie und Kraftfahrzeugtechnik, Haushaltselektronik, tragbare Geräte (MP3, Handy) |
digitale Filter/Regler, Bildverarbeitung und Mustererkennung, Messgeräte, Messtechnik, Audioeffektgeräte, Modems |
Bauteile
Rechnerkern
- RISC oder CISC
- Harvard oder von-Neumann (Princeton)
- viele Spezialregister (SFR)
- allg. Register häufig verbunden mit internem RAM
Speicher
<graphviz> digraph G { "Speicher" -> "intern"; "Speicher" -> "Speicherinterface";
"intern" -> "ROM"; "intern" -> "RAM";
"Speicherinterface" -> "Seriell"; "Speicherinterface" -> "Businterface"; "Speicherinterface" -> "\"glueless\"\n(Treiberlos)"; } </graphviz>
ROM
- Masken-ROM
- PROM/OTR
- EPROM
- EEPROM
- FLASH-EEPROM
- FRAM
- "Bontout"
- "ROM-less"
Ein- und Ausgabe
<graphviz> digraph G { "Ein- und Ausgabe" -> "digital, Standard"; "Ein- und Ausgabe" -> "analog"; "Ein- und Ausgabe" -> "speziell";
"digitale, Standart" -> "parallel"; "digitale, Standart" -> "seriell";
"seriell" -> "synchron"; "seriell" -> "asynchron";
node [shape=box]; "Kommunikation"; "Zähler/Zeitgeber"; "Geräte";
"speziell" -> "Kommunikation"; "speziell" -> "Zähler/Zeitgeber"; "speziell" -> "Geräte";
} </graphviz>
Sonstiges ("Hilfs"-baugruppen)
- Reset
- Takt
- Power-Management
- Interruptsystem
- DMA
- Watchdog
Typenbeispiele
(nicht prüfungsrelevant)
Mikrocontroller am Beispiel der C166 Familie
- 16bit Datenbreite
- CISC-Kern
- Intelähnlicher Befehlssatz
- von-Neumann-Architektur
- bis 30 Mhz Taktfrequenz
- Addresbreite 16bit/24/bit
- Mehrfachnutzung von Pins
Befehlssatz - Architektur
Allgemeiner Registersatz
- 16x16bit Register R0-R15
- Register R0-R7 lassen sich auch über H und L ansprechen
Spezialfunktionsregister (SFR)
- es existieren sehr viele Register
u.a. in:
- Prozessorkern
- Peripherieeinheiten
- Interruptsystem
- Chipsteuerung
- Adresseinheit
- ...
SFR im Prozessorkern
- PSW (Prozessor Status Word, "Flag-Register"); 16bit breit
- Beispiele für Flags:
- Statusflags:
- C: Carry (Übertrag)
- V: Overflow (Überlauf)
- Z: Zero
- N: Negativ
- ...
- Steuerflags:
- IEN: Interrupt Enable
- USRO: frei verfügbar
- SP (Stackpointer)
- STKUV (Stackunderflow)
- STKOV (Stackoverflow)
- SYSCON: Systemkonfiguration
- ...
Speichermodell
- von-Neumann: ein Adressraum
- interner ROM
- interne RAMs
- SFRs (reservierte Speicheradressen)
- allgemeine Register
- reservierte Bereiche
- Rest: externer Speicher
kleines Speichermodell
- nicht segmentiert
- logische 16 Bit-Adresse wird umgesetzt auf physikalische 16 Bit-Adresse
- Speicherraum: Byte = 64 KiByte
großes Speichermodell
- segmentiert
- logische 16 Bit-Adresse erhält zusätzliche Segmentbeschreibung (Länge variiert)
- wird ungeformt auf physikalische 24 Bit-Adresse
- Speicherraum: Byte = 16 MiByte
Vorteil:
- mehr Speicherplatz
- Segment = Grobpositionierung
- Änderung davon seltener (wird nicht bei jedem Zugriff geändert)
Segmentierter Datenzugriff
Segmentierter Programmzugriff
Adressraumstruktur
Allgemeine Register: Mapping in den Speicherraum
Befelssatz
Transportbefehle
- MOV Ziel , Quelle : Wort
- MOV B Ziel , Quelle : Byte
- MOV BZ Ziel , Quelle : Wort <- Byte (Null auffüllen)
- MOV BS Ziel , Quelle : Wort <- Byte (Vorzeichen auffüllen)
- MOV Register , Register
- MOV Register , Zahlenwert
- MOV Register , Speicher
- MOV Speicher , Register
- MOV Register , Index
- Zahlenwerte mit # kennzeichnen sonst Speicheradresse
- Variablenangabe statt Zahlenwert möglich
Stackbefehle
- PUSH Quelle -> Ziel = Stack
- Stackpointer geht 1 Speicherplatz nach unten und kopiert dann erst Inhalt aus Register in Stack
- POP Ziel -> Quelle = Stack
- Wert aus Stack wird gelesen und in Register geschrieben, dann geht Stackpointer 1 Speicherplatz nach oben
- Befehle gelten nur für 16 Bit Register
- LIFO-Prinzip beim Daten retten beachten
- Stack-Befehle müssen ausbalanciert sein (sonst Über-/Unterlauf)
Arithmetik/Logik
16 Bit Befehle | 8 Bit Befehle | Bemerkung | ||
ADD | ADD B | |||
ADD C | ADD C B | Wert des Carry-Flags mit addieren | ||
SUB | SUB B | |||
SUB C | SUB C B | Wert des Carry-Flags mit subtrahieren | ||
AND | AND B | bitweise | ||
OR | OR B | bitweise | ||
XOR | XOR B | bitweise | ||
CMP | CMP B | beeinflusst nur Flags |