我在Avnet的MMP2板上的Kintex 7上建立了一个简单的Microblaze系统。我在这个系统中使用Uartlite (v2.0) IP,并使用Teraterm (v4.85)与PC进行通信。在设计阶段,Uartlite组件的波特率必须固定在特定的值上。我已经为我的设计选择了19200 bps。我编写了一个非常简单的应用程序,它通过Teraterm向PC发送6个连续的"At",然后从Teraterm控制台获得一个ascii字符并打印相同的字符。问题是,对于每一个"At",Teraterm在控制台上只显示一个'Ç'。传输参数如下:
19200 bps;8数据位;1停止位;无奇偶校验;无流控制
然而,经过大量的抓取、尝试和错误之后,我发现如果我将Teraterm中的baudrate更改为38400 bps,我就会得到所需的行为,即在控制台上获得"At"s,从控制台获取一个字符并将其打印回来。
据我所知,代码(这是非常简单的),我没有改变波德率。但是不知怎么的,我发送数据的速度比指定的速率要快。所用的时钟是100兆赫。既然波德率必须在设计阶段指定,那么如何才能达到更高的波特率呢?我做错了什么?
代码是这样的:
#include <stdio.h>
#include "platform.h"
#include "xgpio_l.h"
#include "xintc_l.h"
#include "xparameters.h"
#include "xuartlite_l.h"
#define MAX_UART_BUFFER_LENGTH 16
u8 uart_rx_data = 0;
int main()
{
init_platform();
//Init GPIOs
//dip switch port as input
XGpio_WriteReg(XPAR_AXI_GPIO_0_BASEADDR, XGPIO_TRI_OFFSET, 0xFFFFFFFF);
char count_data = 0x0F;
while(1)
{
unsigned int dip_gpio_data = XGpio_ReadReg(XPAR_AXI_GPIO_0_BASEADDR, XGPIO_DATA_OFFSET) & 0x000000FF;
if(dip_gpio_data == 0)
{
u8 send_data[MAX_UART_BUFFER_LENGTH] = "AtAtAtAtAtAt";
u8 i = 0 ;
for (i = 0; i < MAX_UART_BUFFER_LENGTH; i++)
{
if(send_data[i] != '\0')
XUartLite_SendByte(XPAR_AXI_UARTLITE_0_BASEADDR, send_data[i]);
else
break;
}
//Rx something from Teraterm
uart_rx_data = XUartLite_RecvByte(XPAR_AXI_UARTLITE_0_BASEADDR);
//Send same thing back
XUartLite_SendByte(XPAR_AXI_UARTLITE_0_BASEADDR, uart_rx_data);
XUartLite_SendByte(XPAR_AXI_UARTLITE_0_BASEADDR, '\n');
XUartLite_SendByte(XPAR_AXI_UARTLITE_0_BASEADDR, '\r');
}
}
return 0;
}编辑:
今天,我尝试将UARTlite IP核的波特率降低到9600,重新生成比特流并再次运行。同样的结果。如果我将Teraterm的波特率设置为9600,它就不能工作。Teraterm给出了14400波特率的选项。我用过这个。我得到了12个字符,但胡言乱语。如果我把它翻一倍到19200,它就能工作得很好。我将尝试与其他波特率以及更新。救命啊!这仍然是我设计的基本部分。下图供参考:

EDIT2:
我尝试了以下几点:
三次都试过了。行为没有改变。:(
发布于 2015-11-13 10:16:33
找到了这种奇怪行为的原因。这是我在设计阶段的一个错误。根据我以前的设计,时钟向导期望100 my作为输入,并被设计成在输出端产生100 my(不进行分割)。我的UARTLite核心还期望有一个100 My的时钟,并应用相关的分频器值来生成19200的波特率。但董事会提供200兆赫。clk_wizard假设它是100 The,不需要任何分割就通过时钟,并且链一直持续到UARTLite。这里,UARTLite将200 200MHz除以它为100 200MHz生成的数字。因此,我正以双倍的速度转移。
不管怎样,谢谢你给我时间。
https://stackoverflow.com/questions/33653445
复制相似问题