landrey (21.12.2005 16:23, просмотров: 1) ответил blackbit на ..работать по максимальному уровеню заполнения FIFO, пакеты разделять по прерыванию CTI.
Попробую уточнить условия задачи Основной задачей устройства является некоторый процесс, который желательно как можно реже прерывать. Также устройство является интерфейсом (ЖКИ, кнопки). На ЖКИ отображаются данные, пришедшие по UART, значит достаточно обновлять 3-4 раза в секунду. Пакеты сыпятся очень часто (предназначены не только этому устройству).
Плюс протокол на мой взгляд не очень удачен. Никаких контрольных сумм, адресация - одним битом в старшем байте. Протокол уже поменять нельзя. Длина пакета 15 байт.
Теперь о том, что у меня не получается. Если пакеты начнут приходить до начала работы устройства (инициализация довольно большая), то в VIC уже будет висеть флаг, а прерывание почему-то генериться не начинает. Как выгребать из такой ситуации?
Если первый пакет приходит после инициализации, то принимаю его нормально (14 байт ФИФО и один бит по прерыванию CTI). Потом делаю U0IER = 0;
U0FCR = 0;
После обработки опять разрешаю прерывание и устанавливаю U0FCR.
После этого начинается бардак. Бывает, что срабатывает два раза прерывание от ФИФО, бывает, что постоянно сыпятся прерывания CTI.
Что я неправильно делаю? И как лучше это сделать?