UART Interrupt in MICO32

Gast #1255673
Hallo,

ich habe ein Problem mit einem UART im MICO32 und hoffe das mir jemand 
helfen kann.

Ich habe den UART mit 19200Bd aufgesetzt, er funktioniert gar nicht so 
schlecht wenn ich direkt im Hauptprogramm einfach solange warte, bis ich 
meine 18 BYTE empfangen habe.
Nun möchte ich die Empfangsroutine jedoch interruptgesteuert machen, 
also wenn der UART ein BYTE empfangen soll er in die ISR "void UART_ISR 
(void)" hüpfen, damit ich die Bytes entsprechend behandeln kann, und 
habe keinen Plan wie das funktioniert.
Falls jemand ein Beispiel hat wie man die ISR für einen UART schreibt 
dann bitte postet eure Lösung.

Herzlichen Dank
Bernhard
(Firma: Helion GmbH) #1257614
Hallo Bernhard,

da hilft es, wenn man auf die generellen Serviceroutinen zurückgreift, 
die die Interruptverarbeitung organisieren.

Im "Software Development User Guide" lm32_swdevug.pdf ab S. 193 ist der 
Prozess beschrieben.

Im Wesentlichen musst Du die ISR dem System bekannt machen: 
MicoRegisterISR

Viele Grüße
Arndt
Gast #1257637
Hallo Arndt,

erstmals vielen Danke für deine Antwort, habe das pdf durchforstet und 
(meiner Meinung nach) auch alles richtig gemacht, aber meine ISR wird 
einfach nicht durchlaufen!!

Hättest du vielleicht ein Beispiel wo alles drin steht das man machen 
muss um einen UART interruptfähig zu machen??

Herzlichen Dank
Bernhard P.
(Firma: Helion GmbH) #1257861
Hallo Bernhard,

poste hier mal den C-Code, vielleicht findet sich ja eine Auffälligkeit. 
Mögliche Fehlerursachen sind:
1. Interruptnummer stimmt nicht mit der Nummer im MSB überein
2. Interrupts sind nicht freigegeben
3. Interrupt in der UART ist falsch konfiguriert -> Schau mal mit dem 
Reveal rein, ob die Interruptleitung überhaupt aktiviert wird.

Viele Grüße
Arndt
Gast #1258177
Hallo Arndt,

ich habe einen UART aufgesetzt mit dem Namen "uart", der IRQ ist auf 0 
gesetzt (höchste Priorität).
Im c File:
const char *UART_INSTANCE_NAME = "uart";      /* name of uart-instance 
in the platform */

und im main(void):
unsigned int IntLevel = 0;

MicoUartCtx_t *pUart = (MicoUartCtx_t 
*)MicoGetDevice(UART_INSTANCE_NAME);
MicoEnableInterrupt(IntLevel);

Bin mir jetzt nicht sicher was ich schreiben muss um die ISR zu 
initialisieren?!

Herzlichen Dank
Bernhard P.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.