I/O Pin - Teil 1
In dieser Rubrik greifen wir auf das Wissen und die Vorerfahrungen mit dem Propeller P1 zurück. Sehr hilfreich ist deshalb die Kenntnis aus der Rubrik Propeller P1 SPIN.
1 - Die I/O Pin des Propeller P2 (Theorieteil, muss leider sein)
Über das Thema P2 Intelligente Pins ließen sich viele Kapitel schreiben. Wir werden ganz bescheiden mit ein paar einfachen Beispielen über das Verhalten der I/O Pins anfangen.
Jeder der 64 I/O Pins eines Propeller P2 kann als Standard-Tri-State-I/O Pin konfiguriert oder mit 31 verschiedenen Modi intelligent aufgerüstet werden. Dabei kann jeder der acht Kerne die Pins aufrufen.
Das Verhalten jedes I/O-Pins wird durch die Kombination von vier Einstellungen beschrieben:
Die ersten drei davon aktivieren oder verwenden spezielle interne Schaltungen im I/O-Pin-Block selbst (über DIR-, OUT/IN-, Mxx-Signale) und der vierte bietet optionale Zustandsmaschinensteuerungen. Jede der vier Einstellungen wird im Folgenden beschrieben.
1 - Richtung und Zustand
In ihrer einfachster Form werden I/O-Pins über dedizierte COG-Register und die sie betreffenden Befehle gesteuert. Das kennen wir bereits vom Propeller P1 und den Registern DIRA, OUTA und INA. Die Registernamen konnten unter SPIN1 als SPIN1-Anweisungen mit gleichem Namen in einem Programm verwendet werden (siehe unter Propeller P1 SPIN - I/O Befehle).
Mit Hilfe allgemeiner und spezieller Pin-Befehle kann in die Register
geschrieben und das Pin-Ein-/Ausgangsverhalten beeinflusst und über
Pin-Zustände ausgelesen werden.
Allzweckbefehle arbeiten mit dem gesamten 32-Bit-Register (alle Pins), während die speziellen Pin-Befehle mit einzelnen Bits (Pins) oder Bitgruppen arbeiten.
Insgesamt gibt es 14 Pinmethoden unter SPIN2; weitere Informationen zu den Befehlsaufrufen finden sich hier. Mit einzelnen Befehlen werden wir uns in den folgenden Übungen vertraut machen.
2 - I/O-Pin als Ausgang deklarieren
SPIN2 stellt für Ausgangspins verschiedene Methoden bereit.
Die genannten Methoden setzen die Richtungsregister (DIRA, DIRB) für die angesprochenen Pins auf Ausgang. Ein Pinfeld kann aus minimal einem und maximal 63 Pins bestehen.
Übung 1 - Eine LED ein- und ausschalten
In drei aufeinanderfolgenden Stufen wird ein einfaches Blinkprogramm verschlankt und die Möglichkeit der Bitgruppenadressierung gezeigt.
Übung 1 - Eine LED ein- und ausschalten | |
Material |
|
Aufgaben |
|
Schaltskizze
Das Programm IO_LED_01.spin2
Wie arbeitet das Programm IO_LED_01.spin2 ?
Die Methode PUB main() enthält die drei Instruktionen
Die Methoden pinh und pinl setzen einen Pin bzw. ein ganzes Pinfeld aufeinanderfolgender Pins auf HIGH bzw. LOW. Die Syntax lautet:
Das Argument pin(feld) kann eine Pinzahl zwischen 0 und 63 oder ein pinfeld sein.
Pinfelder werden durch eine 11-stellige Binärzahl im Format
angegeben. Die sechs Lower-Bits beschreiben den Bezugspin, die fünf Higher-Bits die Anzahl der zusätzlich benachbarten Pins.
In Befehlszeile 13 wird mit
Pin P8 und drei weitere benachbarte Pins, in diesem Fall P9, P10 und P11, auf HIGH gesetzt. Die angeschlossenen LED leuchten.
Anstelle der binären Schreibweise bei Pinfeldern (s. Abb. 4a), lassen sich die Pingruppen auch über die Pinnummern direkt angeben (s. Abb. 4b).
Die Instruktion
gibt die Verzögerungszeit in Millisekunden an und ist eine von zwei Verzögerungszeit-Angaben in SPIN2. Die zweite Instruktion
misst die Verzögerungen in Mikrosekunden.
Das Programm IO_LED_01.spin2 mit abgewandelter Pindeklaration
Jetzt kommst du
Mögliche Lösungen
Zusammenfassung
Die unter SPIN2 für I/O Pins zur Verfügung stehenden PIN-Methoden (Auswahl aus dem Datenblatt):
lassen sich über Pinfelder ansprechen. Allgemein gilt:
Beispiele
Übung 2 - Inline-Assembler (PASM2)
Wer die Programmierung mit SPIN1 beim Propeller P1 kennt, wird hier vielleicht die Registerbefehle DIRA, OUTA vermissen. Sie sind noch vorhanden, lassen sich aber nur über ein Assembler-Programm (PASM) aufrufen.
Der Vorteil bei SPIN ist, dass man in einem SPIN-Programm Inline-Assembler Aufrufe starten kann. Wie das geht, zeigt die folgende Übung.
Übung 2 - LEDs einschalten über Inline-Assembler | |
Material |
|
Aufgaben |
|
Das Programm PASM2_LED_01.spin2
Abb. 6
Inline-PASM Programm. Der Assemblerblock wird durch ORG und END innerhalb eines SPIN2 Programms begrenzt. Die Assembler-Mnemonics sind aus "PROPELLER P1 SPIN" bekannt und können dort nachgelesen werden.
Wie genau sind eigentlich die Instruktionen waitms und waitus?
Die Vermutung liegt nahe, dass sich mit der Wahl der Taktfrequenz die Verzögerungszeiten der beiden Befehle waitms und waitus verändern. Ob da was dran ist, soll jetzt untersucht werden.
Um das zu überprüfen, wird über einer LED, die über die Anweisung waitms(400) 400 ms ein- bzw. ausgeschaltet wird, die Zeit gemessen. Im Normalbetrieb, ohne Angabe einer Taktfrequenz arbeitet der Propeller Controller P2 im Takt-Modus RCFAST mit einer Taktfrequenz von ca. 12 MHz.
Das Oszillogramm liefert bei einem Befehlsaufruf waitms(400) eine gemessene Verzögerungszeit von ca.325 ms.
Wird die Taktfrequenz im CON-Block explizit angegeben (im gezeigten Beispiel im Taktmodus XTAL1 + PLL1X und 200 MHz), entspricht einem Befehlsaufruf von waitms(400) eine gemessene Verzögerungszeit von ca. 400,.. ms (s. Abb. 6).