Interruptgesteuerte SPI-Kommunikation zw. Atmega32 und AD7794

OP #2189529
Lesenswert?

Ahoi,

folgendes Problem:
Ich habe erfolgreich (zumindest im Atmel-Simulator) die Kommunikation 
zw. Atmega32 und AD7794 über SPI implementiert, allerdings gibt es da 
eine Sache, die ich nicht hinkriege. Der AD7794 setzt die 
DOUT/nRDY-Leitung (MISO) auf LOW, wenn eine Konversion abgeschlossen 
ist, aber dies ist im SPI-Handling des Atmega nicht implementiert, d.h. 
er löst das Interrupt immer bei "transmission complete", ohne Rücksicht 
auf MISO.
Interessanterweise ist die Leitung nur beim Auslesen der Daten wichtig, 
das reine Reinschieben von Befehlen geht laut Datenblatt von AD7794 auch 
bei DOUT/nRDY auf HIGH.
Gibt es eine Möglichkeit es interruptgesteuert zu lösen, ohne polling?

Das einzige was mir einfällt, ist das SPI-Interrupt (welches aus einem 
Ringspeicher Befehle an den AD7794 weiterleitet und ankommende Daten in 
einen anderen Ringspeicher schreibt) vor dem speziellen Befehl des 
Auslesens des DATA-Registers des AD7794 zu deaktivieren und einen 
Timerinterrupt zu aktivieren, der jede Millisekunde die 
DOUT/nRDY-Leitung überprüft. Falls die Leitung auf LOW geht, aktiviert 
die Timerinterruptroutine das SPI-Interrupt und deaktiviert sich selbst.

Ansonsten ein dickes Lob an das Forum, immer wieder erste 
Suchmaschineneinträge bei Elektronikfragen.

Grüße
Tycho

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