Przesyłam sobie dane przez RS485. Na linii są dwa urządzenia i oba mają mieć możliwość nadawania. W związku z tym, gdy jedno skończy nadawać, powinno wyłączyć układ sterujący linią. Niestety jest problem przy transmisji USARTem przez DMA. Przerwanie transfer complete generowane jest wtedy, gdy DMA skończy swoją pracę, natomiast jeszcze nie wszystko zdążyło się faktycznie wysłać. Gdy w tym przerwaniu wyłączam sterownik RS485, urządzenie odbiorcze nie dostaje dwóch ostatnich bajtów. Jeśli testowo usunę wyłączanie układu od RS485 to wszystko działa poprawnie, bajty się nie gubią, oczywiście z wyjątkiem tego, że drugie urządzenie nie może nadawać.
Zastanawiam się, jak to rozwiązać. Można by w obsłudze przerwania transfer complete dodać krótkie opóźnienie, ale byłoby to trochę nieeleganckie. Można by też sprawdzać flagę USARTa, z tym, że skoro gubione są dwa ostatnie bajty, to sprawdzanie flagi rozwiązuje problem tylko przedostatniego bajtu, a ostatniego już nie. Można by też po prostu wysyłać o dwa bajty więcej, ale to chyba byłoby jeszcze brzydsze niż opóźnienie. Czy ktoś z Forumowiczów ma jakiś lepszy pomysł?
Zastanawiam się, jak to rozwiązać. Można by w obsłudze przerwania transfer complete dodać krótkie opóźnienie, ale byłoby to trochę nieeleganckie. Można by też sprawdzać flagę USARTa, z tym, że skoro gubione są dwa ostatnie bajty, to sprawdzanie flagi rozwiązuje problem tylko przedostatniego bajtu, a ostatniego już nie. Można by też po prostu wysyłać o dwa bajty więcej, ale to chyba byłoby jeszcze brzydsze niż opóźnienie. Czy ktoś z Forumowiczów ma jakiś lepszy pomysł?