This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

急!求指点。C6678,UART部分,使用STK上的初始化程序及读写操作,发现只有一开始能读到16字节数据,再多或者循环起来时就读不到了,求指点!



大家好,求大家指点,我用的是STK上的例程写的UART程序,只用了UART初始化部分和读写操作程序,没有使用中断和EDMA搬运,但是现在遇到了一个问题,就是数据传输时,只能读取到我发送的前16字节数据,或者是最后的一个字节数据加上前15字节数据。而且就只能读到一次,后面时,我查了一下,发现读命令时,if(localUART_Regs->LSR & CSL_UART_LSR_DR_MASK)条件一直不满足,没法读数据。请问应该怎么改呢。是不是每次读写完之后,都要配置TXCLR,RXCLR清FIFO寄存器呢?

部分配置如下:MCR:禁止AUTO_FLOW,(不太懂这个是什么意思)

                    MGMT:FREE为0;

                     FCR:     FIFOEN:1;FIFO模式;       DMAMODE  1;DMA模式启动。 trigger level:14;

代码如下:

使用的读写命令:

写命令:KeyStone_UART_write(&r_cmd[0], 1, 0);

读命令:KeyStone_UART_read(&r_buf[i], 64, 0);

UART初始化部分代码:

波特率:115200,ioopback模式为0,TEST_UART_NUM=0;

 memset(&gUARTCfg, 0, sizeof(gUARTCfg));
 gUARTCfg.baudRate = baudRate;
 gUARTCfg.DSP_Core_Speed_Hz = gDSP_Core_Speed_Hz;
 gUARTCfg.dataLen = DATA_LEN_8BIT;
 gUARTCfg.parityMode = PARITY_DISABLE;
 gUARTCfg.stopMode = ONE_STOP_BIT;
    gUARTCfg.autoFlow = AUTO_FLOW_DIS;
 gUARTCfg.osmSel = OVER_SAMPLING_16X;
    gUARTCfg.fifoRxTriBytes = TRIGGER_LEVEL_14BYTE;
    gUARTCfg.txMaster = txMaster;
 gUARTCfg.bLoopBackEnable = bLoopBackEnable;
 KeyStone_UART_init(&gUARTCfg, TEST_UART_NUM);
读命令代码:
unsigned int KeyStone_UART_read(unsigned char *buffer,
 unsigned int buffByteLen, Uint32 uartNum)
{
    Uint32 byteCnt;
    CSL_UartRegs *localUART_Regs;
 localUART_Regs = gpUartRegs[uartNum];
 for(byteCnt=0; byteCnt<buffByteLen; byteCnt++)
 {
  if(localUART_Regs->LSR & CSL_UART_LSR_DR_MASK)
  {
   buffer[byteCnt] = localUART_Regs->RBR;
  }
  else  //FIFO empty
   break;
 }
 return byteCnt;
}