logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

XMRGA128A3U - zapełniony bufor w trakcie transmisji UART

Kudzu 04 Sie 2018 14:13 387 2
REKLAMA
  • #1 17366166
    Kudzu
    Poziom 14  
    Zacznę bez zbędnego wstępu.
    Do czujnika PMSA003 wysyłam kilka ramek w trakcie działania programu - wszystkie mają 7 bajtów. Xmegę debuguję, a USART obserwuję analizatorem stanów.
    Dwie pierwsze instrukcje docierają do czujnika poprawnie. Kiedy jednak wychodzi trzecia, to po 5 bajtach stan linii TX pozostaje niski, a flaga DREIF wskazuje na brak miejsca w buforze. Wystarczy jednak, że zapałzuję debugowanie i włączę ponownie - wtedy natychmiast flaga wskakuje i dosyłane są ostatnie dwa bajty. Ewentualnie muszę odczekać zaprogramowany czas gdy program ponawia wysłanie tej ramki.

    Jakie mogą być teoretyczne przyczyny nie opróżniania buforu USART? Myślałem, że dane, zgodnie z FIFO, wędrują wprost na rejestr przesuwny nadajnika, a ograniczeniem jest jedynie prędkość transmisji.
  • REKLAMA
  • #2 17366297
    Konto nie istnieje
    Konto nie istnieje  
  • #3 17366418
    Kudzu
    Poziom 14  
    nowyARM napisał:
    Bez kodu programu, to tylko telefon do Wróżbity Macieja.

    Spodziewałem się takiej odpowiedzi, zresztą słusznej. Niestety kod jest niemały i rozbity na pliki. Dla cierpliwych i chętnych załączam cały spakowany projekt Atmel Studio 7.0

    Generalnie za transmisję odpowiedzialne są takie funkcje:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    ale to tylko kropla w morzu.


    Przypomnę jeszcze, że pierwsze dwie ramki na początku programu wychodzą prawidłowo.

    EDIT:

    Znalazłem przyczynę problemu - tryb uśpienia. Jeśli wyłączę usypianie, to wszystko zaczyna działać normalnie. Spróbuję się z tym uporać sam, ale niezależnie od wyników opiszę sytuację.
REKLAMA