Gast
#285023
Hallo Forum! Ich arbeite mit WinAVR auf einem ATmega8 und realisiere gerade eine MIDI-Anwendung. Über einen Sendepuffer und den UART möchte ich meine Messages versenden. Leider sendet der UART nichts, wenn ich ihn nutze. Das ist mein Puffer: BYTE UART_tx_buffer[16] = {0}; //UART Sendepuffer Hier hab ich mir noch einen "Descriptor" dazu gebaut: struct buffer_desc { volatile BYTE head:4; volatile BYTE tail:4; } RX_desc = {0},TX_desc = {0}; So beschreibe ich den Puffer: void UART_tx(BYTE data) { cli(); UART_tx_buffer[TX_desc.head++] = data; //Wert in den Puffer schreiben if(TX_desc.head == TX_desc.tail + 1) //Erster Wert im Puffer? UCSRB |= (1<<TXCIE); //Enable TX-INT sei(); } Und hier die Int-Routine: SIGNAL(SIG_UART_TRANS) { UDR = UART_tx_buffer[TX_desc.tail++]; if(TX_desc.head == TX_desc.tail) //Puffer leer? UCSRB &= ~(1<<TXCIE); //Disable TX-INT } Wenn ich die Standard-Sendefunktion (warten auf das UCSRA, ohne Puffer und INT) verwende funktioniert alles wunderbar. Fällt euch was auf? Hab ich nen Denkfehler? Grüße Laplace