Типичный способ обработки UART ввод идет немного дальше, чем вы говорите:
Когда данные получены, UART генерирует прерывание HW, а обработчик прерываний считывает данные из UARTи помещает его в буфер FIFO, часто в кольцевой буфер.
На более высоком уровне, когда ОС хочет получать данные, она смотрит на входной буфер, чтобы увидеть, есть ли там какие-либо данные.
Этот механизм обеспечивает другой уровень асинхронности, и это означает, чтоуправление потоком входных данных должно блокировать только удаленный передатчик, когда входной буфер приемника заполнен (почти).
Один из типичных способов обработки
вывода заключается в следующем:
UART генерирует прерывание HW, когда оно готово для передачи данных.Затем обработчик прерываний просматривает выходной буфер FIFO и помещает первый элемент в очередь в регистр передачи UART.В противном случае, если нет данных, ожидающих передачи, состояние прерывания очищается.
На более высоком уровне, когда ОС хочет передать данные, она помещает элемент в выходной буфер и гарантирует, что UART сгенерирует HWпрерывать, когда он готов к передаче, что может быть сразу.
Это означает, что поток выходных данных блокируется, только когда буфер вывода заполнен.
Ни один из них на самом деле не требует прерывания SW на уровне обработки UART.Прерывание SW - это удобный способ взаимодействия приложений с ОС.