Problem z WinAVR?

Witam sredecznie.

Zastanawiam sie dlaczego kompilator WinAVR nie traktuje jednoznacznie takich oto intrukcji:

UCSRC |= (1<<URSEL); UCSRC |= (1<<USBS); UCSRC |= (3<<UCSZ0);

i druga:

UCSRC |= (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);

Przeciez te dwie instrukcje robia to samo, jednak WinAVR ustawia te bity inaczej, a symulator z VMLab zglasza mi taki blad: [PC = $006B, Time = 2.25 ms, {PER}]: USART: Sorry, only 7 and 8 bits supported

Z gory dziekuje za pomoc.

Reply to
Piotr
Loading thread data ...

Co to znaczy ustawia inaczej ? Końcowa zawartość UCSRC jest taka sama w obu przypadkach ? Przeglądałeś listingi po kompilacji ?

Reply to
Zbych

Sun, 19 Jun 2005 20:45:13 +0200, na pl.misc.elektronika, Piotr napisał(a):

No właśnie robią zupełnie coś innego : UCSRC |= (1<<URSEL); 64: 80 b5 in r24, 0x20 ; 32 66: 80 68 ori r24, 0x80 ; 128 68: 80 bd out 0x20, r24 ; 32 UCSRC |= (1<<USBS); 6a: 80 b5 in r24, 0x20 ; 32 6c: 88 60 ori r24, 0x08 ; 8 6e: 80 bd out 0x20, r24 ; 32 UCSRC |= (3<<UCSZ0); 70: 80 b5 in r24, 0x20 ; 32 72: 86 60 ori r24, 0x06 ; 6 74: 80 bd out 0x20, r24 ; 32 UCSRC |= (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); 76: 80 b5 in r24, 0x20 ; 32 78: 8e 68 ori r24, 0x8E ; 142 7a: 80 bd out 0x20, r24 ; 32

Dostęp do UCSRC masz tylko przy _jednoczesnie_ ustawionym bicie URSEL; więc w pierwszym przypadku przypisania UCSRC |= (1<<USBS); UCSRC |= (3<<UCSZ0); powodują wpis do UBRRH. Drugi przypadek wykonuje zapis prawidłowo.

Reply to
Jurek Szczesiul

No to wrzuć ten listing z fragmentem odpowiedzialnym za konfigurację uarta i sprawdź w innym symulatorze (avr studio ?) stan bitów po skonfigurowaniu uarta zamiast pisać, że ci się coś wydaje.

Reply to
Zbych

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.