大家好,求大家指点,我用的是STK上的例程写的UART程序,只用了UART初始化部分和读写操作程序,没有使用中断和EDMA搬运,但是现在遇到了一个问题,就是每次数据传输时,只能读取到我发送的前16字节数据,或者是最后的一个字节数据加上前15字节数据。代码如下:
使用的读写命令:
写命令: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;
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;
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;
}
{
if(localUART_Regs->LSR & CSL_UART_LSR_DR_MASK)
{
buffer[byteCnt] = localUART_Regs->RBR;
}
else //FIFO empty
break;
}
return byteCnt;
}