Установка в UART RDA и CTI, когда FIFO пуст Ещё одна проблема,
Имееется выполненный на LPC2106 проект. Используется UART. FIFO сконфигурировано как
U0FCR = 0x1;
т.е. разрешено, но Rx Trigger Level установлен в 0 (прерывание после приёма каждого символа).
Модуль обмена по UART был написан и отлажен, работает устойчиво. Однако иногда, если LPC ещё не запущен, а на другом конце RS-232 запускается устройство и что-то попадает в линию, после запуска LPC возникают прерывания Receive Data Available (RDA), а затем Character Time-out Indicator (CTI). По логике, поскольку эти прерывания должны возникать, когда мимнимум один символ находится в Rx FIFO, чтение регистра статуса линии U0LSR должно возвращать бит Receiver Data Ready (RDR) установленным. Однако из U0LSR читается 0x60 (установлены только THRE и TEMT).
Данная ситуация вводит в замешательство мой обработчик прерываний, который обязан выполнить чтение RBR, чтобы сбросить прерывание, но видя, что RDR не установлен, этого не делает, и прерывание остаётся установленным.
Известна ли описанная мною проблема?
Буду благодарен за подсказку, как избежать установки прерываний RDA и CTI, если FIFO приёмника пуст. Или необходимо принимать меры в программе для обнаружения этой, вроде бы нештатной, ситуации?
Спасибо