Using LwIP on the STM32H7
Joel Sherrill
joel at rtems.org
Fri Jan 29 13:17:50 UTC 2021
On Fri, Jan 29, 2021, 5:52 AM Robin Müller <robin.mueller.m at gmail.com>
wrote:
> 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..
>
Is the irq being registered via the RTEMS interrupt APIs? If not and you
are getting an interrupt, I'd wonder why you aren't seeing a spurious
interrupt flagged.
It shouldn't be installed directly at the hardware level.
--joel
> Kind Regards
> Robin
>
> On Fri, 29 Jan 2021 at 12:03, Sebastian Huber <
> sebastian.huber at 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.huber at 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 at rtems.org
> http://lists.rtems.org/mailman/listinfo/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20210129/b077e2e4/attachment-0001.html>
More information about the users
mailing list