Hallo,
ich habe ein Problem mit der ISR eines Uarts im Mico32. Ich möchte über
den Uart interruptgesteuert Daten empfangen. Die Baudrate beträgt
250kBd. Ich habe im MSB den Uart hinzugefügt und konfiguriert.
Im main.c habe ich folgendes hinzugefügt:
1 | const char *const dmx_in2_INSTANCE_NAME = "dmx_in2";
|
2 | MicoUartCtx_t *DMX_IN2 = (MicoUartCtx_t *)MicoGetDevice(dmx_in2_INSTANCE_NAME);
|
3 | MicoRegisterISR(DMX_IN2->intrLevel, DMX_IN2, myUART_ISR);
|
4 | *((volatile unsigned char *)((DMX_IN2->base)+4)) = 0x01;
|
und die ISR folgendermaßen:
1 | static void myUART_ISR( int intrLevel, void * data )
|
2 | {
|
3 | MicoUartCtx_t *DMX_IN2 = (MicoUartCtx_t *)MicoGetDevice(dmx_in2_INSTANCE_NAME);
|
4 | unsigned long uart_char;
|
5 | unsigned long *uart_address_pointer;
|
6 | uart_address_pointer = (DMX_IN2->base) ; // UART Receive Buffer
|
7 | uart_char = *uart_address_pointer; // Read received data
|
8 |
|
9 | lcd_string(0,1,"in ISR geschrieben");
|
10 |
|
11 | uart_address_pointer = (DMX_IN2->base) + 8; // offset or UART IIR = 0x8
|
12 | uart_char = *uart_address_pointer; // reading IIR clears all UART interrups
|
13 |
|
14 | return;
|
15 | }
|
Da ich mir in der ISR den Text "in ISR geschrieben" auf ein LCD
schreiben lasse, bin ich sicher, dass der Interrupt zwar aufgerufen aber
nicht mehr verlassen wird, das Programm bleibt stehen.
Hat vielleicht jemand eine Idee woran das liegen könnte?
Vielen Dank
Bernhard