当前位置:首页 > 智能硬件 > 智能硬件
[导读]不同设备接口在传输数据时所要求的频率往往不同,而在一些仅使用一个晶振的系统上,如果一个接口的频率完全匹配,那么其他接口所使用的频率往往就不完全符合要求。例如,为了实现USB总线的48MHz的传输频率,一般可以用12MHz的晶振来倍频得到,而12MHz的晶振在进行串口通信时由于与标准波特率不成倍数关系,因而期望波特率和实际波特率往往不同。

引言

  不同设备接口在传输数据时所要求的频率往往不同,而在一些仅使用一个晶振的系统上,如果一个接口的频率完全匹配,那么其他接口所使用的频率往往就不完全符合要求。例如,为了实现USB总线的48 MHz的传输频率,一般可以用12 MHz的晶振来倍频得到,而12 MHz的晶振在进行串口通信时由于与标准波特率不成倍数关系,因而期望波特率和实际波特率往往不同。
在波特率较低时,这种误差影响不大。例如,期望波特率为57 600 bps时,实际波特率为57 692 bps,传输正常;而当期望波特率高达115 200 bps时,则实际波特率为125 000 bps,误差较大。实验结果表明,此时如不对其进行修正,则无法进行正确传输。

  笔者通过实验研究证明,通过使用小数波特率发生器,完全可以像低波特率时一样正确地传输,实现了多位小数的分数逼近法的算法,避免了人工计算过程,彻底实现了波特率计算和修正的自动化。

1  小数波特率发生器工作原理

  当外部晶振或者VPB时钟值不是标准波特率的整数倍时,波特率的设定往往会出现偏差。通过小数波特率发生器则可减小或者消除这种偏差。

  下面以LPC214x处理器的串口UART1为例阐述小数波特率发生器的工作原理。要使用小数波特率发生器,需要设置小数分频寄存器(U1FDR),该寄存器控制产生波特率的时钟分频器。

  预分频器接收VPB时钟,并经过指定的小数要求产生一个输出时钟,小数由该寄存器的值决定。

  在不使用小数波特率发生器时,UART1波特率由下式计算:

UART1baudrate = PCLK/(16×(256×U1DLM+U1DLL))

  当使用小数波特率发生器时,则由下式计算:

UART1baudrate = [PCLK/(16 ×(256 × U1DLM + U1DLL))] ×(MulVal / (MulVal + DivAddVal)

  其中PCLK为VPB总线时钟,U1DLM和U1DLL为标准的UART1波特率除数寄存器。可以看出,MulVal / (MulVal + DivAddVal)就是用来修正波特率的小数值,被称作校准系数。它由两个参数构成:DivAddVal(波特率生成欲分频除数值)和MulVal(波特率预分频乘数值)。DivAddVal和MulVal都必须为整数,且满足:

1 ≤ MulVal≤ 15,0 ≤ DivAddVal ≤ 15。

  根据以上公式很容易计算串口波特率,但是实际应用中,更多的是在使用非标准晶振时确定波特率校准系数,即设定U1FDR寄存器DivAddVal和MulVal的值。确定波特率校准系数可以分如下3步进行:

① 确定除数锁存器的值: 根据需要的波特率bps,按照没有校准系数的波特率计算公式确定除数锁存器的值(DLM,DLL)。由于采用非标准晶振,得到的结果通常为小数。无论小数值大小,均舍弃小数部分的值,对结果进行取整操作(不是四舍五入),得到除数锁存器的值。
② 确定校准前的波特率: 将①得到的除数值(DLM,DLL)代入不带校准系数的串口波特率计算公式,得到未经过校准的波特率BPS
③ 确定校准系数p: p=bps/BPS=MulVal/(MulVal+DivAddVal)
根据限制条件1≤MulVal≤15和0≤DivAddVal≤15,寻找合适的值,使得到误差尽可能小的校准系数。

2  多位小数的分数逼近算法

(1) 传统获取MulVal和DivAddVal整数值的方法

  假设系统晶振为12 MHz,拟设定波特率bps为115 200 bps,根据前面所述校准系数的确定过程,12 000 000/(16×115 200)=6.51,取6为除数值,那么BPS=12 000 000/[16×(256×0+6)]=125 000 bps,所以p=bps/BPS=0.921 6。

  传统获取MulVal和DivAddVal整数值的方法大多依靠经验技巧或者反复试验。如参考文献2《深入浅出ARM7LPC214x下》中,第77页描述的那样:

  根据1 ≤ MulVal ≤ 15和0 ≤ DivAddVal ≤ 15的限制,由于系数接近1,因而DivAddVal取尽可能小的整数。多次试验取值得到12 / (1 + 12) = 0.9231与期望的系数0.9216最接近,能够使波特率误差最小,因而最后确定MulVal = 12, DivAddVal = 1。
显然,按照这种方法是无法完成程序自动化的,必须在每次编程之前根据波特率来人工推算出MulVal和DivAddVal的值,并且还需要大量的误差对比和反复试验,导致工作效率的降低。

(2) 获取MulVal和DivAddVal整数值的新方法

  我们的问题在于寻找一个分数,它能够尽可能地接近校准系数。那么可以使用这样一种多位小数的分数逼近法,该算法认为:任何一个多位小数,无论是无理数还是有理数,均可以用一个分数来近似表示它,并可用一定的程序使其误差越来越小,直至达到所需的精确度。

  根据该算法,可以通过程序来实现获取这两个参数的自动计算,该程序流程如图1所示。

500)this.style.width=500;" border="0" />
图1  程序流程

  初始化时要求找到A和B的值,使其满足B

  利用1 ≤ MulVal ≤ 15和0 ≤ DivAddVal ≤ 15的限制作为迭代退出条件,当A的分母超过16时,B就是最优解,B1即为MulVal,而DivAddVal则等于B2-B1;同理,当B的分母超过16时,MulVal=A1,DivAddVal=A2-A1。

  本例中程序计算出来MulVal=12,DivAddVal=1,与人工计算结果完全相同,所以使用这种算法,可以利用程序自动高效计算得出MulVal和DivAddVal整数值,不仅节省人力,而且更加科学可靠。

结语

  计算机系统中的各种设备接口所要求的频率往往不同,当只配备一个晶振时,有一些设备频率完全匹配而另外一些设备则可能无法完全匹配。作者通过对使用12 MHz晶振的LPC214xCPU进行串口通信时产生的误差研究发现,当期望波特率在57 600 bps以下时,实际波特率与其误差较小,可以正常通信;而当期望波特率为115 200 bps时,实际波特率为125 000 bps,在这样大的误差下如果不修正实际波特率根本无法进行正确的通信;而当通过设置使用小数波特率发生器校准非标准频率晶振所引起的波特率误差时,可以让期望波特率高达115 200 bps的实际波特率为115 384 bps,误差仅为184,通信完全正常。另外,在计算小数分频寄存器中的设置值时首次引入了科学的数学算法,摒弃了传统工程师使用经验技巧和反复试验获取MulVal和DivAddVal值的人工方法,实现了由程序自动、正确、快速地获取设置寄存器参数值的目的,不仅提高了工作效率,更重要的是完全实现了自动化,无需再人工干预。

参考文献

[1] 周立功,等.ARM控制器基础与实战[M].北京:北京航空航天大学出版社,2005.

[2] 周立功,等.深入浅出ARM7——LPC214x[M].北京:北京航空航天大学出版社,2005.

[3] 周立功,等.深入浅出ARM7——LPC213x[M].北京:北京航空航天大学出版社,2005.

[4] 周立功,等.ARM嵌入式系统实验教程(一)[M].北京:北京航空航天大学出版社,2004.

[5] 阿里.8051微控制器和嵌入式系统[M].北京:机械工业出版社,2007.

[6] 陈其翔.多位小数的分数逼近法[J].北京联合大学学报,1997,29(3).

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

广州2024年4月17日 /美通社/ -- 已火爆拉开帷幕的第135届广交会一期线下展中,新质生产力成为核心亮点。超3100名以先进生产力和优质为关键词的创新企业集结现场,向世界释放新质生产力赋能下的行业新"磁...

关键字: 电子 PS GO 科沃斯

随着信息技术的迅猛发展和大数据时代的到来,机器学习成为了人工智能领域中的核心技术之一。机器学习是通过模拟人类学习行为,使计算机系统能够从数据中自动发现规律、提取特征并进行预测和决策的过程。它在诸多领域取得了广泛的应用,包...

关键字: 计算机 人工智能 机器学习

随着大数据时代的到来,数据处理成为了一项至关重要的任务。传统的数据处理方法往往面临着效率低下、准确性不高等问题,而机器学习技术的兴起为数据处理带来了全新的解决方案。本文将深入探讨机器学习在数据处理中的应用,并分析其优势和...

关键字: 数据处理 计算机 机器学习

机器学习是人工智能领域的一个重要分支,它使用各种算法来使计算机系统能够从数据中学习和改进,而无需进行明确的编程。在机器学习的广阔领域中,有多种算法被广泛应用,每种算法都有其独特的适用场景和优势。本文将详细介绍机器学习中的...

关键字: 机器学习 人工智能 计算机

随着科技的飞速发展,电子产品在我们日常生活中扮演着越来越重要的角色。而在这些电子产品中,接口作为连接设备与外部设备的桥梁,其重要性不言而喻。其中,Type-C接口作为一种新型的接口标准,因其独特的优势,逐渐成为了众多电子...

关键字: 电子产品 Type-C 接口

随着信息技术的飞速发展,机器学习(Machine Learning)作为人工智能领域的重要分支,正在逐步改变我们生活的方方面面。那么,什么叫做机器学习呢?简单来说,机器学习是一门研究如何让计算机从数据中自动获取知识和技能...

关键字: 机器学习 人工智能 计算机

随着信息技术的飞速发展,数据已经成为现代社会的重要资源。数据挖掘和机器学习作为处理和分析数据的两大关键技术,在多个领域得到了广泛应用。尽管它们在某些方面存在重叠,但数据挖掘和机器学习在定义、目标、方法以及应用场景等方面存...

关键字: 数据挖掘 机器学习 计算机

计算机的历史可以追溯到公元前的古代算盘和查尔斯·巴贝奇的“分析机”构想。然而,现代意义上的计算机起源于二战时期对复杂军事计算需求的响应。1941年,美国宾夕法尼亚大学开发出了ENIAC(Electronic Numeri...

关键字: 计算机 云服务

自二十世纪以来,计算机技术经历了从机械计算装置到如今高度智能化、微型化的巨大飞跃,成为人类科技进步的重要推动力。电脑的发展史是一段充满创新与突破的历史,以下将按照时间顺序概述这一发展历程。

关键字: 电脑 计算机

计算机网络是当今信息化社会中不可或缺的基础设施,它将世界各地的计算机系统及其附属设备紧密联系在一起,实现了信息的高速传输与共享资源的有效利用。计算机网络的定义可以归纳为:计算机网络是一系列分布在不同地理位置、具备独立功能...

关键字: 计算机 信息交互
关闭
关闭