ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
46965 Топик полностью
blackbit (21.12.2005 17:33, просмотров: 1) ответил landrey на Попробую уточнить условия задачи
Ответ: >Если пакеты начнут приходить до начала работы устройства (инициализация >довольно большая), то в VIC уже будет висеть флаг, а прерывание почему-то >генериться не начинает. Как выгребать из такой ситуации? У меня тоже не маленькая инициализация, VIC инициализирую последним. Uart перед ним, и только уже опосля всего: __enable_interrupt(); Нормально все работает, «выгребать» не приходится. >Если первый пакет приходит после инициализации, то принимаю его нормально (14 >байт ФИФО и один бит по прерыванию CTI). Потом делаю U0IER = 0; U0FCR = 0; Прежде чем делать U0FCR=0 нужно забрать полученное из FIFO, иначе там одни 0x00 останутся… ;) >После обработки опять разрешаю прерывание и устанавливаю U0FCR. На простом U0FCR = 0 не останавливаюсь – дополнительно сбрасываю флагами RFR=1/TFR=1 (там же в FCR) перед разрешением FIFO. >После этого начинается бардак. Бывает, что срабатывает два раза прерывание от >ФИФО, бывает, что постоянно сыпятся прерывания CTI. Что я неправильно делаю? И >как лучше это сделать? Всяко может быть, например, начинается прием, а там уже летит пакет… Если отталкиваться от вашего описания протокола, то можно попробовать начинать прием пакета с прерывания CTI: как бы начинаем «щупать» поток по сработавшему таймеру, ждем паузы в нем (CTI) и, дождавшись, принимаем на грудь нормальный, не рваный пакет, а непосредственно перед приемом недурственно очистить FIFO Rx.