www.mikrocontroller.net

Forum: FPGA, VHDL & Co. UART Interrupt in MICO32


Autor: Bernhard P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Arndt Bußmann (Firma: Helion GmbH) (bussmann)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Arndt Bußmann (Firma: Helion GmbH) (bussmann)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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