MICO32 UART will nicht richtig funktionieren

Gast #1849638
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:
1
MicoUartCtx_t    *UartInterface;
2

3
static void myISR( int intrLevel, void * data )
4
{
5
  MicoUartCtx_t * TempUart   = (MicoUartCtx_t *) data ;
6
  unsigned char ucChar;
7
  
8
  if (MicoUart_getC(TempUart,&ucChar)==0)
9
  {
10
    printf("0x%X\n", ucChar);
11
    TOGGLE_BIT(PortB, LATLED1);
12
  }
13
  TOGGLE_BIT(PortB, LATLED2);
14
    
15
    return;
16
}
17

18
int main (void)
19
{
20
  UartInterface = (MicoUartCtx_t *) MicoGetDevice("UART1");
21
  if (UartInterface == 0)
22
  {
23
    if (DEBUG)
24
      printf("Init Error: UART\n");
25
    return -1;
26
  }
27

28
  //  Init Uart-Instance
29
  MicoUartInit(UartInterface);
30

31
  //  ISR einrichten  
32
  MicoRegisterISR(UartInterface->intrLevel, UartInterface, myISR);
33
  
34
  while(1);
35
  
36
  return 0;
37
}

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

Gruß
R.

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