Да, конечно, 16550 уже давно морально устарел и можно сделать гораздо более удобный и современный интерфейс для UART (примеры есть).
Но NXP решили для UART реализовать стандартный 16550 (с доп. фичами) и у этого подхода есть и серьёзный '+':
UART - это единственная периферия, драйвера для которой я переношу между разными контроллерами практически без изменений, а это серьёзный '+' когда приходится одновременно работать с разными контроллерами.
И реализовали они его грамотно - без багов.
Цитата(ig_z @ Sep 27 2013, 17:35)

Что курили голландские девелоперы, когда дизайнили уарт известно только им и богу. По факту код передачи по уарту для филипков должен быть продублирован в обработчике прерывания от уарта и в том месте кода, где нужно начать передачу.
В си есть такая чудесная вещь как функция(). Попробуйте - вам понравится

Цитата(ig_z @ Sep 27 2013, 17:35)

Для "нормальных" уарт архитектур достаточно разрешить прерывание "передатчик пуст"
Это уж не в тех-ли нормальных (типа STM), где забыли добавить FIFO в UART?