Schönen guten Tag,
Ich kann mir ein Ereignis nicht erklären. Und zwar funktioniert das
Empfangen über Uart1 im Interrupt einwandfrei mit:
1 | void uart1_irq_init(void)
|
2 | {
|
3 | UART1_LCR = 0x03; //8bit lenght
|
4 | UART1_FCR = 0x07; //Enable and reset TX and RX FIFO.
|
5 | UART1_IER |= 0x7; //Enable RBR/THRE/RX Line Interrupt
|
6 | VICVectAddr0 = (unsigned)uart1isr; //ISR deklarieren
|
7 | VICVectCntl0 = (1<<5)|7; //Interrupt Priority
|
8 | VICIntEnable |= (1<<7); //Uart1 Interrupt enable
|
9 | }
|
10 |
|
11 | void uart1isr(void)
|
12 | {
|
13 | uartdata=UART1_RBR; //glob.Var zuordnen
|
14 | VICVectAddr = 0; //"Submit" Interrupt
|
15 |
|
16 | }
|
Jedoch wenn ich etwas senden möchte bleibt er hängen nachdem er das Byte
gesendet hat. Mit der Funktion sende ich ein Byte:
1 | int uart1Putch(int ch)
|
2 | {
|
3 | while (!(UART1_LSR & ULSR_THRE)) // wait for TX buffer to empty
|
4 | continue; // also either WDOG() or swap()
|
5 | UART1_THR = (uint8_t)ch; // put char to Transmit Holding Register
|
6 | return (uint8_t)ch; // return char ("stdio-compatible"?)
|
7 | }
|
Das Senden funktioniert wunderbar nur das Hängenbleiben kann ich mir
nicht erklären.
Kann es daran liegen, dass ich zyklisch (alle 90ms) etwas empfange und
dann irgendwo ein Speicher vollläuft, oder behindert meine ISR das
Senden?
Schonmal Vielen Dank im Vorraus.