Beispiel #1
0
/* interrupt service routine */
void ETH_IRQHandler(void)
{
   rt_uint32_t status;

	status = ETH->DMASR;

	/* Frame received */
	if ( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_R) == SET) 
	{
		rt_err_t result;
		//rt_kprintf("Frame comming\n");
		/* Clear the interrupt flags. */
		/* Clear the Eth DMA Rx IT pending bits */  
		ETH_DMAClearITPendingBit(ETH_DMA_IT_R);

		/* a frame has been received */
		result = eth_device_ready(&(stm32_eth_device.parent));
		if( result != RT_EOK ) rt_kprintf("RX err =%d\n", result );
		//RT_ASSERT(result == RT_EOK); 
	}
	if (ETH_GetDMAITStatus(ETH_DMA_IT_T) == SET) /* packet transmission */
	{
		ETH_DMAClearITPendingBit(ETH_DMA_IT_T);
	}
	
	ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
//	

}
//以太网中断服务函数
void ETH_IRQHandler(void)
{
	while(ETH_GetRxPktSize(DMARxDescToGet)!=0) 	//检测是否收到数据包
	{ 
		LwIP_Pkt_Handle();		
	}
	ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
	ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
}   
Beispiel #3
0
/**
  * @brief  This function handles ETH interrupt request.
  * @param  None
  * @retval None
  */
void ETH_IRQHandler(void)
{
  	/* Handles all the received frames */
  	while(ETH_GetRxPktSize(DMARxDescToGet) != 0) 
  	{		
	  LwIP_Pkt_Handle();
  	}

  	/* Clear the Eth DMA Rx IT pending bits */
  	ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
  	ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
}
Beispiel #4
0
/**
  * @brief  This function handles ethernet DMA interrupt request.
  * @param  None
  * @retval None
  */
void ETH_IRQHandler(void)
{
  portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;

  /* Frame received */
  if ( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_R) == SET) {
    /* Give the semaphore to wakeup LwIP task */
    xSemaphoreGiveFromISR( s_xSemaphore, &xHigherPriorityTaskWoken );   
  }
	
  /* Clear the interrupt flags. */
  /* Clear the Eth DMA Rx IT pending bits */
  ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
  ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
	
  /* Switch tasks if necessary. */	
  if ( xHigherPriorityTaskWoken != pdFALSE ) {
    portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
  }
}
/* Eth Isr routine */
static void Eth_Isr(void)
{
	uint32_t res = 0;

	while((ETH_GetRxPktSize() != 0) && (res == 0))
	{
		  /* move received packet into a new pbuf */
		  struct pbuf *p = low_level_input(&netif);

          if(p!=NULL){
        	  tcpip_input(p, &netif);
          }else{
        	  res = 1;
          }
	}

	/* Clear the Eth DMA Rx IT pending bits */
	ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
	ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
	ETH_DMAClearITPendingBit(ETH_DMA_IT_RO);
	ETH_DMAClearITPendingBit(ETH_DMA_IT_RBU);
}
void ETH_IRQ_Handler(void)
{
	portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;


	if( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_AIS) == SET) {
		vTracePrintF(xTraceOpenLabel("ETH IRQ"), "AIS received");
		ETH_DMAClearITPendingBit(ETH_DMA_IT_AIS);
		if(ETH_GetDMAFlagStatus(ETH_DMA_IT_RBU) == SET) {
			vTracePrintF(xTraceOpenLabel("ETH IRQ"), "RBU received");
			ETH_DMAClearITPendingBit(ETH_DMA_IT_RBU);
		}
		if(ETH_GetDMAFlagStatus(ETH_DMA_IT_RPS) == SET) {
			vTracePrintF(xTraceOpenLabel("ETH IRQ"), "RPS received");
			ETH_DMAClearITPendingBit(ETH_DMA_IT_RPS);
		}
		if(ETH_GetDMAFlagStatus(ETH_DMA_IT_RO) == SET) {
			vTracePrintF(xTraceOpenLabel("ETH IRQ"), "RO received");
			ETH_DMAClearITPendingBit(ETH_DMA_IT_RO);
		}
		if(ETH_GetDMAFlagStatus(ETH_DMA_IT_FBE) == SET) {
			vTracePrintF(xTraceOpenLabel("ETH IRQ"), "FBE received");
			ETH_DMAClearITPendingBit(ETH_DMA_IT_FBE);
		}
	}

	if( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_NIS) == SET) {
		/* Frame received */
		if ( ETH_GetDMAFlagStatus(ETH_DMA_FLAG_R) == SET)
		{
			//vTracePrintF(xTraceOpenLabel("ETH IRQ"), "R received");
			/* Give the semaphore to wakeup LwIP task (ethernetif_input)*/
			xSemaphoreGiveFromISR( s_xSemaphore, &xHigherPriorityTaskWoken );

			/* Clear the interrupt flags. */
			/* Clear the Eth DMA Rx IT pending bits */
			ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
			ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
		}
	}


	/* Switch tasks if necessary. */
	if( xHigherPriorityTaskWoken != pdFALSE )
	{
		portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
	}
}