June 17th, 2021

QuatCore

"МКО (Mil-Std1553) через UART", часть 2

Автомат Калашникова - устройство, превращающее стек в очередь (автора не знаю)

Мы торжественно написали заголовок, пора наполнять модуль содержанием!

В первую очередь, разберёмся с состояниями нашего конечного автомата.

Понятное дело, sIdle - "ожидание". В этом состоянии мы сидим, пока не получим командное слово, адресованное НАМ, не важно, корректно ли сочетание "приём/передача - подадрес - количество слов". Как только это случилось, переходим в состояние sReceive - получение слов данных. При этом информации из командного слова достаточно, чтобы знать, сколько слов ДАННЫХ должно прийти (могут вклиниться командные и ответные слова, если это "формат 3", но их мы отличим). Мы должны оставаться в состоянии sReceive, пока счётчик оставшихся слов не упадёт до нуля. Может оказаться, что изначально принять надо НОЛЬ слов (либо данные должны отправить МЫ, либо это одна из команд управления, не содержащая слова данных) - не страшно, мы можем с чистой совестью перейти в sReceive аж на ОДИН ТАКТ (40 наносекунд) и тут же пойти дальше.

Collapse )

На сегодня хватит... Ещё не всё реализовали, остаётся формирование "ошибки сообщения", и вообще ответного слова (про его содержание самую малость забыли!), корректную обработку команд управления, а также автоматическая проверка заголовков сообщений и CRC. Но не всё сразу, думаю сначала эту штуковину отладить, а потом уже потихоньку нарастить.