UART Interrupt in MICO32

Gast #1255673
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren