Перейти к содержанию
    

Нет прерываний от модуля Ethernet.

Продолжение работы, которая обсуждалась здесь

Демо плата SK-MLPC2478, приложение EMAC. Отдельный вход Ethernet для этой платы. Формирую ARP запрос, по WireShark вижу, что сообщение в PC приходит и формируется ответ, но прерывания в ARM-е, по приходу данных, нет, прерывания возникают только по отправке данных, данные отправлены, буфер пуст. Где, что посмотреть, проверить почему нет прерываний?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мак адрес в емаке есть? задали? правильный?

А что значит правильный? Он у меня из примера остался.

В приложении скриншоты с WireShark

post-5709-1381230746_thumb.png

post-5709-1381230761_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а айпи адреса правильно обрабатываются?маска сети какая?

Изменено пользователем сарматъ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для начала можно попробывать разрешить прием всех пакетов не зависимо от мак адреса и посмотреть вообще что то приходит или нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для начала можно попробывать разрешить прием всех пакетов не зависимо от мак адреса и посмотреть вообще что то приходит или нет

А я не запрещал. Где разрешить/запретить прописывается?

Я сейчас без библиотеки работаю, всё сам делаю, и пакеты генерю и на выход их посылаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для каждого процессора периферия настраивается по своему думаю в мануале по процессору должен быть описан порядок работы с мак-контроллером в частности правила фильтрации пакетов

 

ну и конечно сами прерывания должны быть разрешены явно а не просто "не запрещены"

 

еще такой момент вы подсоединяете плату чрез маршрутизатор? хорошо было бы убедиться что маршрутизатор отправляет пакеты на соотв порт

Изменено пользователем сарматъ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

для каждого процессора периферия настраивается по своему думаю в мануале по процессору должен быть описан порядок работы с мак-контроллером в частности правила фильтрации пакетов

 

ну и конечно сами прерывания должны быть разрешены явно а не просто "не запрещены"

 

еще такой момент вы подсоединяете плату чрез маршрутизатор? хорошо было бы убедиться что маршрутизатор отправляет пакеты на соотв порт

Нет, соединение точка-точка. Провода целые, не рваные, проверял.

По первым двум советам проверю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема банальна. При формировании запроса у меня один порядок байтов в MAC адресе был, а при инициализации MAC в PHY обратный.

 

Тогда другой вопрос. В PC одно направление байтов в SUN и в ARM другое. Как определяется из какой системы пришёл пакет?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема банальна. При формировании запроса у меня один порядок байтов в MAC адресе был, а при инициализации MAC в PHY обратный.

 

Тогда другой вопрос. В PC одно направление байтов в SUN и в ARM другое. Как определяется из какой системы пришёл пакет?

 

езернет весь BIG Endian, что РС, что Юникс, что Макинтош...

а ARMы разные бывают, обычно Little Endian

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

скорее всего на этапе создания проекта. У некоторых сред и армов можно выбрать в свойствах проекта. В "софтварных" плисовых процессорах можно выбрать на уровне создания проца.

 

Только я бы не стал менять Little Endian процессор на Big, ибо для процессора удобнее и быстрее быть Little

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

потому для чего этот формат придумали

 

к примеру

logn int BigData = 128.
void *p = (void *)&BigData;

 

это все сработает правильно

char ch_data = *p;
short int m_data = *p;
int mm_data = *p;
long int l_data = *p;

 

потому что в адресах памяти самый младший байт лежим первым, и взяв его в чаровский указатель вы получите верное 8 битное число.

Запихав в 16 бит, вы опять же получите верное 16 битное число и так далее...

 

То есть такой формат позволяет легко преобразовывать длинный тип в короткие, и обратно при некоторой сноровке

 

short int Data = 232443;
void *p = (void *)&Data;

long int b_data = *p;
b_data &= 0x0000FFFF;

 

в формате Big Endian младшая часть числа всегда лежит на разном расстоянии от начала в зависимости от размерности числа, и чтобы получить правильное число из памяти надо знать и учитывать размерность числа записанного и приемника, это несколько осложняет процесс....

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...