BlueDraco napisał: Po ustawieniu TXC już jest za późno na załadowanie bajtu, jeśli transmisja ma iść ciągle!
Ale w czym problem? Pomiędzy parami bajtów zostaną dodane krótkie odstępy, o ściśle określonym czasie trwania i wartości 1. I to nawet lepiej bo można je wykorzystać jako początek nadawania kolejnego bitu, w efekcie można upchnąć w dwubajtową ramkę (z wyjątkiem pierwszej) nie 6 a 7 bitów. W AVR czas wejścia w przerwanie jest ściśle określony +/- 1 takt CPU. Jitter na poziomie 60 ns nie przeszkadza w transmisji do WSa.
Dodano po 11 [minuty]:
BlueDraco napisał: Nie możesz załadować w ciemno dwóch bajtów do bufora UART. Przerwanie jest zgłaszane, gdy jest wolne miejsce w buforze - na jeden bajt.
Piszesz o cyklach procesora i instrukcjach na poziomie asemblera - obejrzyj początek i koniec procedury obsługi przerwania napisanej w C i skompilowanej na AVR - zajmie to więcej cykli, niż potrzebuje Cortex. Dodaj jeszcze skok do procedury i możliwości adresowania pamięci przez AVR i masz pełny rozmiar nieszczęścia.
Aż sobie sprawdziłem - cała funkcja obsługi takiego przerwania zajmuje 38 taktów + 4/5 taktów na wejście w ISR, łącznie max 43 takty. Wobec 123, które mamy (lub nawet 62 jeśli napiszemy to kiepsko i mamy 260k przerwań) to i tak w najgorszym przypadku daje nam 30% czasu procesora do dyspozycji, a w bardziej optymalnym wariancie mamy aż 65% czasu MCU do dyspozycji. Bez jaj, to wystarczy, żeby naprawdę poszaleć.
BlueDraco napisał: Nie wyobrażam sobie użycia AVR do prostych, ale wycyzelowanych animacji, które robiłem, choćby z powodu użycia w nich arytmetyki 32-bitowej - takie operacje wymagają na AVR min. 20x tyle cykli zegara, co na maszynie 32-bitowej - dostęp do danych w pamięci, prosta arytmetyka, odesłanie wyniku, ładowanie i modyfikacja wskaźników. po co tak mordować procesor, który ledwie dycha.
Są operacje arytmetyczne, które zajmą znacznie więcej czasu na 8-bitowcu, ale 20x więcej to tylko szczególne przypadki. Warto byłoby więc sprecyzować o jakich operacjach mówimy, bo na pewnym poziomie abstrakcji to to co napisałeś może być prawdą lub bzdurą. Prosty przykład - operacje dodawania i odejmowania int na 8-bitowcu będą tylko 4-krotnie dłuższe. Operacje mnożenia na AVR to 4 mnożenia i 3 dodawania o niepełnej długości. Dla float już może być różnie. Ale nieważne. Pochwal się jaka transformacja wymagała operacji na typie 32-bitowym?