Skocz do zawartości

Stwierdzenie końca transmisji po UART


RFM

Pomocna odpowiedź

Wystarczy odczytać odpowiednią flagę rejestru odpowiadającego za transmisję uart. Nazwa rejestru i flagi zależy od użytego mikrokontrolera, warto w tym celu zajrzeć do DS, poza tym we frameworku arduino  powinno być jakieś makro albo funkcja do tego ale nie pamiętam bo tego typu zadania obsługuję na rejestrach.

Link do komentarza
Share on other sites

33 minuty temu, atMegaTona napisał:

Wystarczy odczytać odpowiednią flagę rejestru odpowiadającego za transmisję uart.

odpada bo

33 minuty temu, atMegaTona napisał:

Nazwa rejestru i flagi zależy od użytego mikrokontrolera,

 

33 minuty temu, atMegaTona napisał:

we frameworku arduino  powinno być jakieś makro albo funkcja do tego

Nie znalazłem.

Aktualizacja:

W https://github.com/esp8266/Arduino/blob/master/cores/esp8266/uart.h znalazłem funkcje inne niż dla AVR. Musze zobaczyć co robi "art_tx_free(uart_t* uart);" bo to chyba to o co omi chodzi.

To jest to

uart_tx_free(uart_t* uart)
{
    if(uart == NULL || !uart->tx_enabled)
        return 0;

    return UART_TX_FIFO_SIZE - uart_tx_fifo_available(uart->uart_nr);
}

Ale cóż, jak zwykle, sam musiałem poszukać. Na forach z pomocą różnie bywa, dlatego wiele osób, gdy rozwiąże problem, to nie piszą jak. Ja nie będę jak syn mojego ojca i dam "na tacy" rozwiązanie problemu.

  • Lubię! 1
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

Nie do końca. Funkcja zwróci 0 gdy wysłała ostatni bajt do UART. W przypadku AVR po czasie 2 bajtów (AVR ma 2 bajtowe) transmisja faktycznie będzie zakończona. W Większości uC po czasie 1 bajtu a LPC po 16 bo ma 16 bitowe FIFO (odpowiednik kultowego 16C550).

Problem przełączenia linii kierunku nadal pozostaje.

Aktualizacja:

Jest jeszcze funkcja

uart_tx_fifo_available(const int uart_nr)
{
    return (USS(uart_nr) >> USTXC) & 0xff;
}

Pozostaje albo wypróbować albo zagłebie się w dokumentacje ESP.

Aktualizacja:

Kto zauważył bałagan w funkcjach?

uart_tx_fifo_available(const int uart_nr)
{
    return (USS(uart_nr) >> USTXC) & 0xff;
}

size_t uart_tx_free(uart_t* uart)
{
    if(uart == NULL || !uart->tx_enabled)
        return 0;

    return UART_TX_FIFO_SIZE - uart_tx_fifo_available(uart->uart_nr);
}

Raz parametrem jest numer UART innym razem wskaźnik 🙂 To się nazywa "przyjazne" oprogramowanie i "ułatwienie" pracy programiście.

Ciągle nie mogę znaleźć odpowiedzi na pytanie "jak z takimi problemami ma sobie poradzić początkujący?" Gdzie te przyjazne programowanie?

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.