Hi John
I am not suggesting porting the project but instead using it as working reference. You can even put your code into its and use it simulator so see what happens and see why things don't operate if needed.
For example this is the UART DMA initalisation:
uart_reg->UART_C5 |= UART_C5_TDMAS; // use DMA rather than interrupts for transmission
fnConfigDMA_buffer(UART_DMA_TX_CHANNEL[Channel], usDMAMUX, 0, 0, (void *)&(uart_reg->UART_D), (DMA_BYTES | DMA_DIRECTION_OUTPUT | DMA_SINGLE_CYCLE), _uart_tx_dma_Interrupts[Channel], UART_DMA_TX_INT_PRIORITY[Channel]);
uart_reg->UART_C2 |= (UART_C2_TIE); // enable the tx dma request (DMA not yet enabled) rather than interrupt mode
which may already be enough to identify what you are possibly missing [one clue it gives is that you need to enable both DMA and enable interrupts in the UART]. All DMA setup is in fnConfigDMA_buffer() (which works on any Kinetis DMA controller)
This works on all Kinetis UARTs (any and all channels).
To see how to start a transmission of a buffer content see fnTxByteDMA() which is, for the K10,
// Start transfer of a block via DMA
//
extern QUEUE_TRANSFER fnTxByteDMA(QUEUE_HANDLE Channel, unsigned char *ptrStart, QUEUE_TRANSFER tx_length)
{
KINETIS_DMA_TDC *ptrDMA_TCD = (KINETIS_DMA_TDC *)eDMA_DESCRIPTORS;
ptrDMA_TCD += UART_DMA_TX_CHANNEL[Channel];
ptrDMA_TCD->DMA_TCD_BITER_ELINK = ptrDMA_TCD->DMA_TCD_CITER_ELINK = tx_length; // the number of service requests (the number of bytes to be transferred)
ptrDMA_TCD->DMA_TCD_SADDR = (unsigned long)ptrStart; // source is tty output buffer's present location
ATOMIC_PERIPHERAL_BIT_REF_SET(DMA_ERQ, UART_DMA_TX_CHANNEL[Channel]);// enable request source in order to start DMA activity
return tx_length;
}
Code is comprehensively commented/documented and is therefore very suitable for study/learning.
The uTasker drivers adapt them selves to all Kinetis parts, with UARTs or LPUARTs, and whatever DMA controller the chip has and even run on i.MX RT parts [adapting itself just very slightly] (since the i.MX RT LPUARTs and DMA operation is compatible).
Regards
Mark