
Jak pobierać dane z FIFO?
Bufor FIFO jest zbawieniem dla wolnych mikroprocesorów i dużych szybkości transmisji. Obsługa FIFO zazwyczaj nie wymaga modyfikacji kodu programu, ale jego zmiana pozwala zwiększyć wydajność systemu.
FIFO (First In, First Out – pierwszy na wejściu, pierwszy na wyjściu) najszybciej pojawiło się w UART (16C550 – 16 bajtów dla RX i TX), ale można spotkać je także w SPI (STM32 – 8 bajtów). Jak działa FIFO można dowiedzieć się z Internetu: https://pl.wikipedia.org/wiki/Kolejka_(informatyka). FIFO zapobiega gubieniu danych gdy czasem przerwanie wykonuje się zbyt długo. Może się tak zdarzyć gdy dana pojawiła się w czasie wykonywania przerwania/przerwań o takim samym poziomie, jaki ma UART. W takiej sytuacji zanim obsłużone będzie przerwanie dla UART może pojawić się kolejna dana, która będzie utracona. Taki „zlepek” przerwań będzie występował rzadko, więc błąd może być trudny do znalezienia.
Wydaje się, że problem rozwiązuje DMA. Niestety nie zawsze do końca. Załóżmy że DMA zapisuje bufor na 1000 znaków, a otrzymujemy ciągły strumień 1100 znaków. Po odebraniu 1000 znaków DMA wywoła przerwanie, które przygotuje DMA do przyjęcia kolejnych danych. Obsługa przerwania i ponowna konfiguracja DMA zajmuje trochę czasu, w którym może być przesłane kilka znaków. Niestety DMA je „zgubi”. Taki problem rozwiązuje FIFO. W czasie gdy DMA nie działa dane trafiają do FIFO. Po uruchomieniu DMA szybko odbierze dane z FIFO, po czym kolejne w takt ich napływania.
Porada: Jeśli czas wykonywania przerwania zbliża się do czasu transmisji danej oznacza to rychłe problemy. Obsługa przerwania powinna być wielokrotnie krótsza od czasu transmisji danej.
Wróćmy do problemu przerwań. Typowa funkcja odbierająca znaki UART wygląda jak na listingu 1.
IF odebrano znak THEN odczytaj znak REM zazwyczaj odczyt znaku kasuje flagę odbioru i przerwanie zapisz w odbiorczym buforze kołowym ENDIF
(…)
——– ciach! ——–
To jest tylko fragment artykułu, którego pełna wersja ukazała się w numerze styczniowym czasopisma Zrozumieć Elektronikę (ZE 2/2024). Pełną wersję czasopisma znajdziesz pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 2/2024 znajduje się tutaj.
SaS, ZE
sas.ze@vp.pl
Uwaga! Wskazówki, jak nabyć archiwalne numery znajdują się na stronie: https://piotr-gorecki.pl/n11
.