Skocz do zawartości

pytań kilka odnośnie usart


esiu_

Pomocna odpowiedź

Witam

Mam pytania dotyczące pracy USART.

Rozumiem że komunikacja działa tzw tle i procesor może zajmować się czymś innym w trakcie wysyłania? Czy w efekcie jest mocno zakłócany, próbował ktoś kiedyś?

Widziałem większość programów czeka na odbiór/wysłanie ale nie jest usypiana tylko w pętli więc i tak jednostka pracuje skacząc w tą samą komórkę pamięci czy może czekanie w tych programach ma inne podłoże nie związane z sianiem zakłóceń?

Czy możliwe jest sprawdzanie flagi zakończenia wysyłania zamiast stosowania przerwania? Wydaje mi się, że niezależnie czy włączymy przerwanie to flaga przerwania będzie ustawiana i można ją z poziomu asm zawsze sprawdzić, czy mam rację?

Link do komentarza
Share on other sites

1.Można sprawdzać flagę, ale przerwania są dużo szybsze i prostsze w użyciu. Jak chcesz wysłać lub odebrać jakąś paczkę danych to robisz coś w stylu

2.Niektórym się wydaje, że czekanie na dane w głównej pętli jest prostsze. Faktycznie poza najprostszymi przypadkami jest to złudne i po chwili prowadzi do większej ilości problemów niż przerwania.

3.Wysyłanie danych jest w tle i nie wiem co masz na myśli przez "czy jest mocno zakłócany". Każda zmiana stanów tranzystora w procesorze to w pewnym sensie generowanie zakłóceń. Tylko w procesorze jest tyle tranzystorów, że obsługa sprzętowa usarta generuje jakiś ułamek ogólnych zakłóceń. Przy poprawnym projekcie płytki + kondensatory odsprzęgające nie będzie to żadnym problemem.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dzięki MirekCz za wyczerpującą odpowiedź, można zamknąć temat. Pomogłeś w związku z tym nacisnąłem w odpowiednie miejsce;) . Co do szybkości działania przerwania to się zgadza ale to wszystko zależy od tego co ja chcę żeby kontroler robił i w moim przypadku takowe przerwanie nie wchodzi w rachubę, gdyż chcę uzyskać konkretny czas pracy programu w głównej pętli. Stąd też pytanie o pracę w tle, jak wyślę dane do usart to chcę obliczać dalejw takich samych odstępach czyli np

main:
add
mul
jezeli flaga==1
wyslij kolejna paczke
else
nop
mov//chceżeby ten mov robił się zawsze w tym samym odstępie czasowym
add
lcall main
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

To zrób ten mov w przerwaniu timera i wtedy w głównej pętli robisz obsługę wysyłania/odbieranie danych z uarta. Inaczej zapewnienie idealnie powtarzalnego czasu wykonania tego mov jest bardzo trudne do zrealizowania, bo inaczej będzie trwała główna pętla programu z wysyłaniem danych, inaczej bez wysyłania, jeszcze inaczej z odbieraniem danych po usart...

Link do komentarza
Share on other sites

no właśnie dzięki temu magicznemu nop czas trwania z wysłaniem i bez ma trwać tyle samo, bo wysyłanie jest w tle i mogę kazać procesorowi robić inne rzeczy w tym czasie, czyli dalszy ciąg programu. Ja wiem że przerwanie się tu samo nasuwa ale przerwanie się nie nadaje. Przerwanie wcale nie jest takie szybkie, musi wrzucić dane na stos i po przerwaniu odstawić dane na miejsce co zajmuje kolejne takty.

Link do komentarza
Share on other sites

Zajmuje. Pytanie co Ty chcesz tam robić z taką wysoką częstotliwością? Dodatkowo masz problem, bo odebranie danych po usart to jedno, ale jakaś ich poważniejsza obróbka...?

Link do komentarza
Share on other sites

będę tylko nadawał dane także obróbka odebranych informacji nie wchodzi w rachubę. Powiedzmy że będzie to pomiar częstotliwości i współczynnika wypełnienia i chcę uzyskać jak największą częstotliwość odczytu i wydać jak najmniej. A może ktoś zna jakiś układ scalony który reaguje na zbocza i jednocześnie jest układem impulsowym zliczającym czas stanu wysokiego i wysyłającym to w dowolnej formie komunikacji i kosztuje mniej niż atmega8:)

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.