讨论一下UART波特率分频的问题,非16倍整数时怎么做?
UART的波特率为一个数据位的时间(或频率),一般是由一高频分频得到。设UART模块的输入频率为fCK,分频系数为N,则波特率为:
Tx/Rx baudrate = fCK/N
对于数据的发送,N只要是整数,都很容易实现。
但对于接收,由于一般要采用16倍过采样,因此N为任意整数的话,很难实现。
因此,大部分对UART的波特率要求如下:
Tx/Rx baudrate = fCK/n/16
即先将fck/n得到波特率的16倍频,再用此频率来作16分频,分别在计数值为7、8、9时刻连续采样rxd的数据。
现在看到一份规格书,其波特率计算按如下公式:
Tx/Rx baudrate = fCK/N (N>=16)
请问对于N>=16的任意值,例如17、18、19。。。怎么实现16倍过采样? 计数可变就行吧。原来是固定计数16个时钟为一个循环,现在计数(16+X)个时钟为一个循环,判断高低电平也同样 huangqi412 发表于 2015-3-19 09:44
计数可变就行吧。原来是固定计数16个时钟为一个循环,现在计数(16+X)个时钟为一个循环,判断高低电平也同 ...
你没明白我的意思。
接收时需要连续采样3个电平,如果是计数16个的话,需要在7、8、9时刻连续采样3次。
假设现在N为17,你说的(16+x)是指一个位的循环计数时间,即(16+1),问题是连续的3个采样点取在哪里?是7、8、9还是8、9、10?
假设计数循环为19呢?或者21、23、250、1993这样的值呢?N固定为一常数或许还好处理,但如果是16~65535这个范围呢(N为16位宽)? 分两步,第一步得到一个比你需要高16倍的频率,第二步永远是16分频在789点采样 redroof 发表于 2015-3-19 10:47
分两步,第一步得到一个比你需要高16倍的频率,第二步永远是16分频在789点采样 ...
说得没错,只是这种方法需要一个16倍频电路,或是16倍PLL电路。FPGA无所谓,ASIC的话比较浪费,不知道还有没有其它取巧的方法? sme 发表于 2015-3-19 12:38
说得没错,只是这种方法需要一个16倍频电路,或是16倍PLL电路。FPGA无所谓,ASIC的话比较浪费,不知道还 ...
不用的。
有小数分频
页:
[1]