USART w atmega - pytanie

Apr 08, 2011 36 Replies

W dataschicie wyczyta³em: UDRE: USART Data Register Empty TXC: USART Transmit Complete



oraz uchwyty przerwañ UDR Empty Handler USART TX Complete Handler



Czym siê tak naprawdê rózni±? Pierwsze przerwanie jest skutkiem bitu UDRE: USART Data Register Empty czyli wtedy kiedy data register staje siê pusty a drugie przerwanie to skutek bitu TXC: USART Transmit Complete czyli gdy transmisja jest kompletna. Mam rozumieæ ¿e pierwsze przerwanie UDRE wyst±pi wczesniej ni¿ przerwanie TXC gdy¿ opróznienie bufora wystêpuje wcze¶niej ni¿ wys³anie kompletnej ramki z bitem stopu i parzysto¶ci co ma miejsce w drugim przerwwaniu? Czy jest jakie¶ uzasadnione za i przeciw w stosowaniu pierwszego lub drugiego? Wydaje mi siê ¿e pierwszy przypadek daje nam ciut lepsz± ci±g³o¶æ w wysy³aniu strumienia wiêkszej ilo¶ci bajtów.



???


Marek


Tak bo tam jest jednobajtowe fifo.

Pozdr MiSter

U¿ytkownik "4CX250" <taunusmtv@poæta.³onet.pl> napisa³

Dokladnie o to chodzi - pierwsze stosujesz jesli chcesz wpisac kolejny bajt, aby oczekiwal w gotowosci do wyslania, drugie jak chcesz miec pewnosc ze wszystko wyslano, bo np trzeba wylaczyc nadajnik RS485.

J.

U¿ytkownik "AK" <_usuncieTo snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:4d9efd43$0$2498$ snipped-for-privacy@news.neostrada.pl...

No nie do koñca FIFO gdy¿ FIFO z za³o¿enia jest ³adowany i opró¿niany _szeregowo_ bit po bicie pierwszy wszed³ pierwszy wyjdzie a tu w atmedze wpis do tego rejestru nie jest szeregowy leczrównolegle 8 bitów a oprózniany jest tylko szeregowo wiêc po prostu jest to zwyk³y rejestr przesuwny. Tak gwoli ¶cis³o¶ci.

Marek

Gwoli ¶cis³o¶ci fifo mo¿e byæ równoleg³e, bajtowe.

U¿ytkownik "Lelek@" snipped-for-privacy@iw.iw napisa³ w wiadomo¶ci news:inn11b$8cu$ snipped-for-privacy@opal.futuro.pl...

Piszesz zupe³nie o czyms innym. Transmisja USART jest bitowa nie bajtowa i rejestr jest bitowy a nie bajtowy.

Marek

Jest 1 bajtowy rejestr a za nim dopiero SR opró¿niany szeregowo i ten 1 bajt to pseudo fifo.

Masz albo flagê ¿e pusty SR albo ¿e puste fifo w stronê Tx co oznacza, ¿e dane zosta³y prze³adowane z rejestru do SR. Kurde napisz sobie te kilka linijek assemblera i przeæwicz na oscyloskopie na wolnej prêdko¶ci uartu. Wystaw sobie sygna³y od tych flag na nogach portu.i patrz co siê dzieje. Zapisz raz dwa bajty w 2 kolejnych cyklach maszynowych i mo¿e pojmiesz o co chodzi. To fifo jest po to ¿eby¶ mia³ ca³e 9, 10 czy 11 bitów czasu na prze³adowanie nadajnika kolejnym bajtem, ¿eby nie robi³y siê dziury miêdzy bajtami.

U¿ytkownik "Lelek@" snipped-for-privacy@iw.iw napisa³ w wiadomo¶ci news:inn29r$b96$ snipped-for-privacy@opal.futuro.pl...

Ale zrozum cz³owieku ¿e ty pisa³e¶ o rejestrze bajtowym jako bajt za bajtem. Paln±³e¶ o rejestrze fifo a to co jest w atmedze nie jest ¿adnym fifo. Nawet nie pseudo fifo. To jest zwyk³y rejestr przesuwny 8-bitowy z presetem równoleg³ym. Czy masz tam choæby jedno wej¶cie bitowe szeregowe do niego za pomoc± którego bitu po bicie jeste¶ go w stanie ca³ego za³adowaæ? No nie, wiêc o czym ty piszesz?

Marek

Tam s± 2 rejestry. Jeden jako poczekalnia, o którym mówimy fifo, a drugi przesuwny ze skrajnym bitem wystawionym do pinu. Tam s± 2 rejestry mieszcz±ce w sumie 2 bajty.

Ale sa _dwa_ rejestry bajtowe. Mmozna wpisac do wyslania dwa bajty, nie czekajac na transmisje pierwszego. Inne uP ( np ADuC7026 maja 3 najtowa kolejke FIFO)

Marcin

Gwoli ¶cis³o¶ci kolego 4CX250, Atmel nazywa to FIFO, wiec stosujmy nazewnictwo producenta: "...The two Buffer Registers operate as a circular FIFO buffer....."

W dniu 08.04.2011 15:31, 4CX250 pisze:

Tak działa fifo - z jednej strony bajty wchodzą a z drugiej wychodzą.

Jest FIFO. Doucz się ;)

Nawet nie pseudo, bo klasyczne, ale krótkie.

Jest przesuwny rejestr wyjściowy do którego dane trafiają z rejestru danych. Dzięki temu możesz wyekspediować do wysyłki DWA bajty jeden po drugim.

A ty wiesz o czym piszesz? Jesteś agresywny wobec kogoś kto próbuje Ci pomóc a przy tym Twoja wiedza przedstawia poziom gruntu... Jednym słowem zachowujesz się jak klasyczny lamer.

W dniu 08.04.2011 14:52, 4CX250 pisze:

I tu własnie kolega popełnił błąd... FIFO nie jest opróżniane "szeregowo bit po bicie"! Szerokość słowa w FIFO może być dowolna... tutaj jest fifo 8-bitowe. Czyli kolejne dane wchodzą jedna za drugą i w tej samej kolejności wychodzą... Ale są to dane 8-bitowe. I wszystkie 8-bitów wchodzi i wychodzi jednocześnie!! I dlatego to jest FIFO.

Powiem tak - gdyby nie było tej "poczekalni" fifo, to wówczas mógłbyś wpisać 1 bajt i dopiero po jego wysłaniu mógłbyś wpisać kolejny. Wcześniej nie możesz, bo nie masz gdzie :)

W innych prockach mamy np. 16-bajtowe FIFO... To znaczy, wrzucasz pierwszy bajt, on idzie do nadawania, a w tym czasie (nim się on wyśle) możesz wrzucić do UARTA (do FIFO) jeszcze 16 kolejnych bjatów. Wchodzą one szeregowo, jeden za drugim, ale jako całe bajty, a nie bit po bicie... .

W ATMGA masz FIFO, ale "1 bajtowe", przez co możesz wpisać 1 bajt w czasie nadawania. Faktem jest, że pojećie FIFO jednobajtowe jest trochę śmieszne, bo FIFO 1-bajtowe niczym nie różni się od stosu (FILO) jednobajtowego. Dlatego może nie czujesz, gdzie jest ta kolejka FIFO. Mam nadzieję, że powyższe przykłady Ci to wyjaśnią :).

Pozdrawiam Konop

W USART'cie? Niemożliwe - musi mieć co najmniej dwa bajty. Mogę sobie wyobrazić UARTa na jednym rejestrze - USARTa nie da rady.

U¿ytkownik "Michoo" <michoo snipped-for-privacy@vp.pl napisa³ w wiadomo¶ci news:inn7fe$om8$ snipped-for-privacy@news.onet.pl...

Nadajnika?

W dataschicie mowa o FIFO odbiornika ja poruszam problem nadajnika.

Gdyby by³ FIFO to by³by ³adowany szeregowo bit po bicie a nie jest. W nadajniku rejestr ten ³adowany jest tylko i wy³±cznie równolegle z rejestru UDR. Oczywi¶cie ca³y czas mowa o rejestrze przesuwnym nadajnika.

Marek

Uzytkownik "Marcin" snipped-for-privacy@o2.pl napisal w wiadomosci news: snipped-for-privacy@m13g2000yqb.googlegroups.com...

Ale polaczone równolegle nie szeregowo. Zobacz na rysunek. Zawartosc rejestru UDR (transmit) kopiowana jest _równolegle_ do Transmit Shift Register czyli do rejestru przesuwnego. Jak widzisz nie wystepuje tu ladowanie tego rejestru bit po bicie szeregowo. Z rejestru tego w takt zegara bit po bicie wysuwany jest bajt do Pin Control i dalej na nózke procka. Miedzu czasie Parity Generator zlicza bity i na koncu kiedy ostatni bit nadawanego bajtu wyjdzie z rejestru przesuwnego dokleja swój bit parzystosci. Gdy ostatni bit wysylanego bajtu opusci rejestr przesuwny kopiowany jest do tego rejestru drugi bajt który oczekiwal w rejestrze UDR.

Czy pisze tu gdzies o rejestrze FIFO nadajnika? "The Transmitter consists of a single write buffer, a serial Shift Register, parity generator and control logic for handling different serial frame formats" Ten rejestr przesuwny ladowany jest równolegle nie szeregowo a idea rejestru FIFO to first input first output. W rejestrze FIFO dane dopisywane sa na koncu kolejki. Jezeli ja wpisuje równolegle do rejestru cale 8 bitów to jak to mozna nazwac dopisywaniem na koncu kolejki?

Marek

Marek

U¿ytkownik "Konop" snipped-for-privacy@gazeta.pl napisa³ w wiadomo¶ci news:inn90d$92n$ snipped-for-privacy@inews.gazeta.pl...

Czujê czujê. Spoko. W USART dane wysy³ane mog± sk³adaæ siê z 5 do 9 bitów wiêc nawet nie mo¿na mówiæ o bajcie lecz o bitach, jakims s³owie n-bitowym. Na stronie 140 Datasheet ATmega 32 jest rysunek. Odpowiedz mi co widzisz? Czy TRANSMIT SHIFT REGISTER jest rejestrem przesuwnym ³adowanym równolegle, czy ³adowanym szeregowo rejestrem FIFO? Czy widzisz w nim gdzie¶ wej¶cie szeregowe? Je¿eli tak by by³o to rejestr UDR (Transmit) tak¿e musia³ by byæ rejestrem przesuwnym z drugim wej¶ciem zegarowym ale tego nie ma. Wiêc?

Marek

Nic z ciebie bie bedzie, ani konstruktor ani programista :-)

Proponuje nie karmic trola :-)

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required