OK SOLVED!
After days of test now i can transfer over DMA 32 bytes on UART0 tx.
Now i must work for UART0 rx dma..
The UART0 is pre-configured before, with standard fsl_uart.c (mcuxpresso)
The code:
/*******************************************************************************
* Definitions
******************************************************************************/
uint8_t str[32]={'X','2','3','4','5','6','7','Y','K','2','3','4','5','6','7','W',\
'?','2','3','4','5','6','7','$','%','2','3','4','5','6','7','&'};
/*******************************************************************************
* Prototypes
******************************************************************************/
/*******************************************************************************
* Code
******************************************************************************/
/*!
* @brief Main function
*/
int init_my_dma(void)
{ // Enable DMA clocks
SIM->SCGC6 |= SIM_SCGC6_DMAMUX_MASK;
SIM->SCGC7 |= SIM_SCGC7_DMA_MASK;
UART0->C5|=0b10000000;
UART0->C2|=0b10000000;
// Configure TX DMA
DMAMUX->CHCFG[0] &= ~(DMAMUX_CHCFG_ENBL_MASK);
DMAMUX->CHCFG[0] = DMAMUX_CHCFG_SOURCE(3);
DMA0->TCD[0].BITER_ELINKNO = 32;
DMA0->TCD[0].CITER_ELINKNO = 32;
DMA0->TCD[0].SADDR = (__IO uint32_t)str;
DMA0->TCD[0].ATTR = DMA_ATTR_SMOD(0) | DMA_ATTR_SSIZE(0) | DMA_ATTR_DMOD(0) | DMA_ATTR_DSIZE(0);
DMA0->TCD[0].SOFF = 1;
DMA0->TCD[0].NBYTES_MLNO = DMA_NBYTES_MLNO_NBYTES(1);
DMA0->TCD[0].SLAST = -32;
DMA0->TCD[0].DADDR =(__IO uint32_t) &UART0->D;
DMA0->TCD[0].DOFF = 0;
DMA0->TCD[0].DLAST_SGA = 0;
DMA0->ERQ &= ~DMA_ERQ_ERQ0_MASK;
DMAMUX->CHCFG[0] |= DMAMUX_CHCFG_ENBL_MASK;
NVIC_EnableIRQ(IRQ_DMA0_IRQN);
DMA0->TCD[0].CSR |= DMA_CSR_DREQ_MASK | DMA_CSR_DONE_MASK | DMA_CSR_INTMAJOR_MASK;
DMA0->ERQ |= DMA_ERQ_ERQ0_MASK; //this line start the dma transfert
return 0;
}