SPI Problem: Warte ich in der Senderoutine auf InterruptFlag hängt sich Atmega8 auf

OP #2938558
Guten Abend,
hier mal wieder ein SPI Problem:

Nachdem ich nun den zweiten Tag versuche einen DigiPoti (MCP41010) via 
SPI anzusprechen möchte ich Euch um Rat bitten.

Wenn ich in der Senderoutine das InterruptFlag abfrage bleibt der 
Controller hängen als würde das Flag nie gesetzt werden. Kommentiere ich 
die beiden Zeilen aus läuft der Controller, SPI geht natürlich nicht.

Im Anhang der betreffende Code, sollte das nicht reichen kann ich auch 
gern den Rest posten der allerdings umfangreich ist.

Dank für Eure Antworten.
Angehängte Dateien:
Persönliche Seite
Jens Neumann schrieb:
> die ISR ist nicht mit gepostet, tschuldigung...
>
> Sie ist allerdings auch leer da ich sie ja nur zum selbständigen löschen
> des Flag`s brauche.

Was erwartest du?

Interruptbedingung tritt ein --> (leerer) Interrupthandler wird 
aufgerufen, bevor dein Unterprogramm dazu kommt das Flag abzufragen --> 
durch den Aufruf des (leeren) Interrupthandlers wird das Flag natürlich 
gelöscht und deine while Schleife schleift sich nen Wolf!
Jens Neumann schrieb:
> Das bedeutet doch ads ich ohne die while_schleifen arbeiten kann?

Ohne While-Schleife läuft dein Programm zum Ende der main(). Dort 
springt es in eine Endlosschleife. Vorher wird noch das I-Bit gelöscht. 
Du hast also keine Interrupts mehr. Daher brauchst du aufjedenfall 
irgendeine Endlosscheife vor dem Ende der main().

gruß cyblord
OP
Hallo Magnus M.,
bin eigentlich auch nicht scharf auf den Interrupt da der ja sowieso nix 
macht.

o.k.: Hab mal das InterruptFlag aus dem INIT_SPI genommen und hinter die 
while_schleifen ein SPSR &= ~(1<<SPIF) geschrieben.

Hängt sich trotzdem auf...
Gast
Ein Blick ins Datenblatt ergibt:

SPIF is cleared by hardware when executing the corresponding interrupt 
Handling Vector. Alternatively, the SPIF bit is cleared by first reading 
the SPI Status Register with SPIF set, then accessing the SPI Data 
Register (SPDR).

Auf Deutsch: Du musst SPDR lesen um SPIF zurückzusetzen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.