Benutzer:MOS6502~dewiki/Propeller Microcontroller

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Propeller Chip[Bearbeiten | Quelltext bearbeiten]

Propeller Chip 40 polig DIP P8X32A-D40

Bei Parallax Inc. in Kalifornien wollte man einen Nachfolger für den damaligen Verkaufshit BASIC Stamp 2 konstruieren. Erste Konzepte reichen in die zweite Hälfte der 90er Jahre zurück. Nach jahrelangen Investitionen in Forschung und Entwicklung kam der Parallax Propeller Chip mit acht Prozessorkernen und einer Rechenleistung von über 160 MIPS heraus.

Zum Propeller Chip wurde auch gleich eine neue Sprache geschaffen: Spin! Diese objektorientierte Hochsprache enthält viele, aus anderen Sprachen wie C++ oder Java bekannte Elemente, unterstützt aber die Besonderheiten der Propeller Multiprozessor-Architektur und vereinfacht deren Nutzung. Der Propeller Chip kann in Spin, Assembler oder einer Mischung aus Beiden programmiert werden.

Die gesamten Softwaretools wie Editor, Compiler, Downloader & Tools, eine umfangreiche Bibliothek mit Softwaremodulen und Beispielanwendungen stehen den Anwendern kostenlos zur Verfügung. Das Propeller-Manual umfasst mehrere hundert Seiten, es ist sowohl als gedrucktes Handbuch als auch als PDF-Version erhältlich. Nahezu täglich werden neue Applikationshinweise und Beispielprojekte publiziert. Diese stammen von Parallax selbst und von der immer zahlreicheren Benutzergemeinde im öffentlichen Parallax Propeller Forum.

Bootvorgang[Bearbeiten | Quelltext bearbeiten]

Nach dem Einschalten der Versorgungsspannung, einem Hardware Reset oder einem Software Reset passiert folgendes.

  • Der Propeller Chip startet seinen internen Taktgenerator im langsamen Modus mit 20KHz, wartet für 50ms (Reset Sicherheits Verzögerung), schaltet den internen Taktgenerator in den schnellen Modus mit 12MHz und läd/startet das Boot-Loader Programm aus seinem internen ROM im Kern 0 (Cog 0).
  • Der Boot-Loader führt nun eine oder mehrere der folgenden Aufgaben in Reihenfolge durch
    • Erkennen einer Kommunikation mit einem Host, z.B. einem PC, auf den PIN's P30 und P31. Wird ein Kommunikationsversuch erkannt, meldet der Boot-Loader den Propeller Chiptyp an den Host und läd möglicherweise ein Programm vom Host in den Haupt-RAM des Propeller Chip und optional auch in ein externes EEPROM
    • Wird keine Host Kommunikation erkannt, sucht der Boot-Loader nach einem vorhandenen externen EEPROM (32kByte) auf den PIN's P28 und P29. Wird ein solches erkannt, werden die kompletten 32kByte des EEPROM in den Haupt-RAM des Propeller kopiert.
    • Wenn kein EEPROM erkannt wurde, stoppt der Boot-Loader seine Tätigkeit, Cog 0 wird deaktiviert, der Propeller Chip geht in den Shutdown Modus und alle I/O PIN's werden auf Eingang gesetzt
  • Wenn in den oben genannten Schritten ein Programm erfolgreich in den Haupt-RAM geladen wurde, und vom Host kein Suspend-Befehl gegeben wurde, wird der Cog 0 aus dem internen ROM des Propeller mit dem Spin-Interpreter geladen und das Benutzer-Programm aus dem Haupt-RAM abgearbeitet

Ist der Bootvorgang durchlaufen und das Benutzer-Programm läuft im Cog 0, werden alle weiteren Aktivitäten des Propeller Chips von diesem kontrolliert. Das Benutzer-Programm hat die volle Kontrolle über Einstellungen wie die interne Taktfrequenz, I/O PIN Verwendung, Konfigurations Register, und wie viele Cog's zu einer bestimmten Zeit aktiv sein sollen. Alle diese Dinge sind zur Laufzeit variabel und werden vom Benutzer-Programm kontrolliert.

Shutdown Prozedur[Bearbeiten | Quelltext bearbeiten]

Geht der Propeller in den Shutdown Modus, stoppt der interne Taktgeber wodurch alle Cog's angehalten werden und sämmtliche I/O PIN's auf Eingang gestellt werden. Der Shutdown Modus wird durch folgende drei Ereignisse aktiviert:

  • die Spannungsversorgung fällt unter den Grenzwert von 2.7V (der 'Brown-Out' Spannungsüberwachung Schaltkreis muss aktiviert sein)
  • der RESn PIN geht auf Low
  • das User Programm gibt einen REBOOT Befehl

Der Shutdown Modus wird beendet wenn die Versorgungsspannung wieder über den im 'Brown-Out' Schaltkreis festgelegten Wert steigt und der RESn PIN auf High liegt.


Funktionsweise[Bearbeiten | Quelltext bearbeiten]

Geteilte Resourcen

Im Propeller Chip gibt es zwei Arten von geteilten Resourcen

  • Gemeinsame Resourcen
  • Gemeinsam-Exklusive Resourcen

Auf gemeinsame Resourcen kann zu jeder Zeit und mit einer beliebigen Anzahl von Cog's zugegriffen werden. Auf Gemeinsam-Exklusive Resourcen können auch beliebig viele Cog's zugreifen aber zu einem Zeitpunkt darf nur ein Cog 'exklusiv' auf diese zugreifen. Gemeinsame Resourcen sind die I/O PIN's und die System-Zähler. Alle anderen Geteilten Resourcen fallen in die Kategorie Gemeinsam-Exklusiv. Der Zugriff auf diese wird vom sogenannten HUB kontrolliert.

Das Zusammenspiel von Cog und Hub im Propeller Chip ist kritisch. Der Hub kontrolliert welcher Cog zu einer bestimmten Zeit Zugriff auf eine Gemeinsame-Exklusive Resource, wie Haupt-RAM/RAM oder Konfigurationsregister bekommt. Egal ob ein Cog nun aktiviert ist oder nicht, geht der Hub einfach der Reihe nach die Cog's ab und gewährt ihnen exklusiven Zugriff. Das stellt ein gleichbleibendes Timing im Chip sicher. Dieses 'rotieren' des Hubs nennt man auch 'Round Robin'.

System Takt

Der System Takt dient nahezu jeder Komponente im Propeller Chip. Der Systemtakt kommt aus einer der folgenden Quellen

  • der Interne RC Taktgenerator
  • der Takt Phase-Locked Loop (PLL)
  • der Quarz Oszillator (ein interner Schaltkreis der von einem externen Quarzkristall/Taktgeber angetrieben wird

Die Taktquell kann im CLK-Register beim kompilieren oder zur Laufzeit festgelegt werden. Nur der HUB und der Bus benutzen den Systemtakt/2 als Basis.

Cog's (Prozessoren)

Der Propeller Chip beinhaltet acht Prozessoren, genannt Cog's, durchnummeriert von 0 bis 7. Jeder dieser Cog's besteht aus den selben Komponenten.

  • einem Prozessor Block
  • eigener 2KB großer RAM (512 x 32Bit)
  • zwei I/O Einheiten mit PLL's
  • einen Video Generator
  • I/O Ausgabe Register
  • I/O Richtungs Register
  • und noch weitere Register

Jeder Cog gleicht genau dem anderen und kann unabhängig von den anderen Cog's arbeiten. Alle acht Cog's werden vom gleichen Takt angetrieben, dem System Takt, so haben alle dieselbe Zeitbasis und alle aktiven Cog's können ihre Instruktionen simultan ausführen. Auch haben alle Cog's Zugriff auf die geteilten Resourcen, wie I/O PIN's, Haupt-RAM, und die Systemzähler.

Cog's können zur Laufzeit gestartet und gestoppt werden und können ihre Programme simultan unabhängig abarbeiten oder durch Koordination anderer Cog's über den Haupt-RAM. Ohne Rücksicht auf die momentane Nutzung eines Cog, hat das Benutzer-Programm die volle Kontrolle wie und wann ein Cog verwendet wird. Es gibt keine Kompiler/OS gesteuerte Trennung von Programmen zwischen mehreren Cog's. Das gibt dem Programmierer/Entwickler die Möglichkeit für präzieses Timing, Stromverbrauch und Reaktionen des Systems.

Jeder Cog hat seinen eigenen RAM, den sogenannten Cog RAM, welcher aus 512 x 32Bit Registern besteht. Der Cog RAM ist ein normaler Speicherbereich bis auf die letzten 16 Register, welche Spezialregister sind. Der Cog RAM wird für ausführbaren Code, Daten, Variablen und die letzen 16 Register dienen als Schnittstelle zum System Zähler, den I/O PIN's und internen Cog Ausgabegeräten.

Ist ein Cog gebootet wird sein RAM von Adresse 0 ($000) bis 495 ($1EF) sequenziell vom Haupt-RAM/ROM mit dem Benutzer-Programm geladen. Die Spezial-Register von Adresse 496 ($1F0) bis 511 ($1FF) werden auf null zurückgesetzt. Nach dem Ladevorgang beginnt der Cog mit der Programmabarbeitung beginnend an der Adresse 0 des Cog RAM. Der Cog wird damit fortfahren bis er gestoppt wird, vom eigenen Programm oder durch einen anderen Cog rebooted wird, oder ein Reset anliegt.

Entwicklungs Boards[Bearbeiten | Quelltext bearbeiten]

Datei:Propeller Demo Board.jpg
Propeller Demo Board

Propeller Demo Board

  • P8X32A-Q44 Propeller Chip
  • 24LC256-I/ST EEPROM Programm Speicher
  • Austauschbarer 5.000MHz Quartz
  • 3.3V und 5V Spannungsregler mit Ein/Aus-Schalter
  • USB-nach-Seriell Schnittstelle zum Laden und Kommunizieren
  • VGA Ausgang
  • TV Ausgang
  • Stereo Ausgang mit 16-Ohm Kopfhörer Verstärker
  • Electret Microphon Eingang
  • Zwei PS/2 Buchsen für Maus und Tastatur
  • 8 LED's (PIN's geteilt mit VGA)
  • Reset Taste
  • I/O PIN's P0-P7 sind zu einem Steckkontaktfeld geführt (zum experimentieren)

Technische Daten[Bearbeiten | Quelltext bearbeiten]

Mit den Bauformen QFP44 (10mm Body) und QFN44 (9mm Body) stehen kleine Gehäusevarianten zur Verfügung, welche die Konstruktion von Geräten mit höchsten Packungsdichten ermöglichen. Auch gibt es den Propeller Chip im löt- und steckfreundlichen 40 poligen DIP Gehäuse.

Kenngröße Daten
Modell P8X32A
Stromversorgung 3.3V Gleichspannung
Externe Taktfrequenz max. 80MHz (4 bis 8 MHz mit internem PLL)
System Taktfrequenz max. 80MHz
Interner RC Taktgeber 12MHz oder 20 kHz (kann varieren von 8MHz bis 20MHz bzw. 13kHz bis 33kHz)
Haupt RAM/ROM Speicher 64KBytes / 32KB RAM + 32KB ROM
Kern RAM 512 x 32 Bits (2kByte) pro Kern (8 Kerne)
RAM/ROM Organisation Long (32-Bit), Word (16-Bit), oder Byte (8-Bit) adressierbar
I/O Leitungen 32 CMOS Leitungen mit VDD/2 Eingangs-Empfindlichkeit
max. Strom pro I/O Leitung 30mA
max. Strom pro 8 I/O Leitungen 100mA
Stromverbrauch bei 3.3V DC, 21.1 °C 500µA pro MIPS (MIPS = Freq. in MHz/4 * Anzahl aktiver Kerne)


Weblinks[Bearbeiten | Quelltext bearbeiten]