Die uart_putc Methode sieht so aus:
1 | /*************************************************************************
|
2 | Function: uart_putc()
|
3 | Purpose: write byte to ringbuffer for transmitting via UART
|
4 | Input: byte to be transmitted
|
5 | Returns: none
|
6 | **************************************************************************/
|
7 | void uart_putc(unsigned char data)
|
8 | {
|
9 | unsigned char tmphead;
|
10 |
|
11 |
|
12 | tmphead = (UART_TxHead + 1) & UART_TX_BUFFER_MASK;
|
13 |
|
14 | while ( tmphead == UART_TxTail ){
|
15 | ;/* wait for free space in buffer */
|
16 | }
|
17 |
|
18 | UART_TxBuf[tmphead] = data;
|
19 | UART_TxHead = tmphead;
|
20 |
|
21 | /* enable UDRE interrupt */
|
22 | UART0_CONTROL |= _BV(UART0_UDRIE);
|
23 |
|
24 | }/* uart_putc */
|
könnte es sein, das diese Schleife
1 | while ( tmphead == UART_TxTail ){
|
2 | ;/* wait for free space in buffer */
|
3 | }
|
ununterbrochen ausgeführt wird wenn die Interrupts ausgeschaltet werden,
denn der Buffer wird ja nur in der Interrupt Methode geleert?
Aber eigentlich ist das bei mir nicht der Fall, denn die Zeichen auf dem
Display werden plötzlich falsch dargestellt. Das Display kommuniziert
über SPI, aber ohne Interrupts. Das ganze ist mir sehr schleierhaft.