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

6678 Keystore 官方代码,为什么UART只能发送接收到第一次的UART TX 数据,后来都发送不了了,RX接收数组里的数据不会更新

这是代码的运行结果,跟官方的一样

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里的数据没有刷新,还是第一次的值,我想知道为什么呢?

赞(0)
未经允许不得转载:TI中文支持网 » 6678 Keystore 官方代码,为什么UART只能发送接收到第一次的UART TX 数据,后来都发送不了了,RX接收数组里的数据不会更新
分享到: 更多 (0)