www.mikrocontroller.net

Forum: FPGA, VHDL & Co. MICO32 UART will nicht richtig funktionieren


Autor: Roland (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich experimentiere gerade mit meiner MICO32 UART herum und hätte das 
ganze gern Interrupt gesteuert.

Die Uart ist folgendermaßen konfiguriert:
Baudrate 115200
Databits 8
Stopbits 1
Tx/Rx FIFO ENABLED
Use Interrupt ENABLED
Rx Buffer Size 2
Tx Buffer Size 2

Die Lage ist folgendermaßen:
- Die ISR wird ordnungsgemäß aufgerufen wenn ich von extern ein Zeichen 
an den MICO32 schicke.
- In der ISR liefert die Empfangsfunktion <MicoUart_getC> aber nie eine 
<0> (erfolgreiche Übernahme des Zeichens aus der UART)
- Die ISR wird nach jedem Verlassen sofort wieder aufgerufen. Der 
Interrupt scheint also nicht gelöscht zu werden.

Frage:
- Hab ich etwas bei der Konfiguration vergessen?
- Wieso werden die einzelnen Zeichen nicht übernommen (ohne Interrupt 
funktionierts)?
- Muss ich den Interrupt per Hand löschen? Wenn ja, wie?

Der Code sieht so aus:
MicoUartCtx_t    *UartInterface;

static void myISR( int intrLevel, void * data )
{
  MicoUartCtx_t * TempUart   = (MicoUartCtx_t *) data ;
  unsigned char ucChar;
  
  if (MicoUart_getC(TempUart,&ucChar)==0)
  {
    printf("0x%X\n", ucChar);
    TOGGLE_BIT(PortB, LATLED1);
  }
  TOGGLE_BIT(PortB, LATLED2);
    
    return;
}

int main (void)
{
  UartInterface = (MicoUartCtx_t *) MicoGetDevice("UART1");
  if (UartInterface == 0)
  {
    if (DEBUG)
      printf("Init Error: UART\n");
    return -1;
  }

  //  Init Uart-Instance
  MicoUartInit(UartInterface);

  //  ISR einrichten  
  MicoRegisterISR(UartInterface->intrLevel, UartInterface, myISR);
  
  while(1);
  
  return 0;
}

Vielleicht kennt sich jemand damit aus. Wäre toll.

Gruß
R.

Autor: Uwe Bonnes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Milkymist Projekt wird heftig mit dem Mico32 gearbeitet. Schau doch 
mal nach, ob da was geaendert wurde.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie testest Du Dein System? Auf der Hardware? Im Simulator?
Funktioniet es, wenn Du den FIFO deaktivierst?

Duke

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.