这是代码的运行结果,跟官方的一样
Thomas Yang1:
您应该开启了loopback模式,您的第一次是什么意思?如果是循环发送,确保每次需要把发送TX BUFFER设置成新数据。
或者设置不同的RX BUFFER测试下呢?
bruce lee4:
回复 Thomas Yang1:
你好,是这样的,我开启了 开启了loopback模式,代码我没变动。
for(baudRate= DEFAULT_BAUD_RATE; baudRate<5000000; baudRate*=2) { KeyStone_UART_config(baudRate, bInternalLoopback, UART_USE_EDMA_TO_TX);
/* Fill the Tx and Rx buffer with inversed data*/#if 1 for(i=0; i<UART_TEST_BUF_BYTE_SIZE; i++) { UART_Test_Tx_Buf[i]= i+testData+'0'; UART_Test_Rx_Buf[i]=0; }#else memset(UART_Test_Tx_Buf, testData, sizeof(UART_Test_Tx_Buf)); memset(UART_Test_Rx_Buf, ~testData, sizeof(UART_Test_Rx_Buf));#endif
/* Send the data through EDMA */
KeyStone_UART_write(UART_Test_Tx_Buf, UART_TEST_BUF_BYTE_SIZE, TEST_UART_NUM);
startCycle = TSCL;
/* poll data from Rx side */ rxCount= 0; correct= 0; while(1) { while(!(localUartRegs->LSR & CSL_UART_LSR_DR_MASK))//DATA IS not READY { //timeout if the time is more than 4 times of the expected time if(TSC_count_cycle_from(startCycle)> 4*UART_TEST_BUF_BYTE_SIZE*10*(gDSP_Core_Speed_Hz/baudRate)) { printf("UART%d timeout: Tx %d bytes, Rx %d bytes\n", TEST_UART_NUM, UART_TEST_BUF_BYTE_SIZE, rxCount); return; } }
UART_Test_Rx_Buf[rxCount++] = localUartRegs->RBR;
if(rxCount == UART_TEST_BUF_BYTE_SIZE) break;
} // rxCount= KeyStone_UART_read(UART_Test_Rx_Buf,UART_TEST_BUF_BYTE_SIZE, TEST_UART_NUM);
cycles = TSC_count_cycle_from(startCycle);
//verfiy the receive data for(i = 0; i < rxCount; i++) { if(UART_Test_Rx_Buf[i] == UART_Test_Tx_Buf[i]) { correct++; //count the number of correct data } }
throughput = (unsigned long long)rxCount*8*gDSP_Core_Speed_Hz/ ((unsigned long long)cycles*1000);
printf("UART%d: Tx %d bytes, Rx %d bytes, %d correct bytes. Consumes %d cycles, throughput is %dKbps\n", TEST_UART_NUM, UART_TEST_BUF_BYTE_SIZE, rxCount, correct, cycles, throughput);
testData++; //change test data
我查看了TX 和RX两个定义的发送和接收的数组,只有在第一次循环 115200波特率时,TX和RX的内容一样,在第二次循环后,RX的数组里面的数据不变,而TX的一直在刷新,我 想问下怎么修改配置能实现,不断的发,能不断的接收呢?
Thomas Yang1:
回复 bruce lee4:
1)我看代码中是采用EDMA方式的,请查下EDMA搬移是否正常完成了?
2)你手动把RX BUFFER中1个值改下,看是否会被新值覆盖呢?
3) 第2次操作后,correct统计有没有在累加
bruce lee4:
回复 Thomas Yang1:
应该是正常完成了,在第一次循环的时候RX的内容跟TX发送的内容一模一样,第二次循环一开始,我把RX的值全赋值为零,循环后,RX的值都改变了,RX的值和第一次循环EDMATX发送的数据一模一样,也就是说,第二次循环后,EDMA发送到localUartRegs->RBR里的数据没有刷新,还是第一次的值,我想知道为什么呢?