Powrót

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! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (Cappuccino = 10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Postaw mi kawę na buycoffee.to
Następnie wybrać:
– jeśli jeden numer ZE – CAPPUCINO (10 zł),
– jeśli kilka numerów ZE – WSPIERAM ZA. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dołączyć wiadomość dla Twórcy” i tu wpisać, który numer lub numery mamy wysłać na podany adres e-mailowy.