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

 
 
> EMAC AT91SAM9260, Вопросы, касающиеся Ethernet MAC для AT91SAM9260
ZED
сообщение Oct 28 2010, 13:27
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 264
Регистрация: 17-04-07
Из: Москва
Пользователь №: 27 102



Доброго всем здравия!!!

Начал разбираться с EMAC для AT91SAM9260. Имеется документация на сам контроллер и тестовый пример для IAR под названием basic-emac-uip-webserver-project-at91sam9260-ek. В этой теме планируется задавать вопросы, которые касаются проблемы запуска Ethernet на вышеупомянутом контроллере и просто непонятные вещи.

Первый вопрос заключается в следующем. В файле emac.h имеются некоторые указатели на функции:
Код
/// Callback used by send function
typedef void (*EMAC_TxCallback)(unsigned int status); // EMAC_TxCallback - указатель на функцию, возвращающую void и принимающую unsigned int
typedef void (*EMAC_RxCallback)(unsigned int status); // EMAC_RxCallback - указатель на функцию, возвращающую void и принимающую unsigned int
typedef void (*EMAC_WakeupCallback)(void); //  EMAC_WakeupCallback - указатель на функцию, возвращающую void и принимающую void


Далее они используются, например в функции EMAC_Handler, которая управляет прерываниями, расположенной в emac.c:
Код
    volatile EmacTxTDescriptor *pTxTd;
    volatile EMAC_TxCallback   *pTxCb;

Код
if (rxTd.rxCb) {
            rxTd.rxCb(rxStatusFlag);
        }

Код
            if (*pTxCb) {
                (*pTxCb)(txStatusFlag);
            }

Я так понял это так называемые обратные функции, но что они делают нигде не определено (по-крайней мере я не нашел). Вопрос собственно для чего они нужны?

Еще один вопрос, что выполняет следующий кусок кода в той же функции EMAC_Handler и для чего он нужен? Можно ли обойтись без всего этого?
Код
        // Check the buffers
        while (CIRC_CNT(txTd.head, txTd.tail, TX_BUFFERS)) {
            pTxTd = txTd.td + txTd.tail;
            pTxCb = txTd.txCb + txTd.tail;

            // Exit if buffer has not been sent yet
            if ((pTxTd->status & EMAC_TX_USED_BIT) == 0) {
                break;
            }
            
            // Notify upper layer that packet has been sent
            if (*pTxCb) {
                (*pTxCb)(txStatusFlag);
            }
            
            CIRC_INC( txTd.tail, TX_BUFFERS );
        }

        // If a wakeup has been scheduled, notify upper layer that it can send
        // other packets, send will be successfull.
        if( (CIRC_SPACE(txTd.head, txTd.tail, TX_BUFFERS) >= txTd.wakeupThreshold)
         &&  txTd.wakeupCb) {
            txTd.wakeupCb();
        }
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Dec 10 2010, 10:59
Сообщение #2


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Берете u-boot и смотрите как там at91-eth.c реализован. Единственное, u-boot работает без прерываний, но это, надеюсь, не проблема. Подтверждаю, что c lwip'ом, по крайней мере at91rm9200, работает как надо.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ZED   EMAC AT91SAM9260   Oct 28 2010, 13:27
- - ZED   И еще один вопрос. В функции EMAC_Init, расположен...   Oct 29 2010, 06:35
- - ZED   На счет строки txTd.td[Index].status = EMAC_TX_USE...   Nov 25 2010, 09:20
- - Zelepuk   Один "специалист" мне когда-то сказал, ч...   Dec 10 2010, 05:35
- - MALLOY2   ЦитатаОдин "специалист" мне когда-то ска...   Dec 10 2010, 08:44
- - ZED   О, спасибо за указание направление, а то там дальш...   Dec 13 2010, 04:31
- - ZED   MALLOY2, а не выложите Ваш вариант EMAC?   Dec 13 2010, 07:45
- - MALLOY2   Могу, только это шаблонный класс для C++, и не оче...   Dec 13 2010, 09:38
- - ZED   Огромное спасибо, буду разбираться. Кстати в U-boo...   Dec 14 2010, 01:22
- - sergeeff   u-boot\drivers\net\at91_emac.c   Dec 14 2010, 03:41
- - ZED   Вот именно, что нету, у меня есть U-boot для MMNET...   Dec 14 2010, 04:51
- - sergeeff   Пожалуйста. Сам u-boot вы можете скачать с его FT...   Dec 14 2010, 06:23
- - ZED   Спасибо, буду разбираться Мне кажется в U-boot ещ...   Dec 14 2010, 08:19
|- - sergeeff   Цитата(ZED @ Dec 14 2010, 11:19) Спасибо,...   Dec 14 2010, 09:22
- - MALLOY2   И сами дескрипторы должны быть в не кешируемой обл...   Dec 14 2010, 09:24
- - ZED   ЦитатаВы же, скорее всего кеши включили? Так вот п...   Dec 14 2010, 09:52
- - MALLOY2   ЦитатаЧто должен делать EMAC по прерыванию? то чт...   Dec 14 2010, 10:08
- - ZED   А вот еще вопросик по приему пакетов (фреймов). Я ...   Dec 14 2010, 11:57
- - ZED   Блин, ведь прием возможен только, если буфер не за...   Dec 14 2010, 13:00
- - ZED   Появился еще один дополнительный вопрос, когда уст...   Dec 15 2010, 05:46
- - ZED   Я так понял, что когда кадр (фрейм) находится в пр...   Dec 22 2010, 11:45
- - MALLOY2   да, так и есть, только нужно учесть то что может о...   Dec 23 2010, 05:46
- - ZED   А нельзя ли сделать так: если биты SOF или EOF (ка...   Dec 23 2010, 06:48
- - ZED   Вы не могли бы прокомментировать мою функцию прием...   Dec 23 2010, 08:20


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

 


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


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