ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
17 июля
46969 Топик полностью
Alex03 (21.12.2005 18:07, просмотров: 1) ответил landrey на Попробую уточнить условия задачи
При описании задачи для начала хоть бы камень указали! :) Подозреваю что это LPCxxxx > Пакеты сыпятся очень часто (предназначены не только этому устройству). Значит возможно что и паузы то между ними нет? Да и не стОит на неё закладываться. > Никаких контрольных сумм, адресация - одним битом в старшем байте. Не понятно! Что есть старший байт? Первый в пакете? В остальных байтах пакета старший бит нулевой? А случайно не 9-ти битные посылки, (в своё время широко использовалось)? > Теперь о том, что у меня не получается. > Если пакеты начнут приходить до начала работы устройства > (инициализация довольно большая), то в VIC уже будет висеть > флаг, а прерывание почему-то генериться не начинает. > Как выгребать из такой ситуации? Что то у Вас в инициализации не то. > Если первый пакет приходит после инициализации, > то принимаю его нормально (14 байт ФИФО и один > бит по прерыванию CTI). ^^^ байт > Потом делаю U0IER = 0; > U0FCR = 0; > После обработки опять разрешаю прерывание и устанавливаю U0FCR. > После этого начинается бардак. Бывает, что срабатывает два раза> > прерывание от ФИФО, бывает, что постоянно сыпятся прерывания CTI. Что-то я не пойму зачем эти махинации с U0FCR? А на CTI Вы весь буфер выгребаете или только 1 байт? Я бы всётаки принимал весь трафик с простенькой машиной состояний из: 1. Ожидание 1-го байта пакета (с игнорированием остальных) - если приняли 1-ый байт пакета переход в 2 - если не 1-ый остаёмся 2. Приём пакета в буфер. - по ошибкам, таймаутам и пр. исключениям переход в 1. - если приняли весь пакет то проверяем а надо ли его обработать. - если нет то в переход в 1 - если да то или непосредственная обработка и переход в 1. Всё это в прерывании. Примечания: 1. Если признак "вашего" пакета в первом байте, то можно сразу ждать следующего первого байта если приняли байт не вашего пакета. 2. Обработку можно тоже разделить. Например в прерывании UART по приёму пакета для индикатора можно лишь перекладывать байтики в буфер ЖКИ в памяти и взводить некий(ие) флаг(и). А уж гденить в другом месте проверять флаг необходимости апдейта индикатора и обновлять его. Т.е. для 20х2 определяем массив на 20х2 байтиков под символы и 20х2-битную переменную с флагами обновления соответствующей буквы. Или у Вас граф. ЖКИ?