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
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
Man könnte die Clock Leitung an einen interruptfähigen Pin hängen und in der ISR als erstes den Dateneingang abfragen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.