Skip to content

The ISR register is never re-evaluated in HAL_DMA_PollForTransfer for STM32F4 #3272

@andreaslarssonublox

Description

@andreaslarssonublox

This will cause the function to unnecessarily wait for timeout in some circumstances.
Putting 'tmpisr = regs->ISR;' at the end of the while loop solves it for the ODIN driver.
See andreaslarssonublox@df192f8

The HAL_DMA_PollForTransfer function is here:
mbed-os\targets\TARGET_STM\TARGET_STM32F4\device\stm32f4xx_hal_dma.c

Description

  • Type: Bug
  • Related issue: None
  • Priority: Major

Bug

Target
UBLOX_EVK_ODIN_W2
All that are based on TARGET_STM32F4\device\stm32f4xx_hal_dma.c
Looks like TARGET_STM32F7\device\stm32f7xx_hal_dma.c has the same problem.

Toolchain:
GCC_ARM|ARM|IAR

Toolchain version:
GCC - 4.8 2013q4

mbed-cli version:
0.9.10

meed-os sha:
9d8ec61 Merge pull request #3258 from sarahmarshy/build_test_err

DAPLink version:
0221

Expected behavior
The function returns when the DMA transfer is completed.

Actual behavior
The function returns only after the timeout has passed which makes the system very slow.

Steps to reproduce
This has been reproduced with the private repo of the u-blox ODIN-drivers and the fix can therefore only be verified by u-blox for the UBLOX_EVK_ODIN_W2 target.

  • Get ublox ODIN drivers branch alar_sdio_optimizations
  • Get mbed-os commit 9d8ec61
  • Run WiFi and BT tests. WiFi will timeout because initialization is too slow(~15 sec)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions