Hallo,
ich habe eine Frage zum Senden per UART Tx Interrupt.
Ich verwende das EUSART Register (Controller = AT 90PWM316), da ich auch
auf 16 Bit umschalten können muss.
Das Problem ist, dass wie hier im Beispiel ersichtlich, die Daten AA,
BB, CC und DD nur dann erfolgreich hintereinander gesendet werden, wenn
ich zwischen jedem UDR ein kleines delay von 10ms einbaue.
Hat jemand einen Vorschlag, wie ich das eleganter lösen kann?
Hier mein Codeausschnitt:
1 | ISR (USART_TX_vect)
|
2 | {
|
3 | UCSRB |= (1 << RXCIE) + (1 << RXEN); //enable RX
|
4 | }
|
5 |
|
6 | if (value[0] == 0x77)
|
7 | {
|
8 | TIMSK0 &= ~(1<<TOIE0); // Timer0 overflow interrupt enable
|
9 | UCSRB &= ~((1 << RXCIE) + (1 << RXEN)); // disable RX
|
10 | EUDR = 0; // Oberes Datenregister (MSB) (Muss zuerst beschrieben werden!)
|
11 | UDR = 0xAA; // Unteres Datenregister (LSB) (Daten werden erst mit UDR übertragen!)
|
12 | UDR = 0xBB;
|
13 | UDR = 0xCC;
|
14 | UDR = 0xDD;
|
15 | }
|