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


von stephan stadler (Gast)


Angehängte Dateien:

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

von Axel Stab (Gast)


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.

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
Noch kein Account? Hier anmelden.