Need help on Periph_to_mem DMA transfer started from an interrupt

Good evening all,

I need advice on the following problem.

I have to connect an external hardware generating 32-bit values at a continuous rate of 1536 kHz to a GPIO port of a Cortex M4F CPU.

I had thought to use the DMA to fill a 512-entry buffer, in double buffered mode, alerting the CPU when one of the two flip-flop buffers is filled. This seems to not present problems.

What I am not sure is how to communicate to the DMA controller that a new sample is ready on the GPIO port. First of all, can the DMA be used this way ? IOW, can it be controlled by an EXTI interrupt generated by a pin of a GPIO port (of course not the same port where the samples are arriving from).

To summarize, the flow should be this :

- A new sample is set on the pins of a GPIO port.
- A pin of another port is toggled to tell to the DMA controller to read that value and to deposit it in memory, incrementing the memory address.
- When the count of samples reaches 512, a buffer switch happens, and an interrupt is generated to the CPU, which will then process the just filled buffer.

A snippet of code on how to initialize the NVIC and the DMA controllers would be much appreciated, thanks.

Parents
  • Well, I've checked Freescale K60's manual and it seems that your requirements could be matched. I don't know which M4F you choose but you can read its manual for sure.

    Take K60 for example, you should notice:

    1. Only DMA Channel 0~3 supports PIT triggers. You could configure PIT to trigger DMA from GPIO to buffer @1536kHz.

    2. You'd better choose a specific oscillator, whose frequency be multiple of 1536kHz.

    3. Double 512 buffer switching, that sounds a perfect Ping-Pong workmode. You can find similar samples from your chip vendor.

    4. BTW, is it a 480*320 digital camera?

Reply
  • Well, I've checked Freescale K60's manual and it seems that your requirements could be matched. I don't know which M4F you choose but you can read its manual for sure.

    Take K60 for example, you should notice:

    1. Only DMA Channel 0~3 supports PIT triggers. You could configure PIT to trigger DMA from GPIO to buffer @1536kHz.

    2. You'd better choose a specific oscillator, whose frequency be multiple of 1536kHz.

    3. Double 512 buffer switching, that sounds a perfect Ping-Pong workmode. You can find similar samples from your chip vendor.

    4. BTW, is it a 480*320 digital camera?

Children
More questions in this forum