Manhoso 0 25 февраля, 2009 Опубликовано 25 февраля, 2009 · Жалоба Имеется плата процессора BF561 и сетевая плата с контроллером lan91c111, подключенная посредством 16-разрядной шине данных, а не по 32, как в КИТе. По умолчанию библиотека lan91c111.dlb предоставляет функции для работы с ethernet-контроллером lan91c111 по 32-разрядной шине данных. Какие изменения нужно произвести в исходном коде библиотеки lan91c111.c (/blackfin/lib/src/drivers/ethernet/lan91c111/lan91c111.c), чтобы можно было работать по 16-битной шине? Кто сталкивался с подобной проблемой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boombox 0 26 февраля, 2009 Опубликовано 26 февраля, 2009 · Жалоба взять пример для 533(у него 16 разрядная шина) и модифицировать его под 561. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 26 февраля, 2009 Опубликовано 26 февраля, 2009 · Жалоба Ничего модифицировать не надо. Достаточно правильно настроить EBIU (указать на необходимость работы с нужным банком асинхронной памяти в 16-ти битном режиме - биты 4-7 регистра EBIU_AMGCTL) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boombox 0 26 февраля, 2009 Опубликовано 26 февраля, 2009 · Жалоба Ну коль пошла такая пьянка, режь последний огурец. Открываем проект готового драйвера, который лежит в примерах для 561 и видим, что вверху стоит определение #if !defined(__ADSPBF561__) #define USE_16_BIT #endif Так вот выносим дефайн за пределы условия, что бы он был определён всегда, настраиваем фио(прерывание, сброс и т.п.) для работы с лан91ц111, компелим проект и подставляем в свой проект новую длб. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manhoso 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 · Жалоба настраиваем фио(прерывание, сброс и т.п.) для работы с лан91ц111 А вот можно поподробнее? Кроме 16-разрядной шины и ABE3->Lan_addr_0 там все как в ките. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boombox 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 · Жалоба Тогда должен работать без проблем. Лишь необходимо определить #define USE_16_BIT Далее библиотеку из каталога Release или Debug lan91c111bf561.dlb заменить существующую в каталоге \Analog Devices\VisualDSP x.x\Blackfin\lib Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manhoso 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 · Жалоба Ну, это понятно. Спасибо. Сейчас попробую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boombox 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 (изменено) · Жалоба И соответственно настроить 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); } Изменено 27 февраля, 2009 пользователем boom Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manhoso 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 (изменено) · Жалоба А выводы контроллера lan91c111 BE[3:1] - как подключать? У меня так: lan91c111 BF561 -------------------------- BE0 ------------> ABE0 BE1 ------------> ABE1 а выводы: BE2 ---> VCC BE3 ---> VCC Правильно???? Изменено 27 февраля, 2009 пользователем Мухаммор Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boombox 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 · Жалоба похоже на правду. нолучше посмотрите схему EzKit USB-LAN extender Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manhoso 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 · Жалоба Vik, Boom - cпасибо огромное за подсказки... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boombox 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 · Жалоба Не за что :). Отпишитесь о результатах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vik0 0 27 февраля, 2009 Опубликовано 27 февраля, 2009 · Жалоба По-хорошему, код инициализации внешней шины лучше выполнять глобально. Ну не должен драйвер периферийного устройства знать подробности внешнего подключения данного устройства, не должен. Vik, Boom - cпасибо огромное за подсказки... Всегда пожалуйста :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manhoso 0 3 марта, 2009 Опубликовано 3 марта, 2009 · Жалоба Все отлично! Пашет как надо. :08: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться