Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EMAC AT91SAM7X
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
zpv78
Всем привет. У кого есть пример программы работы с модулем EMAC AT91SAM7X256. Скиньте, пожалуйста на ящик (zpv78@mail.ru) или укажите ссылку. Заранее благодарен.
Dopler
У меня на с диска Atmel есть архив, в котором атмеловские примеры для всех модулей Sam7x - Can, USB, EMAC. В инете его можно взять отсюда:

ftp://ftp.efo.ru/pub/atmel/MCU/ARM_32bit/...91sam7x256_iar/


Пример с EMAC проверен, рабочий.

Вот еще делал перевод главы EMAC для аспирантуры, может пригодится
zpv78
Большое спасибо, буду разбираться.
Badwin
Хотелось бы тоже получить пример , ссылка нерабочая. help.gif
xelax
Сайт FreeRTOS. Там пример WEB сервера с готовым простеньким драйвером на EMAC. Для освоения самое оно.

http://www.freertos.org/
Badwin
хотелось бы пример без Оси, т.к. ось не собираюсь использовать.
xelax
Цитата(Badwin @ Nov 27 2007, 10:12) *
хотелось бы пример без Оси, т.к. ось не собираюсь использовать.


Косметические доработки по устранению оси (20 минут максимум) и получишь нормальный полноценный EMAC драйвер...
timofey_99
Цитата(xelax @ Nov 27 2007, 10:29) *
Косметические доработки по устранению оси (20 минут максимум) и получишь нормальный полноценный EMAC драйвер...


Использую этот драйвер вместе с осью. Всё было красиво и радостно, пока не сунулся в реальную сетку с тяжёлым трафиком. Зависает, точнее попадает в вечный луп на переборе дискрипторов, не может найти конец фрейма, соответственно замирают задачи, что имеют приоритет пониже. Очень удручает такое поведение. Кто сталкивался, удалось вылечить?
defunct
Цитата(timofey_99 @ Dec 26 2007, 16:57) *
Использую этот драйвер вместе с осью. Всё было красиво и радостно, пока не сунулся в реальную сетку с тяжёлым трафиком. Зависает, точнее попадает в вечный луп на переборе дискрипторов, не может найти конец фрейма, соответственно замирают задачи, что имеют приоритет пониже. Очень удручает такое поведение. Кто сталкивался, удалось вылечить?

У меня аппарат живет в реальной сети и пропускает 8kpps трафика.
emac драйвер написал сам, подводный камень приводящий к затыканию emac'a был только один -

для коротких пакетов (те что помещаются в одном дескрипторе) DMA может установить флаг окончания приема, до того как запишет его длину...

поэтому для вычитки фрейма одного только условия
RSR & AT91C_EMAC_REC
недостаточно.
надо также проверять длину принятого фрейма, и вытаскивать его только если не 0.

(Rx_Desc[idx].stat & RD_LENGTH_MASK )

Ну и по мелочи - проверять переполнение RX дескрипторов и делать Flush:

Код
    if (RSR & (AT91C_EMAC_OVR | AT91C_EMAC_BNA))
    { // RX overrun or RX buffer not available
        if (emacContext.RxOverrunAlert < U8_MAX)
            emacContext.RxOverrunAlert += 1;
        
        if (RSR & AT91C_EMAC_BNA)
        {   // buffer not available
            pEMAC->EMAC_NCR &= ~AT91C_EMAC_RE;              // Stop Rx
            rx_descr_init ();                               // All packet data is invalid, re-init RxDesc
            pEMAC->EMAC_RSR  = AT91C_EMAC_OVR | AT91C_EMAC_REC | AT91C_EMAC_BNA;
            pEMAC->EMAC_NCR |= AT91C_EMAC_RE;               // Restart Rx
        }
    }
prottoss
Возможно, пропустил, изучая даташит, но возник вопрос такого плана.

Имеется массив RX блоков. В какой то момент времени процесс, из-за своей медлительности оставил, промежуток блоков не освобожденным, т.е. Ownership-бит в дескрипторе блоков отрезка не очищен. При этом остальные блоки в массиве обрабатываются нормально. В последствии этот процесс отрезок освобождает. Как поведет себя EMAC в этом случае?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.