Ich habe versucht eine SPI Kommunikation aufzubauen, bei dem ein Sensor mit dem Mikrocontroller kommunizieren soll. Der MC ein ATmega644 soll als Master eingesetzt werden. Deshalb habe ich folgendes in C geschrieben: SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<SPR0); Wenn ich einen Breakpoint kurz nach dieser Codezeile setzte ist das Register wie gewünscht gesetzt. Doch nach dem Aufruf einer Funktion setzt sich das MSTR Bit zurück auf Null. Dies Passiert aber nicht wenn ich sei(); aus dem Programmcode entferne. Ich kann mir nicht erklären an welcher stelle ich einen Fehler gemacht habe. Ich schreibe noch einmal den Programmabschnitt in dem diese Bitänderung stattfindet hin. In Eckigen Klammern steht der Zustand des SPCR Registers (Breakpointartig). … SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<SPR0); sei(); [110100011] while(1) [110000011] { … Gruss Robert
Du wirst vermutlich keine ISR für den STC_vect haben, damit springt das Programm beim Eintreffen des Interrupts wieder auf Adresse 0. Falls du nicht gerade einen saulahmen SPI-Slave hast, wirst du Interrupts in diesem Falle nicht ernsthaft verwenden wollen. Die Zeit, die für die Interruptbearbeitung draufgeht, ist viel zu groß im Vergleich zur SPI-Zykluszeit für einen schnellen Slave. (Die meisten Slaves kann man praktisch bis zum maximal möglichen Takt von Fcpu/2 benutzen.)
Doch ich benötige die ISR, da der MC auf einen Interupt eines anderen Bauelement reagieren muss dieses hat aber nichts mit SPI zu tun.
Robert M. wrote: > Doch ich benötige die ISR, da der MC auf einen Interupt eines anderen > Bauelement reagieren muss dieses hat aber nichts mit SPI zu tun. Genau, das hat nichts mit dem SPI-Interrupt zu tun. Ergo: nimm das SPIE raus aus der SPI-Konfiguration.
Gut hab ich gemacht ändert nichts - Problem weiterhin vorhanden.
Hast du den SS Pin als Ausgang definiert ? Wenn es ein Eingang ist kann der dir das MSTR Bit zurücksetzen.
Ahrrr, wer ricchtig liest hat weniger Stress. Ich habe die Bemerkung von Holger auch in der Preliminary gelesen und bedacht, aber den falschen Pin gesetzt. Dank für die Hilfe.
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.