微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > UART

UART

时间:10-02 整理:3721RD 点击:
小弟刚刚接触FPGA,用的是cyclone,EPIC20系列的,现在正在FPGA上做一个UART中的发射部分,也即是通过DSP向FPGA发数据,和提供时钟。之后经过FPGA缓存,移位后异步串行输出。现遇到一个问题:当DSP向FPGA提供的系统时钟不变时,可通过不同的分频器得到不同的波特率。假设我80分频得到了4800的波特率,这样异步串出的结果是对的,当我设160分频后,这样得到的是2400的波特率,DSP发了5个数据,经过FPGA缓存器中有数据,并且正确,但到移位寄存器这一级,并不是每次DSP发数据后,移位寄存器都有数据,只出现了移位寄存器1,2个数据。结果异步串出也只有1,2个异步串行数据,弄了好几天不知是什么问题,不知道是不是移位寄存器的移位时序有问题,还是其它的?恳请高手指点下,谢谢!

能不能描述得稍微详细点?

可能是DSP与UART之间同步出了问题。BaudRate降低后,UART完成发送时间拉长,DSP不能按原来得速度发送数据了。

波特率的产生是不是有问题啊

首先非常谢谢你们的回答,现在是问题是,FPGA的数据来自于DSP的并行8位数据,而这些并行数据是由在DSP的写信号/WE周期时间里产生的,而FPGA的时钟也是由DSP提供,我现在提供给FPGA的时钟固定不变,在FPGA配置一个UART的发射端,也即是将DSP的8位并行数据转变为8位的异步串出,同时给出一个中断信号,引起DSP的边沿触发,DSP中断就向GPGA继续发一个8位数据,FPGA我配置了一个分频器和一个发射器,这时的波特率是由FPGA的不同的分频器所决定的,不同的分频产生不同的波特率。FPGA的时钟首先经过分频后提供给UART的发射端,也就是UART的要作的时钟,这个时钟是波特率的16倍。现在问题是我改变波特率,也即是改变波频器的大小,假设我原来是80分频得到了4800的波特率,这时DSP写的/WE有效周期时间是一定的,并且经过FPGA处理后DSP写的/WE有效周期时间得到的异步数据是完全对的,现在是提高分频,假如160分频,这样就得到了一个2400的波特率,这时我发现DSP写的/WE有效周期时间也相应的拉长了一倍,我觉得理论上不同的波特率与DSP并行的写的/WE时间周期是没有关系的,也就是说不管是多少波特率,它的写的/WE有效时间周期是不变的,它只是与分频有关的。而这时的现象表现为:假如是2400的波特率,假如我发6个数据给FPGA,经示波器测试,给UART的缓存器每次可得到8位数据,但是到了移位寄存器这一级,我就看到1,2个数据。假如我没有用中断发数,而在DSP上发一个数据之后再延迟一定的足够时间再发数,现象跟有中断是一样的,移位寄存器这一级有时没有数据移出。80分频得到了4800的波特率这现象都正常。难道跟DSP写的/WE有效周期时间有关,这是没有道理的,DSP的确已发到缓存区了,还是时序上有问题,真的不知所解。刚刚接触FPGA,希望能得到高手指点。

首先非常谢谢你们的回答,现在是问题是,FPGA的数据来自于DSP的并行8位数据,而这些并行数据是由在DSP的写信号/WE周期时间里产生的,而FPGA的时钟也是由DSP提供,我现在提供给FPGA的时钟固定不变,在FPGA配置一个UART的发射端,也即是将DSP的8位并行数据转变为8位的异步串出,同时给出一个中断信号,引起DSP的边沿触发,DSP中断就向GPGA继续发一个8位数据,FPGA我配置了一个分频器和一个发射器,这时的波特率是由FPGA的不同的分频器所决定的,不同的分频产生不同的波特率。FPGA的时钟首先经过分频后提供给UART的发射端,也就是UART的要作的时钟,这个时钟是波特率的16倍。现在问题是我改变波特率,也即是改变波频器的大小,假设我原来是80分频得到了4800的波特率,这时DSP写的/WE有效周期时间是一定的,并且经过FPGA处理后DSP写的/WE有效周期时间得到的异步数据是完全对的,现在是提高分频,假如160分频,这样就得到了一个2400的波特率,这时我发现DSP写的/WE有效周期时间也相应的拉长了一倍,我觉得理论上不同的波特率与DSP并行的写的/WE时间周期是没有关系的,也就是说不管是多少波特率,它的写的/WE有效时间周期是不变的,它只是与分频有关的。而这时的现象表现为:假如是2400的波特率,假如我发6个数据给FPGA,经示波器测试,给UART的缓存器每次可得到8位数据,但是到了移位寄存器这一级,我就看到1,2个数据。假如我没有用中断发数,而在DSP上发一个数据之后再延迟一定的足够时间再发数,现象跟有中断是一样的,移位寄存器这一级有时没有数据移出。80分频得到了4800的波特率这现象都正常。难道跟DSP写的/WE有效周期时间有关,这是没有道理的,DSP的确已发到缓存区了,还是时序上有问题,真的不知所解。刚刚接触FPGA,希望能得到高手指点。

自己顶一下

察看下40分频时,结果是否真确。

40分频是正确的啊,也就是分频越高,波特率越低,在移位寄存器里的数据越不好得到,DSP写的有效时间越长

可能是DSP写入数据丢失了,没写进去。

DSP数据载入是we的边沿触发么?

写进去了,UART发射不是有两级,一级是缓存区,二级是移动寄存器,现在缓存区是有数据,而移位寄存器如果DSP发6个数,可能就有2,3个。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top