cancel
Showing results for 
Search instead for 
Did you mean: 

Make EXTI generates a request to DMA1 on STM32H7

GregB
Associate II

Hi,

I'm trying to trig a DMA from the EXTI0 input. There is a good example in the STM32Cube package for the H7: Projects\STM32H743I-EVAL\Examples\DMA\DMAMUX_RequestGen

But this example uses the BDMA and I need to use the DMA1. I tried to make some modifications to the example but without success (see https://community.st.com/s/question/0D53W00000Pnct0SAB/make-the-stm32h7-example-dmamuxrequestgen-work-with-dma1-instead-of-bdma).

Reading the chapter "Block interconnect" I see that the source signal is called "exti_syscfg_exti0" when connected to dmamux2_gen20, but it is called " exti_exti0_it" when connected to dmamux1_gen6. I really don't understand what it means... For sure I use DMAMUX1 with the correct signal ID, but is there something else to change from the example using BDMA/DMAMUX2 ?

Thank you.

1 ACCEPTED SOLUTION

Accepted Solutions
GregB
Associate II

This is the answer I got from ST:

The behaviour with the EXTI0 is different in domain D3 (triggering BDMA from EXTI0). This is due to the fact that the domain D3 is designed for autonomous mode where both CPU core are OFF. The EXTI0 can only be used as an event. It is automatically cleared.

With DMAMUX1 in domain D2, if a trigger is needed without executing an IRQ handler, the EXTI0 is not the good one. A timer or a DMA event has to be used instead.

 

More information can be found in the Release Manual (EXTI, DMAMUX, PWR sections) and AN5224 (STM32 DMAMUX: the DMA request router).

View solution in original post

3 REPLIES 3

ST does not care to clarify this.

IMO, input to DMAMUX2 is not coming from EXTI module, ie. it's not the output of EXTI having been already latched, but directly from SYSCFG, i.e. it's the output of the EXTI input multiplexer, i.e. it's directly the pin assigned to given EXTI.

OTOH, input to DMAMUX comes from output of the EXTI latch, so you have to set up also EXTI for the appropriate edge(s); and I'm not quite sure if you can do without clearing it in some way.

https://community.st.com/s/question/0D50X0000Buds3C/stm32h7-triggering-a-spi-tx-transmission-via-dma-with-a-synch-event-on-exti0 although the problem there was somewhat different.

I don't use H7.

JW

GregB
Associate II

This is the answer I got from ST:

The behaviour with the EXTI0 is different in domain D3 (triggering BDMA from EXTI0). This is due to the fact that the domain D3 is designed for autonomous mode where both CPU core are OFF. The EXTI0 can only be used as an event. It is automatically cleared.

With DMAMUX1 in domain D2, if a trigger is needed without executing an IRQ handler, the EXTI0 is not the good one. A timer or a DMA event has to be used instead.

 

More information can be found in the Release Manual (EXTI, DMAMUX, PWR sections) and AN5224 (STM32 DMAMUX: the DMA request router).

Thanks for coming back with that response.

I am not even trying to understand it. The H7 is a beast and its documentation is lacking even more than other STM32's. I'm lucky enough to be able to stay away of it so far.

JW