FPGA开发之UART的使用

UART使用过程中的一些错误提示

首先是关于UART测试的步骤:

在使用超级终端软件测试UART的回显时,一定要遵循以下步骤:

  • 1、烧写工程与测试程序给FPGA芯片
  • 2、连接串口通信线
  • 3、打开软件 Hyper Terminal并点击绿色的+号开始通信,并且要设置好波特率   
  • 4、输入字符测试能否回显

测试回显的步骤与一些注意事项:

对终端的设置不同,回显的效果也不一样:

如果设置了本地显示的话,如果按下一个序列:abcdefg 在软件中成功回显的标志应该是:aabbccddeeffgg

如果没有设置本地显示,如果按下一个序列:abcdefg 在软件中成功回显的标志应该是:abcdefg

还有注意,输入的字符必须是 英文 模式下的字符,如果是 中文 模式下输入,则不会发送,但会产生回显的错觉。(因为会显示在屏幕上)

判断是否发送的标志是看终端软件下方的 Send后面是否有变化,而成功回显时Recevied应该也会变化。

 

 

UART测试过程中常出现的错误原因:

1、测试程序中未初始化波特因子寄存器

所以在自己自行写程序测试的时候初始化时一定要写如下语句:

ori $t1,$0,0x145 

sw  $t1,0x7f18($0) 

(设置接收波特因子,这里的145h是25MHz频率,9600波特率下的数据)

ori $t2,$0,0xa2b

sw  $t2,0x7f1c($0)

(设置发送波特因子,这里的a2bh是25MHz频率,9600波特率下的数据)


(在我的工程设计中 UART的除数因子寄存器地址分别是 0x7f18 和 0x7f1c)


波特因子的计算已经给出了公式,下面给出一个计算的实际例子:

如果接收波特率为9600,CPU的全局时钟频率为50MHz,(UART的时钟频率应该和从Clock IPcore生成的CPU全局时钟频率是一致的)

计算过程如下:

  • 接收波特率=fclk /(DIVR+1)x8  → DIVR = -1 + fclk /(接收波特率 x 8) 

由50MHz 和 9600可以算出

DIVR = 650.04 取整为 650 转换为16进制为 28A h


  • 发送波特率=fclk /(DIVS+1)    →  DIVS =  -1 + fclk /发送波特率

由50MHz和9600可以算出

DIVS =5207                         转换为16进制为 1457 h

 

2、使用非默认波特率时未调整设备传输波特率

在串口通信时默认设置应该是9600波特率的,如果你设置了使用别的波特率传输和发送,需要在 我的电脑 > 属性 > 设备管理器 中找到对应设备进行调整。

 

3、Hyper Terminal软件没有打开端口

在通信前需要打开端口,点击Hyper Terminal的绿色的加号即可,成功后下方会显示关于串口的设置信息

 

4、接错串口

在无法回显的时候一定要好好看看串口在FPGA芯片上的位置是否接错,与ucf约束文件里引脚是否一致。

 

5、FPGA芯片工作频率太快

如果Clock_wizard IP core产生的CPU全局时钟频率要大于报告中的最大频率,则整个系统有些通路是无法使用的。

 

6、如果以上未能解决

可以尝试更改你的CPU全局频率,重新定制Clock_wizard,有时候因为频率值不好引起误差偏大(因为波特因子算出来不一定是整数,近似时可能会有较大偏差)有可能导致最后的收发不正确。

 

7、如果回显成功但是出现??字符

有些字符输入时确实会回显??字符,比如一些使用频率不高的特殊符号,但是如果输入0~9的数字依旧显示??字符的话,注意检查你的波特因子是否和波特率匹配。波特率是否和设备波特率匹配。

 

8、注意是否更改源代码head_uart.v中的sys_clk的值

如果未更改的话,UART应该是无法在你所用的频率下工作的。注意更改即可。

(设置接收波特因子,这里的145h是25MHz频率,9600波特率下的数据)

你可能感兴趣的:(Verilog开发文档)