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_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 );
	}
}
Beispiel #3
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 );
  }
}