Other Parts Discussed in Thread: TMS320C6747
I want to use edma to send uart data.The hardware is tms320c6747.Howerver,I can only send 16 bytes data.The edma configure ,the function parameter 'len' is the character string's length.
void EDMA3_Uart(int len)
{
EDMA3ccRegs->DRA[1].DRAE = (1<<12) |(1<<13);
EDMA3ccRegs->DMAQNUM[1] = 0x00110000 ;
EDMA3ccRegs->PARAMSET[13].OPT = 0x0010D004;
EDMA3ccRegs->PARAMSET[13].SRC = (Uint32)tx_buf;
EDMA3ccRegs->PARAMSET[13].A_B_CNT = _pack2(len, 1);
EDMA3ccRegs->PARAMSET[13].DST = (Uint32)(&(Uart2Regs->THR));
EDMA3ccRegs->PARAMSET[13].SRC_DST_BIDX = _pack2(0, 1);
EDMA3ccRegs->PARAMSET[13].LINK_BCNTRLD = _pack2(0, 0xffff);
EDMA3ccRegs->PARAMSET[13].SRC_DST_CIDX = _pack2(0, 0);
EDMA3ccRegs->PARAMSET[13].CCNT = 1;
BCACHE_writeback((Ptr)tx_buf, sizeof(tx_buf));
}
then I use Manually-Triggered Transfer Request ,set ESR corresponding bit 1.The code as below :
// 串口输出字符串
Int16 uart1_send(String uart_tx_str)
{
volatile Uint16 dummy;
Uint8 lsr_status;
int len,i;
unsigned char* src=tx_buf;
len = strlen(uart_tx_str);
memset(tx_buf,0,sizeof(tx_buf));
strcpy(tx_buf,uart_tx_str);
EDMA3_Uart(len);
EDMA3ccRegs->ESR = 1<<13;
}
But this program only send 16 bytes when character string length greater than 16.I am guess becausethe transmitter FIFO only 16 bytes,subsequent character is lost.
How to solve the question?
I'm sorry,I english is not well! Thanks.