Schlagwort-Archiv: propeller

Propeller Cog RAM – Grundlagen

Das Cog RAM ist der Speicher, den jeder Cog für sich alleine hat. Es besteht auf 496 x 32 Bits der für Code und Daten verwendet werden kann. Ferner befinden sich noch 16 spezial Register im RAM. Der USER Speicherbereich geht von $000 bis $1EF und die Spezialregister gehen von $1F0 bis $1FF. Die meisten Befehle beeinflussen alle 32 Bits  einer Adresse. Eine Ausnahme stellen Code selbstmodifizierende Befehle wie MOVS, MOVD, MOVI und der CALL sowie JMPRET dar.

  • MOVS beeinflusst die unteren 9 Bits (B8 bis B0) einer Cog Speicheradresse ohne die anderen Bits zu verändern
  • MOVD macht das selbe mit den nächsten 9 Bits (B17 bis B9) ohne die anderen Bits zu verändern
  • MOVI verändert nur die MSB (Most Significant Bits) B31-B23
  • CALL und JMPRET beeinflussen ebenfalls die unteren 9 Bits (B8 bis B0) des RET Befehls um die Rückkehr aus einer Assembler Subroutine zu vereinfachen
B31 – B23 B22 – B18 B17 – B9 B8 – B0
Befehl Ziel Quelle
MOVI MOVD MOVS, CALL,
or JMPRET

Spezial Register

Addr.

Name

Typ

Funktion

$1F0 PAR Read-Only Boot parameter
$1F1 CNT Read-Only System Counter
$1F2 INA Read-Only Input states for P31-P0
$1F3 INB Read-Only Input states for P63-P32*
$1F4 OUTA Read/Write Output States for P31-P0
$1F5 OUTB Read/Write Output states for P63-P32*
$1F6 DIRA Read/Write Direction States for P31-P0
$1F7 DIRB Read/Write Direction States for P63-P32*
$1F8 CTRA Read/Write Counter A Control
$1F9 CTRB Read/Write Counter B Control
$1FA FRQA Read/Write Counter A Frequency
$1FB FRQB Read/Write Counter B Frequency
$1FC PHSA Read/Write Counter A Phase
$1FD PHSB Read/Write Counter B Phase
$1FE VCFG Read/Write Video Configuration
$1FF VSCL Read/Write Video Scale

* nicht vorhanden im P8X32 Propeller Chip

Propeller Hauptspeicher – Grundlagen

Der 32kByte große Hauptspeicher ist von den RAM’s der einzelnen Cogs separiert.

Ein Programm welches auf einem Cog läuft (egal ob Benutzerprogramm oder der SPIN Interpreter) hat durch die Befehle RDLONG, RDWORD, RDBYTE, WRLONG, WRWORD und WRBYTE Zugriff auf den Hauptspeicher. Diese Befehle werden immer komplett durchgeführt und nie teilweise. Wenn also zwei Cogs nacheinander in den gleichen Hauptspeicherbereich schreiben, so steht dort immer der Wert den der in der zuletzt hineingeschrieben wurde. Dieser Wert ist kein Mischwert aus beiden Schreibzugriffen.

Die Benutzung von Locks hilft einem Cog einen längeren ununterbrochenen Zugriff auf den Hauptspeicher zu bekommen um größere Bereiche des Hauptspeichers zu lesen/beschreiben.

Der Hauptspeicher kann entweder mit 32k x 8 Bits, 16k x 16 Bits, 8k x 32 Bits oder wenn erforderlich eine Mischung aus diesen angesprochen werden. Wenn die Befehle RDLONG oder WRLONG benutzt werden müssen die zwei LSB’s auf null gesetzt werden. Bei den Befehlen RDWORD und WRWORD muss das LSB auf null gesetzt werden.

Der Hauptspeicherinhalt wird beim starten des Propeller von einem externen 32k x 8 Bit I2C EEPROM oder von der Propeller Tool Software einkopiert. Danach startet der SPIN Interpreter im Cog 0, welcher dann beginnt den geladenen SPIN Code auszuführen.

Das externe EEPROM bzw. der vom Tool eingespielte Code muss immer ein SPIN Programm enthalten. Auch wenn dieses SPIN Programm nur dazu dient den Operations Modus des Propeller festzulegen und dann mit anderweitigem Code weiter zu arbeiten.

Der Hauptspeicher enthält keinen ausführbaren Maschinencode wie bei einem normalen Microcontroller. Er enthält nur Daten. Die Interpretation dieser Daten hängt vom laufenden echten Programm in einem der Cog’s ab. Da im Cog 0 zuallererst der SPIN Interpreter startet ist er der Entscheider wie die nachfolgenden Daten interpretiert werden.

Kommando Interpreter

21.6.2008

Abends

War eben noch bei Atelco. Die hatten für teure 20 Euro ein USB-RS232 Adapter. Damit kann ich den PC mit einer 2. seriellen Schnittstelle ausrüsten (früher war sowas onboard).

Die Hardware wurde auch ohne Treiber unter WinXP sauber eingebunden. Zuerst war die Datenübertragung mit 9600 Baud verstümmelt, es kamen lauter falsche Zeichen vom Propeller in Hyperterm an. Nach einer Weile ging ich auf 300 Baud runter und Kommando Interpreter weiterlesen

LCD Display macht Probleme

5.1.2008

Abends

Holla, ich habe die handgeschriebenen Pläne wieder gefunden. Oben trage ich die Steuerports für das LCD ein. Es sind die Ports P9, P10 und P11.

Jetzt habe ich eine Weile versucht das Display sauber anzusprechen. Es reagiert auch irgendwie, aber nicht richtig. Ich mache wahrscheinlich etwas falsch. Morgen versuche ich es LCD Display macht Probleme weiterlesen

Cog Kommunikation und Tastatur

09.04.2007

Morgens

Jetzt möchte ich mal ausprobieren wie man Variablen zwischen zwei Cog’s hin und herschiebt. Sagen wir mal ich lade eine Variable im Hauptprogramm mit dem Wert 2 und lasse diesen auf der 7-Segment Anzeige darstellen. Dann starte ich einen weiteren Cog, übergebe ihm die Variable. Dieser addiert zur 2 eine 6 und heraus kommt 8. Diese 8 soll der zweite Cog an den ersten Cog Kommunikation und Tastatur weiterlesen

2. serielle Schnittstelle funktioniert

20.6.2008

propeller_seriellWill heute mal zum Elektronikladen und ein paar Komponenten kaufen, damit ich den Propeller Chip um eine 2. serielle Schnittstelle erweitern kann. Dann kann ich ihn über die erste Schnittstelle programmieren und über die zweite eine Terminalkommunikation mit dem PC betreiben. Eigentlich unnötig, da der Propeller ja mit einfachen Mitteln eine eigene Videoausgabe beherrscht. Die bekomme ich bis jetzt aber nicht zum laufen.

15:00 Uhr

Ich brauchte nicht in den Elektronikladen. Bin auf den Speicher 2. serielle Schnittstelle funktioniert weiterlesen

LCD verdammt

7.1.2008

Abends

Habe nochmal alles nachgesehen mit dem Propeller. Habe einen Fehler entdeckt. Im Spin Code stand outa[32..16] anstatt outa[23..16]. Damit wurde der erste Init Befehl verständlicherweise verschluckt. Nach Korrektur geht auch alles nur die Buchstaben sind nach wie vor Horizontal um einen Pixel verschoben und werden so zerhackt dargestellt.

Das kann nur noch an einem kleinen Init Befehl liegen, aber an welchem ??