mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SIGNAL mit UART0 und atmega128 funktioniert nicht...


Autor: stephan stadler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hi

habe eine serielle schnittstelle mit interrupt programmiert - leider
werden keine interrupts behandelt .... ???

auch wenn ich den block

SIGNAL(__vector_default)
{
    // user code here z.b. led on
}

einbaue geschieht nichts obwohl die serielle schnittstelle funktioniert
(ohne interrupt getestet)

was kann das sein (stack.fuse bits ) ???

danke

Autor: Axel Stab (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fuse bits glaube ich nicht, das betrifft eigentlich nur den
bootreset-vektor. stack-probleme würden sich eigentlich erst beim
rücksprung bemerkbar machen. um das auszuschliessen könntest du die cpu
per stop-befehl ganz brutal einfrieren, nach dem LED-Anschalten.

vielleicht nochmal ganz genau im datenblatt die registerbeschreibungen
bzw. das kapitel über den seriellen empfang durchlesen. unter manchen
bedingungen muss immer zuerst das status register ausgelesen werden,
bevor es weitergeht. hab auf die schnelle auch keinen lesezugriff aufs
UDR gesehen, das kann auch erforderlich sein.

läuft denn die schnittstelle im polling-betrieb, ggf. auch ohne die
ganzen buffer? im laufenden polling-betrieb kannst du ja z.B. mal den
transmit-complete vektor aktivieren, der hat eigentlich keine
besonderen bedingungen oder nebenwirkungen. wenn dann alles abstürzt,
hast du ein vektor-problem.

den stack kannst du am einfachsten mit verschachelteten
funktionsaufrufen testen. im detail, oder bei sporadischen fehlern
lohnt sich ein zyklisches überprüfen der letzten stack-speicherstelle
(mit hard-definiertem RAM-Pointer): zu programmbegin was markantes
reinschreiben, und immer mal wieder auslesen. bei einem stacküberlauf
steht dann was anderes drin. (einmalig kannst du aus die erste
speicherstelle testen, ob der stack überhaupt richtig alloziert wird.)

die interruptvektoren sind manchmal auch fehlerhaft (z.B. bei
chip-redesign nach compiler-release), notfalls im generierten
assemblercode prüfen. evtl. kann es auch stress geben, wenn ein RxD/TxD
Pin als I/O Port konfiguriert ist.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.