mikrocontroller.net

Forum: FPGA, VHDL & Co. Xilkernel UART Interrupt Reset


Autor: gernoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich hab folgendes Problem: auf meinem ML507 (Xilinx Virtex 5 FX mit PPC) 
fahre ich die UART (FTDI Chip) im Interrupt Modus (Receive). Anbei ist 
mal der Xilkernel Thread mit Callback gepostet. Hier nun meine Frage: 
Ich krieg den Interrupt genau einmal (wenn ich was sende), dannach ist 
Schluss. Erneuter Aufruf vom XUart_Enable_Interrupt bringt nix, ja 
selbst die (dyrtie) variante, die UART zu resetten und neu zu 
Initialisieren auch nicht.

Eventuell kennt jemand aus der Hüfte ( ;-) ) die Funktion, die das Flag 
resettet. In der xintc.h bin ich übrigens auch nicht fündig geworden.

Vielen Dank

Der (Bsp.) Code

void* communication_worker_thread(void *arg)
{
  XUartLite uart;
  XUartLite_Config myCfg;
  //...
  XUartLite_CfgInitialize(&uart,&myCfg,XPAR_RS232_DTE_BASEADDR);
#if USE_UART_IN_INTERRUPT_MODE
  register_int_handler(UART_INTERRUPT_INTR,(XInterruptHandler)XUartLite_InterruptHandler,(void *)&uart);
  uart.RecvHandler = (XUartLite_Handler)USB_UART_RECEIVE_HANDLER; // define aus xparameters.h umgebogen
  XUartLite_EnableInterrupt(&uart);
  enable_interrupt(UART_INTC); 
#endif
  return NULL;
}

void USB_UART_RECEIVE_HANDLER(void)
{
  NACKED_TRACE("UART interrupted!\r\n");
  
  // --> wie wieder freischalten
}


Autor: gernoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, der Fehler lag ganz wo anders. Hab mir den Stack mit dem malloc 
zerknallt.

Also: nie die STD C Funktionen für dynamischen Speicher nutzen, wenn man 
MT xilkernel benutzt. (Gibts auch specs für: edk10_oslib_rm.pdf )

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gernoy schrieb:
> Also: nie die STD C Funktionen für dynamischen Speicher nutzen, wenn man
> MT xilkernel benutzt.

Danke für den Hinweis. Oft kommt ja dann nur: es geht und das Forum 
stirbt dumm :-)

Duke

Autor: gernoy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn jemand den Thread treffen sollte:
Vergesst den Handler von oben ;-):
Der Prototype des Handlers muss lauten:
void USB_UART_RECEIVE_HANDLER(void *CallBackRef, unsigned int EventData)
{
// jetzt Xil_Kernel like ;-)
  xil_printf("UART interrupted!\r\n");
}
printf ist nämlich genauso corruptet!

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.