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

BF561: ethernet на 16-разрядной шине

Имеется плата процессора BF561 и сетевая плата с контроллером lan91c111, подключенная посредством 16-разрядной шине данных, а не по 32, как в КИТе.

 

По умолчанию библиотека lan91c111.dlb предоставляет функции для работы с ethernet-контроллером lan91c111 по 32-разрядной шине данных. Какие изменения нужно произвести в исходном коде библиотеки lan91c111.c (/blackfin/lib/src/drivers/ethernet/lan91c111/lan91c111.c), чтобы можно было работать по 16-битной шине? Кто сталкивался с подобной проблемой?

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


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

Ничего модифицировать не надо.

Достаточно правильно настроить EBIU (указать на необходимость работы с нужным банком асинхронной памяти в 16-ти битном режиме - биты 4-7 регистра EBIU_AMGCTL)

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


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

Ну коль пошла такая пьянка, режь последний огурец. Открываем проект готового драйвера, который лежит в примерах для 561 и видим, что вверху стоит определение

#if !defined(__ADSPBF561__)
#define USE_16_BIT 
#endif

Так вот выносим дефайн за пределы условия, что бы он был определён всегда, настраиваем фио(прерывание, сброс и т.п.) для работы с лан91ц111, компелим проект и подставляем в свой проект новую длб.

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


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

настраиваем фио(прерывание, сброс и т.п.) для работы с лан91ц111

 

А вот можно поподробнее?

Кроме 16-разрядной шины и ABE3->Lan_addr_0 там все как в ките.

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


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

Тогда должен работать без проблем. Лишь необходимо определить

#define USE_16_BIT

Далее библиотеку из каталога Release или Debug lan91c111bf561.dlb заменить существующую в каталоге \Analog Devices\VisualDSP x.x\Blackfin\lib

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


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

И соответственно настроить AMS3 банк на работу по 16 битной шине.

/*********************************************************************
*
*    Function:        pddOpen
*
*    Description:    Opens the Network Driver and does initialization. 
*
*********************************************************************/

static u32 adi_pdd_Open(                // Open a device
    ADI_DEV_MANAGER_HANDLE    ManagerHandle,    // device manager handle
    u32                     DeviceNumber,    // device number
    ADI_DEV_DEVICE_HANDLE     DeviceHandle,    // device handle
    ADI_DEV_PDD_HANDLE         *pPDDHandle,    // pointer to PDD handle location 
    ADI_DEV_DIRECTION         Direction,        // data direction
    void            *pCriticalRegionArg,        // critical region imask storage location
    ADI_DMA_MANAGER_HANDLE    DMAHandle,        // handle to the DMA manager
    ADI_DCB_HANDLE            DCBHandle,        // callback handle
    ADI_DCB_CALLBACK_FN        DMCallback        // device manager callback function
)
{
    u32             Result;        // return value
    void             *CriticalResult;
    ADI_ETHER_LAN91C111_DATA *dev= &EtherDev;    


    // check for errors if required
#ifdef ADI_ETHER_ERROR_CHECKING_ENABLED
    if (DeviceNumber > 0) {        // check the device number
        return (ADI_DEV_RESULT_BAD_DEVICE_NUMBER);
    }
#endif

    // insure the device the client wants is available
    Result = ADI_DEV_RESULT_DEVICE_IN_USE;
    //CriticalResult = adi_int_EnterCriticalRegion(pCriticalRegionArg);

    // Open the device
    if(!dev->Open)
    {
        // initialize the device settings
        memset(dev,0,sizeof(ADI_ETHER_LAN91C111_DATA));

        dev->CriticalData = pCriticalRegionArg;
        dev->DeviceHandle = DeviceHandle;
        dev->DCBHandle = DCBHandle;
        dev->DMCallback = DMCallback;
        dev->Direction = Direction;
        dev->Started = false;
        dev->bEnableGracefulShutdown = false;

#if ( defined(__ADSPBF533__) || defined(__ADSPBF537__))
        // default ivg levels
        dev->RXIVG  = ik_ivg8;
        dev->TXIVG  = ik_ivg8;
        dev->ERRIVG = ik_ivg8;
#endif /* __ADSPBF533__ */

#ifdef __ADSPBF561__
        // default ivg levels
        dev->RXIVG  = ik_ivg11;
        dev->TXIVG  = ik_ivg11;
        dev->ERRIVG = ik_ivg11;
        // set bit 7 to zero - 32bit access to async-bank3
        *pEBIU_AMGCTL &= 0xFF7F;
#endif /* __ADSPBF561__ */

#if defined(__ADSPBF538__) 
        // default ivg levels for PF interrupt B
        dev->RXIVG  = ik_ivg12;
        dev->TXIVG  = ik_ivg12;
        dev->ERRIVG = ik_ivg12;
#endif /* __ADSPBF538__ */

        // This is required as after opening the device we will query
        // the EEPROM to get the MAC (Async Bank-3)
        //

          //  *pEBIU_AMGCTL   |= 0xF;  Закрываем и вместо этого ставим
*pEBIU_AMGCTL = 0x8E;


        dev->Open = true;
        Result = ADI_DEV_RESULT_SUCCESS;
    }

    // exit critical region
    //
    //adi_int_ExitCriticalRegion(CriticalResult);

    if (Result != ADI_DEV_RESULT_SUCCESS) return (Result);

    *pPDDHandle = (ADI_DEV_PDD_HANDLE *)&EtherDev;
    return(ADI_DEV_RESULT_SUCCESS);
}

Изменено пользователем boom

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


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

А выводы контроллера lan91c111 BE[3:1] - как подключать?

У меня так:

 

lan91c111 BF561

--------------------------

BE0 ------------> ABE0

BE1 ------------> ABE1

 

а выводы:

 

BE2 ---> VCC

BE3 ---> VCC

 

Правильно????

Изменено пользователем Мухаммор

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


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

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

 

Vik, Boom - cпасибо огромное за подсказки...

Всегда пожалуйста :)

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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