[0035] 若sum+rem>dvsor,则sum=sum+rem-dvsor,cnt_full=n+1,累加cnt=cnt+1,并在cnt==cnt_full-寄存器配置值时,输出采样捕抓信号capture,
[0036] 其中所述sum的初始值为0,所述cnt_full的初始值为n,并且所述cnt的初始值为0。
[0037] 根据本公开实施例的第三方面,提供了一种片上系统,所述片上系统包括常开电区域和可开关电区域,
[0038] 所述常开电区域包括根据前述第一方面所述的通用异步收发器UART数据接收系统、休眠唤醒控制模块和配置寄存器;
[0039] 所述可开关电区域包括CPU模块、UART模块和模拟电源模块;
[0040] 所述通用异步收发器UART数据接收系统接收到UART数据后,触发所述休眠唤醒控制模块进入唤醒流程,以打开所述可开关电区域的模拟电源模块;
[0041] 在所述可开关电区域唤醒后,所述CPU模块从所述常开电区域内的配置寄存器回读由所述通用异步收发器UART数据接收系统接收的UART数据,并解析所述UART数据,[0042] 当接收到所有UART数据之后,所述UART模块发送确认消息。
[0043] 本公开实施例中的通用异步收发器数据接收系统包括:跨时钟同步模块,被配置为将接收到的UART数据同步到采样时钟SLP_CLK域;寄存器模块,被配置为配置所述UART数据接收解析模块所需的参数;UART数据接收解析模块,被配置为根据所述寄存器模块配置的所述参数,解析经所述跨时钟同步模块同步后的UART数据;所述读写和中断处理模块,被配置为读写所述先进先出模块,并根据所述先进先出模块的状态发出中断以通知所述CPU进行读取操作;并且所述先进先出模块被配置为暂存所述UART数据。本发明的UART数据接收系统能够解决了由数据波特率和采样时钟频率比例关系为非整数倍关系时引入的数据误采样问题。
附图说明
[0044] 为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0045] 图1为现有技术中直接修改采样率和波特率的比例关系产生接收错误的示意图;
[0046] 图2示出了根据本公开实施例的UART数据接收系统的框图;
[0047] 图3为本发明中SLP_CLK为32.768KHz数波特率为9600产生数据采样捕抓信号的时序图;
[0048] 图4为本发明中数据采样捕抓信号的生成流程图;
[0049] 图5为本发明系统的一个典型应用示意图。
[0050] 图中:1-跨时钟同步模块、2-寄存器模块、3-UART数据接收解析模块、4-读写和中断处理模块、5-先进先出模块、6-低速UART数据接收模块、7-休眠唤醒控制模块、8-配置寄存器、9-CPU模块、10-传统UART模块、11-模拟电源模块。
具体实施方式
[0051] 下面结合附图对本公开实施例进行详细描述。
[0052] 以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0053] 需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
[0054] 还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本公开的基本构想,图式中仅显示与本公开中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
[0055] 另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。
[0056] 本公开实施例的技术方案采用动态调整UART的数据采样时刻,从而消除数据波特率和采样时钟的速率比为非整数倍关系时所带入的累加采样误差,从而保证数据的连续正确接收。
[0057] 在本公开实施例的UART数据接收系统中,首先对接收到的UART数据做异步时钟同步处理,使其同步到采样时钟域。在循环计数器开始计数的同时根据配置参数计算动态阈值,当计数值达到动态阈值或检测到UART的起始位时,该循环计数器自动清零,并且在该循环计数器的计数值大于零且小于动态阈值的任一时刻输出采样capture信号,用以采样同步后的UART数据。采样得到的数据被移位寄存,转为并行输出,并写入暂存FIFO模块。FIFO模块有数据后或数据个数达到所设定的门限时,发出中断以通知CPU取数。
[0058] 接下来,参考附图具体描述根据本公开实施例的UART数据接收系统。应当注意,在本公开实施例中,数据可以是主控发出的控制指令或者是其他的数据。
[0059] 首先,参考图2,其示出了根据本公开实施例的UART数据接收系统的框图。如图2所示,根据本公开实施例的UART数据接收系统包括跨时钟同步模块1、寄存器模块2、UART数据接收解析模块3、读写和中断处理模块4和先进先出模块5。
[0060] 跨时钟同步模块1用于将接收到的UART数据(例如,来自主控)同步到SLP_CLK域,此外,跨时钟同步模块1还将所接收到的UART数据同步到APB时钟域以用于CPU回读。
[0061] 寄存器模块2用于配置UART数据接收解析模块3所需的参数并回读UART数据。
[0062] UART数据接收解析模块3用于根据寄存器模块2配置的参数,解析经跨时钟同步模块1同步后的UART数据,并将解析后的UART数据转为并行输出。
[0063] 读写和中断处理模块4用于根据先进先出模块5的状态产生响应的中断输出,并读写先进先出模块5。
[0064] 具体地,在本公开实施例中,先进先出模块5用于暂存所接收的UART数据,在先进先出模块5有数据后或数据个数达到所设定的门限时,读写和中断处理模块4发出中断以通知CPU取数。
[0065] 在本公开实施例中,通过图2中所示的UART数据接收解析模块3来解决由数据波特率和采样时钟频率比例关系为非整数倍时引入的错误采样问题。具体地,UART数据接收解析模块3通过动态调整UART数据的采样捕抓信号时间点来解决错误采样问题。
[0066] 图3示出了在SLP_CLK为32.768KHz,数据波特率为9600时的采样捕抓的时序图,图3中的RXD为UART接收的同步后的数据,SLP_CLK为采样时钟,cnt为循环计数器(稍后描述的计数器寄存器cnt),capture为数据采样捕抓产生电路产生的数据采样捕抓信号,在本公开实施例中,循环计数器cnt计数到数据采样捕抓产生电路计算的特定值后自动清零。
[0067] 数据采样捕抓信号的产生原理如图4所示。数据采样捕抓信号由数据采样捕抓产生电路产生,该电路共需输入三个参数,分别为:rem、dvsor、n,其中rem为采样时钟频率除以波特率所得余数,dvsor为采样时钟频率除以波特率所得分数化简后分母,n为采样时钟频率除以波特率所得商。具体地,以采样时钟频率为32.768KHz,波特率为9600bps为例,rem=31,dvsor=75,并且n=3。
[0068] 该数据采样捕抓产生电路中定义有累加寄存器sum、动态阈值寄存器cnt_full、计数器寄存器cnt和捕抓信号寄存器capture。其中,所述累加寄存器sum被配置为存储累加计数值sum,所述动态阈值寄存器cnt_full被配置为存储动态阈值cnt_full,所述计数器寄存器cnt被配置为存储计数值cnt,并且所述捕抓信号寄存器capture被配置为存储采样捕抓信号capture的值
[0069] 此外,累加寄存器sum和动态阈值寄存器cnt_full的位宽由采样时钟和波特率比值计算决定,计数器寄存器cnt位宽应不小于log2(max(cnt_full)),并且捕抓信号寄存器capture为1比特寄存器。
[0070] 参考图4,具体描述数据采样捕抓产生电路产生数据采样捕抓信号的流程。
[0071] (1)在复位或接收到UART的开始信号(开始位)的第一个时钟时,累加寄存器sum的初始值为0,动态阈值寄存器cnt_full初始值为n,计数器寄存器cnt初始值为0,捕抓信号寄存器capture初始值为0;
[0072] (2)在复位释放后或UART的开始信号的第一个时钟结束后,在例如完成10比特UART数据接收前,sum=sum+rem累加,若sum+rem
[0073] 具体地,参考图3,以采样时钟频率为32.768KHz,波特率为9600bps,rem=31,dvsor=75,并且n=3为例进行具体说明。在紧接着复位释放或UART的开始信号的第一个时钟,此时的sum=0,在接收到第一个UART数据后,sum=sum+rem=31<dvsor=75,此时cnt_full=n=3。在这种情况下,cnt=1,并且在将寄存器配置值设置为2的情况下,此时满足cnt==cnt_full-寄存器配置值,捕抓信号寄存器capture输出数据采样捕抓信号。
[0074] 当cnt=cnt+1继续累加计数时,cnt=2,则满足cnt==cnt_full-1,则cnt被置为0。此时,sum=31,继续上述过程,sum=sum+rem=31+31=62<dvsor=75,则仍在cnt=1时输出数据采样捕抓信号。
[0075] (3)若sum+rem>dvsor,则sum=sum+rem-dvsor,cnt_full=n+1,cnt=cnt+1累加计数值达到cnt_full或检测到UART数据的开始信号时自动清零,并在cnt==cnt_full-计寄存器配置值时,捕抓信号寄存器capture输出一个数据采样捕抓信号,采集通用异步收发器UART RXD的数据;跳转到步骤(2),如此在步骤(2)和(3)之间往复工作,直到结束。
[0076] 当如(2)中所示的sum=62之后,继续sum=sum+rem的过程,则此时sum=62+31=93>75,此时sum=93-75=18,并且cnt_full=n+1=4,因此在cnt=2时,输出数据采样捕抓信号。
[0077] 以上,已经参考附图描述了根据本公开实施例的UART数据接收系统。接下来,描述根据本公开实施例的UART数据接收方法。
[0078] 根据本公开实施例的应用上述UART数据接收系统进行数据接收的方法,包括:
[0079] 将接收到的UART数据同步到采样时钟SLP_CLK域;
[0080] 根据配置参数解析同步后的UART数据,并将所述同步后的UART数据转为并行输出;
[0081] 其中所述根据配置参数解析同步后的UART数据包括:
[0082] 获取参数rem、dvsor、n,其中rem为所述UART数据的采样时钟频率除以波特率所得余数,dvsor为采样时钟频率除以波特率所得分数化简后分母,n为采样时钟频率除以波特率所得商;
[0083] 累加sum,其中sum=sum+rem,
[0084] 若sum+rem
[0085] 若sum+rem>dvsor,则sum=sum+rem-dvsor,cnt_full=n+1,累加cnt=cnt+1,并在cnt==cnt_full-寄存器配置值时,输出采样捕抓信号capture,
[0086] 其中所述sum的初始值为0,所述cnt_full的初始值为n,并且所述cnt的初始值为0。
[0087] 由于以上已经参考数据接收系统描述了根据本公开的方法,故而在此不再赘述。
[0088] 此外,本公开实施例还提供了如图5所示的片上系统SOC,在SOC内分常开电区域和可开关电区域,所述常开电区域主要模块包括:低速UART数据接收模块6、休眠唤醒控制模块7和配置寄存器8。此外,所述可开关电区域主要模块包括:CPU模块9、传统UART模块10、模拟电源模块11及其他模块电路。
[0089] 低速UART数据接收模块6接收到外部CMD后,触发休眠唤醒控制模块7进入唤醒流程,将可开关电区域电路的电源(模拟电源模块11)打开,并释放对应的跨电源域相关控制信号。
[0090] 可开关电区域电路唤醒稳定后,CPU模块9通过APB总线从常开电区域内的配置寄存器8回读由低速UART数据接收模块6接收暂存的CMD,CPU模块9解析所读CMD后,再从传统UART模块10回复确认消息ACK(表明所有的消息都已经收到了)给主控制器MASTER。
[0091] 综上所述,本发明根据UART的波特率和采样时钟的关系计算得到动态阈值,依据该动态阈值实时调整数据采样捕抓信号时间点,有效解决了由数据波特率和采样时钟频率比例关系为非整数倍关系时,引入数据误采样问题。
[0092] 对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
[0093] 此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
[0094] 术语解释
[0095] SOC 片上系统
[0096] UART 通用异步收发器
[0097] CMD 指令
[0098] SLP_CLK 采样时钟
[0099] CPU 中央处理器
[0100] ACK 应答
[0101] bps 比特每秒
[0102] FIFO 先进先出
[0103] capture 数据采样捕抓
[0104] APB 先进外围总线。