ISR(SPI_STC_vect) wird nicht verlassen

Gast #2623868
Lesenswert?
• ▲
▼
Hallo zusammen,
ich habe ein kleines Problem bei ner SPI-Übertragung. Und zwar wird 
(egal ob der SPI-Interrupt enable oder disable is) in die ISR gesprungen 
und diese nicht mehr verlassen, egal was innerhalb der ISR steht. Alles 
was innerhalb der ISR steht wird noch erledigt und dann hängt er 
einfach. Controller is ein Atmega640...
Bin für jeden Hinweis dankbar!
Gruß Fabi
(Firma: guloshop.de) #2623898
Lesenswert?
• ▲
▼
Da der Stackpointer beim ATmega640 automatisch initialisiert wird, gibts 
noch zwei Möglichkeiten:

1. Du schreibst ins SRAM und überschreibst damit versehentlich die 
Rücksprungadresse.

2. Du hast am Ende der ISR "ret" statt "iret" geschrieben.

Falls beides nicht der Fall ist, liegt es vermutlich doch an der Zeile 
42. Die schaut mir sehr verdächtig aus, da hat Marius recht.
Gast #2623997
Lesenswert?
• ▲
▼
Oke, hab den dezenten Hinweis verstanden, im Anhang mal meine zwei 
Dateien um die es primär geht;-)
Im Prinip soll auf die SD-Karte mit Hilfe von Elm-Chans FAT Treiber 
geschrieben werden. Leider kommt er aber nie aus der disc-initialize 
Funktion raus. Auf der Suche woran es liegt bin ich drauf gestoßen dass 
er in der rcvr_spi Funktion sobald er ins SPI-Register geschrieben hat 
hängt bzw. neustartet.
Um dem ganzen nun mal auf den Grund zu gehn hab ich in der can_sd alle 
ISR mal definiert um zu sehn wo er noch so reinspringt. Macht er aber 
nur in Timer1 Timer2 und eben komischerweise auch in die SPI_STC, obwohl 
die disabled ist...
Wenn im Code nun einige for(;;) schleifen drin sind dann sind das 
überreste von der Fehlersuche. Am PORTC sitzen 8 LEDs. Beim Momentanen 
Programmcode leuchtet am ende jede zweite LED(wie in der ISR(SPI_STC) 
definiert).

Wenn das so zu komplex, oder ich einfach zu wirr schreib, per Forum is, 
gebt mir bescheid, is mein erstes Programmierproblem dass ich per Forum 
versuch zu lösen..;-)
Liebe Grüße,
Fabi
Angehängte Dateien:
Gast #2624004
Lesenswert?
• ▲
▼
sorry hab vergessen auf die letzte Antwort einzugehn:
SRAM beschreib ich zumindest Absichtlich nicht, kenn mich da allerdings 
nicht aus. Was das iret angeht... das brauch ich nur wenn ich in 
assembler Programmier oder?
Gruß Fabi
Gast #2624028
Lesenswert?
• ▲
▼
ich hatte zwischenzeitlich die loop_until_bit_is_set funktion 
verdächtigt dass die probleme macht, aber die scheint wohl meiner 
Meinung nach doch zu tun... Deswegen hab ich da ne eigene funktion 
geschrieben die eben ein "o" mehr hatte...
Gruß Fabi

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.