初级会员

- 积分
- 90
- 金钱
- 90
- 注册时间
- 2016-1-15
- 在线时间
- 21 小时
|
1金钱
硬件跟原子哥的F407开发板是一样的,把代码移植过来之后,一直不能进入ETH_IRQHandler中断,导致一直ping不通,真不知道什么原因了,还请各位大神给指点一下!!!
void ETHERNET_NVICConfiguration1(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 2 bit for pre-emption priority, 2 bits for subpriority */
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0X00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0X00;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
u8 LAN8720_Init(void)
{
u8 rval=0;
// GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);//ê1ÄüGPIOê±Öó RMII½ó¿ú
GPIO_Configuration();
GPIO_PinRemapConfig(GPIO_Remap_ETH,ENABLE);
GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_RMII);
////////////////////////////////////////////////////////////////////
// /* config MCO output 25MHz clock */
// /* Set PLL3 clock output to 50MHz (25MHz /5 *10 =50MHz) */
// RCC_PLL3Config(RCC_PLL3Mul_10);
// /* Enable PLL3 */
// RCC_PLL3Cmd(ENABLE);
// /* Wait till PLL3 is ready */
// while (RCC_GetFlagStatus(RCC_FLAG_PLL3RDY) == RESET)
// {}
// /* Get PLL3 clock on PA8 pin (MCO) */
// RCC_MCOConfig(RCC_MCO_PLL3CLK_Div2);
////////////////////////////////////////////////////
LAN8720_RST=0;
delay_ms(50);
LAN8720_RST=1;
ETHERNET_NVICConfiguration1();
rval = ETH_MACDMA_Config();
return !rval;
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* ETHERNET pins configuration */
/* Configure PA2 as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure PC2 as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* Configure PB5, PB8, PB11, PB12 and PB13 as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure PA0, PA1 and PA3 as input */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_7 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure PD8, PD9, PD10, PD11 and PD12 as input */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;//| GPIO_Pin_10 ;//| GPIO_Pin_11 | GPIO_Pin_12
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure); /**/
/* ETH_RESET config --------------------------------------------------------*/
/* Configure Pc.06 as analog output -------------------------*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* MCO pin configuration------------------------------------------------- */
/* Configure MCO (PA8) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
u8 ETH_MACDMA_Config(void)
{
u8 rval;
ETH_InitTypeDef ETH_InitStructure;
//ê1ÄüòÔì«íøMACòÔ¼°MAC½óêÕoí·¢Ëíê±Öó
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx |RCC_AHBPeriph_ETH_MAC_Rx, ENABLE);
ETH_DeInit(); //AHB×üÏßÖØÆôòÔì«íø
ETH_SoftwareReset(); //èí¼tÖØÆôíøÂç
while (ETH_GetSoftwareResetStatus() == SET);//μè′yèí¼tÖØÆôíøÂçíê3é
ETH_StructInit(Ð_InitStructure); //3õê¼»ˉíøÂçÎaĬèÏÖμ
///íøÂçMAC2ÎêyéèÖÃ
ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable; //¿aÆôíøÂç×Ôêêó|1|Äü
ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable; //1رշ′à¡
ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable; //1رÕÖØ′«1|Äü
ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable; //1رÕ×Ô¶ˉè¥3yPDA/CRC1|Äü
ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Enable;//ETH_ReceiveAll_Disable; //1رսóêÕËùóDμÄÖ¡
ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;//ÔêDí½óêÕËùóD1ã2¥Ö¡
///////////////////////////////////////////////////
// ETH_InitStructure.ETH_Speed = ETH_Speed_100M;
ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;
///////////////////////////////////////////////////
ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable; //1رջìoÏÄ£ê½μÄμØÖ·1yÂË
ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;//¶Ôóú×é2¥μØÖ·ê1óÃíêÃàμØÖ·1yÂË
ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect; //¶Ôμ¥2¥μØÖ·ê1óÃíêÃàμØÖ·1yÂË
#ifdef CHECKSUM_BY_HARDWARE
ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable; //¿aÆôipv4oíTCP/UDP/ICMPμÄÖ¡D£ÑéoíD¶ÔØ
#endif
//μ±ÎòÃÇê1óÃÖ¡D£ÑéoíD¶ÔØ1|ÄüμÄê±oò£¬ò»¶¨òaê1Äü′æ′¢×a·¢Ä£ê½,′æ′¢×a·¢Ä£ê½ÖDòa±£Ö¤Õû¸öÖ¡′æ′¢ÔúFIFOÖD,
//ÕaÑùMACÄü2åèë/궱e3öÖ¡D£ÑéÖμ,μ±ÕæD£ÑéÕyè·μÄê±oòDMA¾í¿éòÔ′|àíÖ¡,·ñÔò¾í¶aÆúμô¸ÃÖ¡
ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable; //¿aÆô¶aÆúTCP/IP′íÎóÖ¡
ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable; //¿aÆô½óêÕêy¾YμÄ′æ′¢×a·¢Ä£ê½
ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable; //¿aÆô·¢Ëíêy¾YμÄ′æ′¢×a·¢Ä£ê½
ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable; //½ûÖ1×a·¢′íÎóÖ¡
ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable; //2»×a·¢1yD¡μÄoÃÖ¡
ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable; //′ò¿a′|àíμú¶tÖ¡1|Äü
ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable; //¿aÆôDMA′«êäμÄμØÖ·¶ÔÆë1|Äü
ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable; //¿aÆô1ì¶¨í»·¢1|Äü
ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat; //DMA·¢ËíμÄ×î′óí»·¢3¤¶èÎa32¸ö½úÅÄ
ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat; //DMA½óêÕμÄ×î′óí»·¢3¤¶èÎa32¸ö½úÅÄ
ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;
rval= ETH_Init(Ð_InitStructure,LAN8720_PHY_ADDRESS); //ÅäÖÃETH
if(rval==ETH_SUCCESS)//ÅäÖÃ3é1|
{
ETH_DMAITConfig(ETH_DMA_IT_NIS|ETH_DMA_IT_R,ENABLE); //ê1ÄüòÔì«íø½óêÕÖD¶Ï
}
return rval;
}
|
-
原理图
|