对uart数据进行接收和解析的方法以及装置的制造方法
【技术领域】
[0001] 本发明涉及数据传输领域,特别是指一种对UART数据进行接收和解析的方法以及 装置。
【背景技术】
[0002] 通用异步收发器(Universal Asynchronous Receiver and Transmitter;UART) 是用硬件实现异步串行通信的通信接口电路,UART异步串行通信接口是电子电路设计中最 常见的接口,可用来与上位机或其他外部设备进行数据通信。由于UART应用的普通性,所以 大部分微控制器内部都集成有UART模块。
[0003] UART模块以字节为单位接收数据,UART模块的缓存每接收一个字节(我们将UART 缓存中的数据称为UART数据),UART模块就会设置一个中断标记,当微控制器使能了 UART模 块的中断使能后,就会触发一个中断操作,微控制器会中断当前的操作,跳到UART中断处理 函数中执行相应的操作。
[0004] 微控制器处理UART的中断操作如图1所示,而现有技术的UART中断处理函数对 UART数据进行接收和解析的方法如图2所示。
[0005] 现有技术中,若UART模块的缓存接收到了一个字节的数据,微控制器会进入UART 中断处理函数,并接收该数据至内存,然后对该数据进行解析,解析完毕后退出UART中断处 理函数,如此循环。
[0006] 现有技术的UART中断处理函数对UART数据进行接收和解析的方法存在的问题是:
[0007] -、微控制器的工作负荷大;由于微控制器要不断的进出中断来完成UART数据的 接收和解析工作,这就使的微控制器要不断的中断当前操作、保持中断现场、执行中断处 理函数、然后退出中断、恢复中断现场,这就使得微控制器的工作负荷非常的大。
[0008] 二、对微控制器当前进行的操作造成不利影响;微控制器在处理中断的时候需要 中断当前的操作,频繁的进出中断将影响到其它的操作,甚至造成某些操作的失败。例如当 某器件对操作时序要求非常严格的时候,如果在对此器件操作的过程,频繁的进出UART中 断处理,将会使对此器件的操作失败,严重情况下可能会造成整个程序的崩溃。
[0009] 三、降低了软件的运行速度和运行效率;微控制器频繁的进出UART中断,整体上降 低了软件的运行速度和运行效率,因为微控制器的一部分的工作消耗到了保存中断现场、 恢复中断现场上。
[0010] 四、可能使数据的丢失,降低了数据接收的正确性;由于数据接收后还要在UART中 断处理函数中进行解析,这就很可能导致不能及时的退出该函数,进入UART中断处理函数 后,如果不能及时的退出该函数,将会造成UART模块新接收的数据还没来得及被读取,就被 后面的数据所覆盖,UART的数据接收缓存的大小是一定的(一般为一个字节),当已经有数 据存储到了缓存中,下次有数据到来的时候,UART模块不管当前缓存中有没有数据,会直接 将新数据放到UART缓存中,覆盖当前数据,从而造成数据的丢失。
【发明内容】
[0011] 本发明提供一种对UART数据进行接收和解析的方法以及装置,该方法降低了微控 制器的工作负荷,不会对微控制器当前进行的操作造成不利影响,提高了软件的运行速度 和运行效率,提高了数据接收和解析的正确性,降低了系统的功耗。
[0012] 为解决上述技术问题,本发明提供技术方案如下:
[0013] -种对UART数据进行接收和解析的方法,包括:
[0014] 当检测到UART中断标记时,进入UART中断处理函数;
[0015] 将UART缓存中的数据保存到内存中;
[0016] 清除UART中断标记;
[0017]判断是否检测到UART中断标记,若是,转至所述将UART缓存中的数据保存到内存 中,否则,执行下一步骤;
[0018] 退出UART中断处理函数;
[0019] 当内存中的数据有更新时,对内存中的数据进行解析。
[0020] -种对UART数据进行接收和解析的装置,包括:
[0021 ] 开始模块,用于当检测到UART中断标记时,进入UART中断处理函数;
[0022]接收模块,用于将UART缓存中的数据保存到内存中;
[0023]清除模块,用于清除UART中断标记;
[0024]第一判断模块,用于判断是否检测到UART中断标记,若是,转至所述接收模块,否 贝1J,执行下一模块;
[0025] 退出模块,用于退出UART中断处理函数;
[0026] 解析模块,用于当内存中的数据有更新时,对内存中的数据进行解析。
[0027]本发明具有以下有益效果:
[0028]与现有技术相比,本发明的对UART数据进行接收和解析的方法中,在进入UART中 断处理函数后,开始读取UART缓存中的数据到内存中,接收完成后,并不立刻退出,而是重 新检测UART端口是否接收到了新的数据,如果接收到的话,继续读取UART缓存中的数据到 内存中,直至数据接收完成。
[0029]本发明的对UART数据进行接收和解析的方法降低了微控制器的工作负荷。本发明 只需进入UART中断一次,就能完成UART数据的接收,微控制器不需要不断的中断当前操作、 保持中断现场、执行中断处理函数、然后退出中断、恢复中断现场的过程,这就降低了微控 制器的工作负荷。
[0030] 本发明的对UART数据进行接收和解析的方法不会对微控制器当前进行的操作造 成不利影响。由于本发明的方法在接收UART数据的时候,一次中断即可完成,不用频繁的进 出中断从而影响到其它的操作,不会对整体程序的正常执行造成影响。
[0031] 本发明的对UART数据进行接收和解析的方法提高了软件的运行速度和运行效率。 微控制器不用频繁的进出UART中断,不用将资源消耗到了保存中断现场、恢复中断现场上, 减少了微控制器的一些无谓的工作开销,大大提高了微控制器的使用效率,从而大大提高 了整体代码的执行速度和执行效率,提高了软件的运行速度和运行效率。
[0032]本发明的对UART数据进行接收和解析的方法提高了数据接收的正确性。本发明在 进入UART中断后,在中断函数内循环接收UART数据,直至UART数据接收完成,从而提高了 UART数据接收的准确性。不会出现现有技术中的如下现象:如果一次中断发生后,UART缓存 中的数据被读取后,而此时微控制器还没有来的及退出UART中断处理函数时候,又有新数 据被UART接口接收的话,此时将会造成这部分数据的丢失。
[0033] 而且本发明中数据的接收是在UART中断处理函数中完成,把现有技术中在UART中 断处理函数中完成的解析工作放到主程序中完成,两者互不影响,提高了接收和解析的正 确性;并且使得UART中断处理函数在接收数据后不用完成其他的工作,进一步减少了来不 及退出UART中断处理函数而造成数据丢失的情况,进一步提高了数据接收的正确性。
[0034]另外,发明人还发现,本发明的对UART数据进行接收和解析的方法降低了系统的 功耗。频繁的进出UART中断,将会使微控制器的工作负荷非常的大,从而使系统的功耗也非 常的高。而通过本发明中的方法,降低了微控制器的工作负荷,从而在一定程度上降低了系 统的功耗。
[0035]故本发明的对UART数据进行接收和解析的方法降低了微控制器的工作负荷,不会 对微控制器当前进行的操作造成不利影响,提高了软件的运行速度和运行效率,提高了数 据接收和解析的正确性,降低了系统的功耗。
【附图说明】
[0036]图1为现有技术中微控制器处理UART时的中断操作流程图;
[0037]图2为现有技术的UART中断处理函数流程图;
[0038]图3为UART的数据传输格式示意图;
[0039] 图4为本发明的对UART数据进行接收和解析的方法的一个实施例的流程图;
[0040] 图5为本发明的对UART数据进行接收和解析的装置的一个实施例的流程图。
【具体实施方式】
[0041] 为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具 体实施例进行详细描述。
[0042] UART(Universal Asynchronous Receiver and Transmitter)通用异步收发器 (异步串行通信口),是一种通用的数据通信协议。UART使用的是异步,串行通信。
[0043] 串行通信是指利用一条传输线将资料一位一位地顺序传送。特点是通信线路简 单,利用简单的线缆就可实现通信,降低成本。适用于远距离通信,但传输速度慢的应用场 合。
[0044] 一方面,本发明提供一种对UART数据进行接收和解析的方法,其一个实施例如图4 所示,包括:
[0045] 步骤101:当检测到UART中断标记时,进入UART中断处理函数;在主程序运行后,若 检测到UART中断标记时,微控制器会执行UART中断处理函数;具体流程如图1所示。
[0046]步骤102:将UART缓存中的数据保存到内存中;
[0047]此处的UART缓存指UART的输入缓冲寄存器,UART在接收数据时,会用到输入移位 寄存器以及输入缓冲寄存器,其中输入移位寄存器以接收时钟的速率把出现在串行数据输 入线上的数据逐位移入,当数据装满后,并行送往输入缓冲寄存器,输入缓冲寄存器从输入 移位寄存器中接收并行数据,然后由微控制器取走。
[0048]