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.