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.
Keine INT Routine! Der muß sich aufhängen.....Errata lesen auch nicht vergessen!
Hallo, 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 soll ich beachten? Errata? Bitte um Aufklärung!
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!
Das bedeutet doch ads ich ohne die while_schleifen arbeiten kann?
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
Jens Neumann schrieb: > Das bedeutet doch ads ich ohne die while_schleifen arbeiten kann? Nein.... Das bedeutet, dass Du gänzlich ohne den Interrupt und den dazugehörigen Handler arbeiten könntest, wenn du nach dem while(...) das Flag "händisch" wieder zurücksetzt.
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...
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.
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.