Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: BF561: ethernet на 16-разрядной шине
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Сигнальные процессоры и их программирование - DSP
Мухаммор
Имеется плата процессора BF561 и сетевая плата с контроллером lan91c111, подключенная посредством 16-разрядной шине данных, а не по 32, как в КИТе.

По умолчанию библиотека lan91c111.dlb предоставляет функции для работы с ethernet-контроллером lan91c111 по 32-разрядной шине данных. Какие изменения нужно произвести в исходном коде библиотеки lan91c111.c (/blackfin/lib/src/drivers/ethernet/lan91c111/lan91c111.c), чтобы можно было работать по 16-битной шине? Кто сталкивался с подобной проблемой?
boom
взять пример для 533(у него 16 разрядная шина) и модифицировать его под 561.
vik0
Ничего модифицировать не надо.
Достаточно правильно настроить EBIU (указать на необходимость работы с нужным банком асинхронной памяти в 16-ти битном режиме - биты 4-7 регистра EBIU_AMGCTL)
boom
Ну коль пошла такая пьянка, режь последний огурец. Открываем проект готового драйвера, который лежит в примерах для 561 и видим, что вверху стоит определение
Код
#if !defined(__ADSPBF561__)
#define USE_16_BIT
#endif

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


А вот можно поподробнее?
Кроме 16-разрядной шины и ABE3->Lan_addr_0 там все как в ките.
boom
Тогда должен работать без проблем. Лишь необходимо определить
Код
#define USE_16_BIT

Далее библиотеку из каталога Release или Debug lan91c111bf561.dlb заменить существующую в каталоге \Analog Devices\VisualDSP x.x\Blackfin\lib
Мухаммор
Ну, это понятно.

Спасибо. Сейчас попробую.
boom
И соответственно настроить 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);
}
Мухаммор
А выводы контроллера lan91c111 BE[3:1] - как подключать?
У меня так:

lan91c111 BF561
--------------------------
BE0 ------------> ABE0
BE1 ------------> ABE1

а выводы:

BE2 ---> VCC
BE3 ---> VCC

Правильно????
boom
похоже на правду. нолучше посмотрите схему EzKit USB-LAN extender
Мухаммор
Vik, Boom - cпасибо огромное за подсказки...
boom
Не за что smile.gif. Отпишитесь о результатах.
vik0
По-хорошему, код инициализации внешней шины лучше выполнять глобально. Ну не должен драйвер периферийного устройства знать подробности внешнего подключения данного устройства, не должен.

Цитата(Мухаммор @ Feb 27 2009, 15:31) *
Vik, Boom - cпасибо огромное за подсказки...

Всегда пожалуйста smile.gif
Мухаммор
Все отлично! Пашет как надо. 08.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.