David
Any part with eDMA will allow you to essentially use the same code (only the DMAMUX channels can change but if you do it with defines and not fixed number it will be portable.
I have used identical eDMA code in many projects/product development on over 50 different K/KM/KV/KW (and some KL) parts with eDMA.
In the uTasker project the DMA driver is in fact compatible also with KL parts that have a different DMA controller with reduced functionality (it emulates half buffer interrupts for example) so that the application layer doesn't need to know and such code essentially operate on any part with DMA (the simpler DMA controller needs modulo aligned buffers for free-running operation which is a bit of a pain in comparison to the much more able eDMA).
I have attached its DMA HAL layer as reference (DMA operation is simulated in the uTasker project so all is operational in VisualStudio, which removes guessing as most errors or incorrect usage is flagged immediately). It also includes memset() ,memcpy() and reverse copy routines using DMA (I tend to reserve 2 DMA channels for this - one that is used by user code and a second that is used by interrupt context code (so that two such MEM->MEM operations can work in parallel)). They also do alignment optimisation since this can make transfers MUCH faster if buffers are otherwise not on boundaries.
Regards
Mark
P.S. K1x series sounds best for you since it has eDMA without USB and Ethernet.
P.P.S. A further difference with some eDMA operation is that some processors share pairs of channel interrupts (but easy to handle in a compatible way)