Forum: Mikrocontroller und Digitale Elektronik SPI Bitübertragung


von krilin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
ich möchte gerade mit einem Arduino due(AT91SAM3X8E ARM Cortex-M3, 
84MHz) 2 Bytes von einem Master System an gewählten I/O-Pins 
empfangen.Die Bytes werden während einer SPI-Kommunikation - wobei der 
Arduino Slave ist - gesendet.

Weil der SPI-header auf dem Arduino für andere Zwecke schon reserviert 
ist, versuche ich eine SPI-Schnittstelle auf gewählten I/O-Pins "zu Fuß" 
zu programmieren.
Anbei habt ihr die Funktion listen(), die jeden kommenden Bit auf die 
MOSI-Leitung lesen soll.
Die Funktioniert auch, allerding nur für niedrige Taktfrequenzen. Ab 
500kHz zum Beispiel geht es nicht mehr.
ich vermute ab großen Frequenzen kann das Polling in der Funktion nicht 
mehr mithalten...

Was denkt ihr ? kann die Funktion noch verbessert werden oder bleibt nur 
interupt der einzige Lösungsansatz ?

P.S: Der Master arbeitet mit CPOL = 0 und CPHA = 1

von Karl H. (kbuchegg)


Lesenswert?

Solange du mit digitalRead arbeitest, brauchst du dich nicht wundern.

Auf einem AVR ist ein digitalRead ungefähr um den Faktor 120 langsamer, 
als wenn man den Portpin direkt abfrägt. Und ich schätze mal, das wird 
auf einem ARM auch nicht anders sein. digitalRead und digitalWrite sind 
nun mal eierlegende Wollmilchschweine, die jede Eventualität 
berücksichtigen. Selbst dann, wenn du ganz genau weißt, dass auf diesem 
Pin immer nur ein Eingang sein wird.

: Bearbeitet durch User
von Max H. (hartl192)


Lesenswert?

Man könnte die Clock Leitung an einen interruptfähigen Pin hängen und in 
der ISR als erstes den Dateneingang abfragen.

von krilin (Gast)


Lesenswert?

Danke für eure Tipps.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.