I installed RTX (rtos from Keil) and Ethernet library from STM for stm32f207 MC. I configured UDP using ethernet + LwIP as in examples from STM.
Without RTOS UDP works fine. I send and get packets without any problems, but with RTOS (RTX in my case) i can only send packets with ARP-request but can't get packets due to i have no ethernet interrupts on receiving packets (can't get ETH_DMA_FLAG_R flag). I know, that there are reciving packets because i see them in Wireshark.
So, that's how i configure Ethernet interrupts:
extern ETH_DMADESCTypeDef DMARxDscrTab[ETH_RXBUFNB], DMATxDscrTab[ETH_TXBUFNB];
/* Ethernet Receive buffers */
extern uint8_t Rx_Buff[ETH_RXBUFNB][ETH_RX_BUF_SIZE];
/* Ethernet Transmit buffers */
extern uint8_t Tx_Buff[ETH_TXBUFNB][ETH_TX_BUF_SIZE];
...
ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB);
/* Initialize Rx Descriptors list: Chain Mode */
ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);
/* Enable Ethernet Rx interrrupt */
for(i=0; i<ETH_RXBUFNB; i++)
{
ETH_DMARxDescReceiveITConfig(&DMARxDscrTab[i], ENABLE);
}
for(i=0; i<ETH_TXBUFNB; i++)
{
ETH_DMATxDescTransmitITConfig(&DMATxDscrTab[i], ENABLE);
}
NVIC_EnableIRQ(ETH_IRQn);
...
void ETH_IRQHandler(void)
{
/* CANNOT ENTER HERE */
if (ETH_GetDMAFlagStatus(ETH_DMA_FLAG_R) == SET)
{
/* Give the semaphore to wakeup LwIP task */
sys_sem_signal(&s_xRxSemaphore);
}
/* Clear the interrupt flags. */
/* Clear the Eth DMA Rx IT pending bits */
ETH_DMAClearITPendingBit(ETH_DMA_IT_R);
ETH_DMAClearITPendingBit(ETH_DMA_IT_NIS);
}
So, as i said, Wireshark shows me that there are answers with ARP-requests with mac-adress, but i can't enter in interrupt to process them.