? ? eth_irq_flag = R8_ETH_EIR;
? ? if(eth_irq_flag&RB_ETH_EIR_RXIF)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //Receive complete
? ? {
? ? ? ? R8_ETH_EIR = RB_ETH_EIR_RXIF;
? ? ? ? /* Check if the descriptor is owned by the ETHERNET DMA */
? ? ? ? if( DMARxDescToGet->Status & ETH_DMARxDesc_OWN )
? ? ? ? {
? ? ? ? ? ? estat_regval = R8_ETH_ESTAT;
? ? ? ? ? ? if(estat_regval & \
? ? ? ? ? ? ? ? ? ? (RB_ETH_ESTAT_BUFER | RB_ETH_ESTAT_RXCRCER | RB_ETH_ESTAT_RXNIBBLE | RB_ETH_ESTAT_RXMORE))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? ? ? if( ((ETH_DMADESCTypeDef*)(DMARxDescToGet->Buffer2NextDescAddr))->Status& ETH_DMARxDesc_OWN )
? ? ? ? ? ? {
? ? ? ? ? ? ? ? DMARxDescToGet->Status &= ~ETH_DMARxDesc_OWN;
? ? ? ? ? ? ? ? DMARxDescToGet->Status &= ~ETH_DMARxDesc_ES;
? ? ? ? ? ? ? ? DMARxDescToGet->Status |= (ETH_DMARxDesc_FS|ETH_DMARxDesc_LS);
? ? ? ? ? ? ? ? DMARxDescToGet->Status &= ~ETH_DMARxDesc_FL;
? ? ? ? ? ? ? ? DMARxDescToGet->Status |= ((R16_ETH_ERXLN+4)<
? ? ? ? ? ? ? ? u8 data[100];
? ? ? ? ? ? ? ? u16 len = R16_ETH_ERXLN;
? ? ? ? ? ? ? ? memcpy(data, (u8*)DMARxDescToGet->Buffer1Addr, len);
? ? ? ? ? ? ? ? ETH_RX(data, len);
? ? ? ? ? ? ? ? /* Update the ETHERNET DMA global Rx descriptor with next Rx descriptor */
? ? ? ? ? ? ? ? /* Selects the next DMA Rx descriptor list for next buffer to read */
? ? ? ? ? ? ? ? DMARxDescToGet = (ETH_DMADESCTypeDef*) (DMARxDescToGet->Buffer2NextDescAddr);
? ? ? ? ? ? ? ? R16_ETH_ERXST = DMARxDescToGet->Buffer1Addr;
? ? ? ? ? ? }
? ? ? ? }
? ? }
如题