TI中文支持网
TI专业的中文技术问题搜集分享网站

急!求指点。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;
}
zhongji song:

回复 Thomas Yang1:

谢谢你的回答,这个地方虽然设置了gUARTCfg.bLoopBackEnable = bLoopBackEnable;但后面用的时候我禁止了。更改波特率试了一下,还是不行。我认为是UART的FIFO一共就16字节,所以如果超过十六字节的话,就需要每次用读命令去读16字节。而且如果连着用读命令,还是不行的,还必须要一个写命令,一个读命令,这样才能读到超过16字节的数据。

user4684431:

我也遇到了同样的问题,请问您的问题解决了吗?

赞(0)
未经允许不得转载:TI中文支持网 » 急!求指点。C6678,UART部分,使用STK上的初始化程序及读写操作,发现只有一开始能读到16字节数据,再多或者循环起来时就读不到了,求指点!
分享到: 更多 (0)