Hi, I am actually configuring the MPU with the following function, which was taken over from the STM32 example project:
/*Configure the MPU attributes */ void MPU_Config(void) { MPU_Region_InitTypeDef MPU_InitStruct; /* Disable the MPU */ HAL_MPU_Disable(); /* Configure the MPU attributes as Device not cacheable for ETH DMA descriptors */ MPU_InitStruct.Enable = MPU_REGION_ENABLE; MPU_InitStruct.BaseAddress = 0x30040000; MPU_InitStruct.Size = MPU_REGION_SIZE_256B; MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS; MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE; MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; MPU_InitStruct.Number = MPU_REGION_NUMBER0; MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0; MPU_InitStruct.SubRegionDisable = 0x00; MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; HAL_MPU_ConfigRegion(&MPU_InitStruct); /* Configure the MPU attributes as Cacheable write through for LwIP RAM heap which contains the Tx buffers */ MPU_InitStruct.Enable = MPU_REGION_ENABLE; MPU_InitStruct.BaseAddress = 0x30044000; MPU_InitStruct.Size = MPU_REGION_SIZE_16KB; MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS; MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE; MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE; MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; MPU_InitStruct.Number = MPU_REGION_NUMBER1; MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0; MPU_InitStruct.SubRegionDisable = 0x00; MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; HAL_MPU_ConfigRegion(&MPU_InitStruct); /* Enable the MPU */ HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); } If I read the function correctly, it configures the descriptor areas as non-cacheable and the LwIP heap region as non bufferable. I call this in hardware_init, which is the first function called in my Init funnction void hardware_init() { BSP_LED_Init(LED1); BSP_LED_Init(LED2); BSP_LED_Init(LED3); MPU_Config(); /* Initialize the LwIP stack */ lwip_init(); /* Configure the Network interface */ Netif_Config(); } I checked everything again and basically the setup appears to be identical to the example now.. I'm confused that it's not working. I also supplied the following interrupt function in my C code: /** * @brief This function handles Ethernet interrupt request. * @param None * @retval None */ void ETH_IRQHandler(void) { HAL_ETH_IRQHandler(&EthHandle); } But it appears not to be called.. Kind Regards Robin On Fri, 29 Jan 2021 at 12:03, Sebastian Huber < sebastian.hu...@embedded-brains.de> wrote: > On 29/01/2021 12:01, Robin Müller wrote: > > > The HAL_ETH_Transmit call just times out. If I set the timeout to 20 > > to HAL_MAX_DELAY, the function will just block indefinitely. > > Does anyone have an idea why this might happen? > I would check the memory settings in the MPU for this area. You probably > need some sort of device memory (uncached). > > -- > embedded brains GmbH > Herr Sebastian HUBER > Dornierstr. 4 > 82178 Puchheim > Germany > email: sebastian.hu...@embedded-brains.de > phone: +49-89-18 94 741 - 16 > fax: +49-89-18 94 741 - 08 > > Registergericht: Amtsgericht München > Registernummer: HRB 157899 > Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler > Unsere Datenschutzerklärung finden Sie hier: > https://embedded-brains.de/datenschutzerklaerung/ > >
_______________________________________________ users mailing list users@rtems.org http://lists.rtems.org/mailman/listinfo/users