SPI Bitübertragung

Gast #3646714
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
Angehängte Dateien:
#3646716
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.

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