This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F280039: Dma generating interrupt after each burst

Part Number: TMS320F280039

Hello,

I have a 16kHz timer interrupt that calls its own isr.

Into the ISR I trigger a dma to transfer 6 words from a buffer to the SPI TX FIFO (burst size = 1 and transfer size = 6). I also configured another dma to read the related 6 words from the SPI RX FIFO and move them to another buffer. So far so easy: with one dma start I can transfer my buffers entirely and the sequence restart at the next timer interrupt.

What I'm struggling with is this: I need to trigger a CLA task after each burst transfer, meaning that I need the CLA task running 6 times, once per each burst.

Ideally, I would like to use the timer isr to start the SPI/DMA transaction and to handle "slow" calculations, whilst I need to do some fast computing every time I get a fresh word from the SPI.

Is that possible in some way? Please note that I cannot have more than one ISR registered in the CPU because its cycle must be extremely deterministic.

Thank you!

  • Hi Michel Donadon,

    DMA Channel Interrupt can be used as CLA task trigger. But the DMA interrupt can be configured only at the start/end of a transfer, not after every burst.

    One option could be to configure the transfer size as 1 (So 1 transfer = 1 burst). And configure the channel in continuous mode and disable after you receive all the 6 bursts.

    Regards,

    Veena

  • Hello Veena,

    Thank you, for the reply.

    Yes, this is something I thought of... but if I do that (1 transfer = 1 burst), how can I stop the DMA after 6 transactions? Please consider that DMA should handle the SPI communication in autonomy, with zero overhead of the CPU. Is that possible? Can the CLA stop the DMA? Plus, how can I reset the source/destination address pointers of the 2 DMA channels?

    Thank you!

    Michel