И соответственно настроить 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 - Feb 27 2009, 07:11