Hallo, ich versuche gerade die USI eines ATTINY25 softwaremäßig in eine UART umzubauen. Dazu habe ich mehrere Foren durchwühlt und habe letztendlich den Quellcode der AVR307 gewählt. Mein Problem hierbei ist, dass sich mein Code in folgender Zeile aufhängt: while ( UART_RxHead == UART_RxTail ); // Wait for incomming data Daten werden aber ständig an den Pin 0 geliefert (habe dieses mit einem Oszi überprüft) Der Pin ist als Input geschalten und mit einem Pull-Up versehen. Hoffe, dass mit jemand weiterhelfen kann. Danke, Stefan
wo werden denn die variabeln UART_RxHead, UART_RxTail geändert? volatile vergessen?
Nein, habe ich nicht vergessen werden hier geändert: --------------------------------------------- unsigned char USI_UART_Receive_Byte( void ) { unsigned char temp; while ( UART_RxHead == UART_RxTail ); temp = ( UART_RxTail + 1 ) & UART_RX_BUFFER_MASK; UART_RxTail = temp; return Bit_Reverse(UART_RxBuf[temp]); } --------------------------------------------- bzw. --------------------------------------------- ISR(USI_OVF_vect) { ... else { UART_RxHead = temphead; ... ---------------------------------------------
kopiert von Atmel //********** Static Variables **********// static unsigned char UART_RxBuf[UART_RX_BUFFER_SIZE]; static volatile unsigned char UART_RxHead; static volatile unsigned char UART_RxTail;
also als globale Variablen, falls du das wissen wolltest. Aber da es nie zu einem Usi-overflow kommt, kann der rx_head ja auch nie beschrieben werden
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.