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

 
 
> sam9xe MMU EMAC uIP
taoga
сообщение Aug 12 2011, 18:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Здравствуйте!
Модифицировал простой работающий на at91sam9xe-ek пример basic-emac-uip-helloworld-project из IAR 6, добавил поддержку d-cache и i-cache. После чего он частично перестал работать. Функция EMAC_Poll() возврашает код "нет принятых данных". Ниже вывод программы в терминале:
CODE
PreInitMMU
InitMMU - done.
-- Basic EMAC uIP Project 1.7-rc1 --
-- AT91SAM9XE-EK
-- Compiled: Aug 11 2011 14:49:07 --
- MAC 0:45:56:78:9a:bc
- Host IP 192.168.0.201
- Router IP 192.168.0.77
- Net Mask 255.255.255.0
-I- ** Valid PHY Found: 0
-I- AutoNegotiate complete
P: Link detected
P: clock time initialize - TC0
P: APP Init ... hello-world


Код проекта в приложении:
Прикрепленный файл  at91sam9xe_ek_basic_emac_uip_helloworld_prj.rar ( 470.7 килобайт ) Кол-во скачиваний: 75


Помогите разобраться!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Aug 12 2011, 19:45
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Вы буферы EMAC не закэшировали ли часом?
Go to the top of the page
 
+Quote Post
taoga
сообщение Aug 15 2011, 10:29
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Цитата(aaarrr @ Aug 12 2011, 23:45) *
Вы буферы EMAC не закэшировали ли часом?

Переделал проект basic-emac-project, чтобы избавиться от uIP.
Проблема та-же: после включения MMU, d-cache перестают приниматься/передаваться данные.
Область памяти в которой располагаются дескрипторы и буферы чтения/записи EMAC не кэшируется.

EMAC_Handler постоянно вызывается.
Не устанавливается бит EMAC_RX_OWNERSHIP_BIT.

Выкладываю basic-emac-project проект полностью.
Прикрепленный файл  basic_emac_project.rar ( 2.63 мегабайт ) Кол-во скачиваний: 73
Go to the top of the page
 
+Quote Post
taoga
сообщение Aug 16 2011, 09:56
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Цитата(taoga @ Aug 15 2011, 14:29) *
EMAC_Handler постоянно вызывается.
Не устанавливается бит EMAC_RX_OWNERSHIP_BIT.

Уточняю: Один раз выполняется условие в EMAC_Handler():
Код
if (( (AT91C_BASE_EMAC->EMAC_ISR & AT91C_BASE_EMAC->EMAC_IMR) & AT91C_EMAC_RCOMP) || (AT91C_BASE_EMAC->EMAC_RSR & AT91C_EMAC_REC)) {
        printf("RX packet\n\r");
        rxStatusFlag = AT91C_EMAC_REC;
...

и дальше в статистике сохраняется, что был установлен бит OVR регистра EMAC_RSR, т.е.
выполняется это условие:
Код
if (AT91C_BASE_EMAC->EMAC_RSR & AT91C_EMAC_OVR) {
            rxStatusFlag |= AT91C_EMAC_OVR;
            EmacStatistics.rx_ovrs++;
        }

Далее EMAC_Handler() вызывается "вхолостую" нет ни приема, ни передачи.

Такая ситуация возникает, когда включаются d-cache, i-cache, mmu.
Может быть я неправильно задал таблицу трансляции или буферы остались кэшируемыми?
Если я все сделал правильно куда дальше "копать"?

Сообщение отредактировал IgorKossak - Aug 16 2011, 12:33
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:55
Рейтинг@Mail.ru


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