Учитывая протокол на основе пакетов и UART, который прерывается, когда получено более одного байта, подумайте, что произойдет, если будет получен последний байт пакета, но этого последнего байта недостаточно, чтобы заполнить FIFO после порогаи вызвать прерывание.Ваше приложение просто не собирается получать этот неполный пакет, пока какой-нибудь последующий пакет не будет получен и FIFO наконец не заполнится достаточно?Что, если другой конец ожидает ответа и никогда не отправляет другой пакет?Или ваше приложение должно опрашивать UART для проверки оставшихся байтов, оставшихся в UART FIFO?Это кажется слишком сложным - использовать прерывание и опрос для полученных байтов.
С реализованными мною пакетными протоколами драйвер UART не полагается на UIF FIFO и настраивает UART на прерывание, когда одинБайт доступен.Таким образом, драйвер получает уведомление для каждого байта, и не остается шанса, что последний байт пакета останется в FIFO UART.
FIFO UART может быть удобен для потоковых протоколов (таких как аудио иливидео данные).Когда драйвер получает поток данных, всегда будут входящие данные, чтобы продолжать заполнять FIFO.Драйвер может полагаться на FIFO UART для буферизации некоторых данных.Драйвер может быть более эффективным, обрабатывая несколько байтов на прерывание и уменьшая частоту прерываний.
Вы можете рассмотреть возможность использования UART FIFO, поскольку ваши пакеты имеют фиксированную длину.Но подумайте, как драйвер восстановится, если один байт будет сброшен из-за шума или чего-то еще.Я думаю, что все же лучше не полагаться на FIFO для пакетных протоколов, независимо от того, являются ли пакеты фиксированной длины.