Läuft der SPI Master-Mode im Hintergrund?

Gast #617032
Lesenswert?
• ▲
▼
Hallo,

ich beschäftige mich derzeit mit der Ansteuerung des Siemens s65
Displays mit einem mega32 unter Bascom.
Nun habe ich die zeitkritischen Sachen
(Shiftout) schon alle in Assembler
innerhalb Bascom programmiert.
Nun meine Frage : Bringt es noch was die Ausgabe
der Daten auf hard SPI umzustellen ??
Meiner Meinung nach nur dann ,wenn die SPI Ausgabe im Hintergrund
(so wie ein Timer) laufen würde.
Oder ist es bei SPI auch so dass der Prozzi nichts anderes
machen kann bis er die Daten rausgepumpt hat.
Hoffe mir kann da wer helfen, danke.

Gruss Gerhard
Persönliche Seite #617040
Lesenswert?
• ▲
▼
Ein Zeitgewinn ist es sicher.

Aktuell musst du ja jedes Bit anschaun und dann entsprechend die Pins 
setzen. Du bist also andauernd beschäftigt und schaffst sicher nicht 
F_CPU / 2.

Wenn du das Hardware SPI verwendest, dann sieht es so aus:
SPDR = data;
while(warten...)
SPDR = data;
while(warten...)

Kommt natürlich jetzt auf die Frequenz an, mit der du die Daten aus derm 
SP-Interface rauspustest: Wenn du die maximale Geschwindigkeit hast, 
dann ist das Byte so schnell draußen, dass es sich nicht lohnt, was 
zwischendrin zu machen.

Ich würde auf jedenfall Hardware machen, schneller ist es sicher.
Gast #617287
Lesenswert?
• ▲
▼
und ganz wichtig: auf den SS-Pin achten (entwder als Ausgang setzten 
oder an VCC siehe Datenblatt), wenn das nicht stimmt, dann schaltet der 
MC vom Master in den Slave Mode, und dann wird´s nichts mit der 
Übertragung.
Gast #617737
Lesenswert?
• ▲
▼
Hallo,

na wenn das nicht im Hintergrund läuft dann wirds mit Hardware SPI
nicht um gar so viel schneller.
Sind doch immerhin 6 Bytes (48 Bit's) die pro Pixel rausgeshiftet werden
müssen.
Werd ich aber heute gleich noch mal testen.
Nächste Überlegung wäre einen extra AVR zu verwenden der die bytes an 
einem Port parallel erhält und brav rauspumpt.

Gruss Gerhard
#617754
Lesenswert?
• ▲
▼
Hardware-SPI geht auch Interrupt-gesteuert (vermute, das ist es, was Du 
mit "im Hintergrund laufen" meinst). Allerdings kommen bei hohen 
SPI-Takten die Interrupts sehr schnell hintereinander, so dass der µC eh 
zu nix anderem mehr kommt. Dann kannste auch warten.

In einer Hochsprache programmiert würde das bei den Frequenzen sowieso 
eng, weil allein der Aufruf einer ISR plus den Sachen, die der Compiler 
noch da reinschiebt (Register sichern) u.U. schon deutlich länger dauert 
als das Rausschieben eines Bytes. Wenns Dir wirklich auf Geschwindigkeit 
ankommt, biste da vermutlich ohne Interrupt schneller.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren