реклама на сайте
подробности

 
 
> CP2200: конфликт RXAUTORD и RAMRXDATA, прошу помощи
Konstantin Ilich...
сообщение Sep 21 2009, 19:06
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 7-12-06
Пользователь №: 23 250



Добрый день,

Сделал устройство на AVR+CP2200. Даташит Rev.1.0.
У меня проблемка. Хочу в прерывании по приему пакета сразу на лету посмотреть, что за пакет (ARP, UDP, порт назначения итп). И если пакет мне не нужен, то сразу тут же его и откидывать. А если нужен, то выставляю флаг и позже в основном цикле пакет считаю и буду разбирать.

Ну вот, при прерывании лезу я через прямой доступ RAMRXDATA в буфер и смотрю что нужно. А потом когда доходит дело до RXAUTORD, оказывается, что указатель авточтения инкрементировался ровно столько раз, сколько я читал из RAMRXDATA. Естественно это очень мешает, т.к. не позволяет потом читать буфер.

В даташите написано, что механизмы RXAUTORD и RAMRXDATA разделены и не влияют друг на друга.

Подскажите, в чем может быть дело?
Делает ли кто-нибудь такой смешанный доступ к буферу CP2200?


Пока решил проблему так.
В прерывании перед доступом к принятому пакету сохраняю во временной переменной RXFIFOHEAD, а по завершении записываю его значение обратно.
РАБОТАЕТ!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Konstantin Ilich...
сообщение Sep 22 2009, 17:57
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 7-12-06
Пользователь №: 23 250



Прошу помощи с CP2200!!!

При входе в прерывание по приему пакета проверяю RXVALID и RXOK и если они оба =1, то в целях отладки просто отбрасываю пакет RXCN=(1<<RXSKIP). Всё это работает очень быстро (1-2 мкс) и значительно меньше времени 51,2 мкс, указанного в даташите (время минимального пакета из 64 байт). В общем-то, я ожидаю, что никаких пакетов в FIFO накапливаться не должно, т.к. я успеваю их обработать. Однако, чтение TLBVALID перед выходом из прерывания иногда (раз в 10-20 секунд) показывает, что в буфере лежат ещё пакеты, и порой даже целых 7 штук.

Кабель подключен к роутеру, он раз в 10-20 секунд посылает какую-то кучку пакетов, я ещё полностью не разобрался что именно там за пакеты, отловить их в этом кабеле с компа не предствляется возможным.

Вопрос: могут ли действительно так быстро влететь в буфер какие-то новые пакеты и оказаться выставленными флаги в TLBVALID ? Или я всё же должен успевать обрабатывать ВСЕ пакеты в такой ситуации, т.е. чтобы FIFO не наполнялся?

Посоветуйте, пожалуйста, как правильно обрабатывать прием пакета и работать с FIFO.

P.S. Я планировал делать быстрый анализ пакета "на лету" прямо в прерывании по приему - чтобы отсеять пакеты с чужим 6-ым октетом MAC, чужим портом UDP и тп.
Go to the top of the page
 
+Quote Post
KRS
сообщение Sep 22 2009, 20:21
Сообщение #3


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(Konstantin Ilichev @ Sep 22 2009, 21:57) *
При входе в прерывание по приему пакета проверяю RXVALID и RXOK и если они оба =1...

У вас не все TLB очищаются именно с этими битами и была проблема, в старом даташите вообще эти биты по другому описывались и у меня глюки тоже были. Потом вышел новый даташит и я все поборол. Но это уже было давно может сейчас даташит еще свежей. Сейчас под рукой нет исходников...
Но, на память надо делать RXSKIP не только когда оба бита установлены! (А вроде когда хотя бы один).
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 07:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016