AnsweredAssumed Answered

Efficient lookup table implementation with DMA?

Question asked by SCOTT MILLER on Oct 1, 2017
Latest reply on Aug 18, 2018 by SCOTT MILLER

I find that I'm frequently running data through a lookup table just prior to sending it out to a peripheral via DMA - for example, to handle gamma correction or to convert PCM samples to pulse density modulation bit patterns.  Is there a way to have the Kinetis eDMA controller do this efficiently on its own?


I'm fairly certain a DMA-based lookup table is possible, using linked channels with one channel loading source data into the low byte(s) of another's SADDR register.  I'm not certain if the hardware allows one channel to directly access another's TCD or if it'd have to use scatter/gather mode and reload the modified TCD from system RAM, but at best that's going to require two DMA requests per source word.


The ability to do this as part of the normal DMA request process would be tremendously useful for data transformation like the examples above and for emulating other hardware interfaces, for example to use an I2S port to transmit asynchronous data by setting the transmitter for a 10-bit word size and using a lookup table to convert a buffer of 8-bit data into 10-bit sequences with start and stop bits.