Может и фифо но скорее всего приоритетный шифратор.Т.е. у регистра RUART_LINE_STATUS_REG фифо глубиной в 5, как и у всех других регистров UART ? Иначе смысла то нет.
Без этого цикла успевает работать на 10 000 000 Baud, а с ним - нет.
Цикл выкидывать нельзя потому что обработчик прерывания должен обслужить все накопленные прерывания что и реализовано в цикле. Проблема не в идиотах-программистах а в реализации hardware которое выдает одиночный код события вместо того что выдать битовое поле сразу со всеми флагами.
16550 отвратительный uart. В микроконтроллерах полно более удачных реализаций но менеджеры в soc всегда закупают наихудшее.
Скорее всего обработчик прерывания написали по образцу из linux. Там подобная реализация в половине драйверов.Наверняка этот цикл вписали как затычку - наобум, типа и так покатит
В случаях когда нельзя ходить по шагам расставляют брекпойнты. Это все равно быстрее перекомпиляции. При перекомпиляции еще плюсуйте время на воссоздание контекста отладки.Динамику сложно отлаживать с Jtag, проще вписывать метки с выводом инфы хоть в консоль, перекомпилить и заливать в RAM - это быстрее раз в десять, чем тыркаться с Jtag по шагам и точкам останова... Перекомпиляция и заливка по скорости уже приблизилась к интерактивному режиму - менее пары секунд весь процесс на сложный проект...
BN уже едет так что отладку из флэш придется вспоминать.Это очень сильно отличает данные RTL-ы от ESP и прочих, в которых код исполняется из Flash.
Для ублюдочного modbus уже придумали как обойти отсутствие прерывания по опустошению передатчика ?