发明名称 基于单片机输入捕获功能的波特率自适应方法
摘要 本发明公开了一种基于单片机输入捕获功能的波特率自适应方法,通过使用单片机通用GPIO口的下降沿触发中断功能和定时器计数功能,捕获所接收数据产生的两个下降沿,计时这两个下降沿之间的时间来求出其最小码元宽度,并根据求出的最小码元宽度来确定主机的波特率。与现有技术相比,本发明的优点在于:握手时间快,可以适应各种环境,无需发送特定的数据即可完成自适应,且硬件上面只需多占用一条GPIO口就可以实现。由于适用范围广、操作灵活,同时在串口的波形不规整的情况下也可以完成自适应,因而可普遍应用于各种存在串行异步通信方式的嵌入式产品中。
申请公布号 CN102306136B 申请公布日期 2015.04.22
申请号 CN201110221090.3 申请日期 2011.08.03
申请人 宁波三星电气股份有限公司 发明人 郑坚江;霍斌斌
分类号 G06F13/42(2006.01)I 主分类号 G06F13/42(2006.01)I
代理机构 宁波市鄞州甬致专利代理事务所(普通合伙) 33228 代理人 代忠炯
主权项 一种基于单片机输入捕获功能的波特率自适应方法,其特征在于:通过使用单片机通用GPIO口的下降沿触发中断功能和定时器计数功能,捕获所接收数据产生的两个下降沿,计时这两个下降沿之间的时间来求出其最小码元宽度,并根据求出的最小码元宽度来确定主机的波特率;具体实现方法包括以下步骤:步骤101:对一个定时器的一个输入捕获通道进行初始化,同时开启所述输入捕获通道的通用GPIO下降沿输入中断,并禁止所述输入捕获通道的下降沿输入捕获中断;步骤102:对最小码元宽度及与输入捕获相关的各个状态量、标志进行初始化,初始全局捕获结果标志为没有捕获到两个下降沿,捕获状态机为等待捕获第一个下降沿输入;步骤103:等待中断产生,如果产生GPIO下降沿输入中断则进入步骤104,如果产生输入捕获通道的下降沿输入捕获中断则进入步骤201;步骤104:所述输入捕获通道上的GPIO下降沿输入中断触发;步骤105:判断所述输入捕获通道下降沿输入捕获中断是否完成两个下降沿捕获,若是,进入步骤109,不是,则进入步骤106;步骤106:判断所述输入捕获通道的捕获状态机是否只捕获到了第一个下降沿,若是,回到步骤103,不是,则进入步骤107;步骤107:由于所述输入捕获通道第一个下降沿也没有捕获到,判断所述输入捕获通道的下降沿输入捕获中断是否开启,若是,回到步骤103,不是,则进入步骤108;步骤108:开启所述输入捕获通道的下降沿输入捕获中断并回到步骤103;步骤109:判断捕获的最小码元宽度是否是相关波特率的最小码元宽度,若是,进入步骤110,不是,则回到步骤102;步骤110:判断捕获的最小码元宽度是否可以确定所接收数据的波特率,若是,进入步骤111,不是,则回到步骤102;步骤111:对自身波特率进行调整处理;步骤112:完成一次自适应处理,并禁止所述输入捕获通道的下降沿输入捕获中断,通用GPIO下降沿输入中断继续开启并回到步骤102,等待下一次UART通信的起始位下降沿触发GPIO下降沿输入中断,步骤201:所述输入捕获通道的下降沿输入捕获中断触发;步骤202:判断捕获状态机是否是正在等待捕获第一个下降沿输入,若是,进入步骤203, 不是,则进入步骤204;步骤203:读取所述定时器的第一次计数值T1,并保存计数值,初始自己的捕获状态机为等待捕获第二个下降沿输入中断并进入步骤210;步骤204:读取所述定时器的第二次计数值T2,并判断所述定时器的计数是否溢出,若是,进入步骤205,不是,则进入步骤206;步骤205:对计数值T1、T2清零并进入步骤209;步骤206:计算(T2‑T1)/2的值,即捕获的最小码元宽度,并判断这次所得最小码元宽度是否小于上次所得最小码元宽度,若是,进入步骤207,不是,则进入步骤209;步骤207:更新保存的最小码元宽度值;步骤208:标记全局捕获结果标志为已经完成捕获两个下降沿;步骤209:初始自己的捕获状态机为等待捕获第一个下降沿输入中断;步骤210:退出所述输入捕获通道的下降沿输入捕获中断并回到步骤102。
地址 315191 浙江省宁波市鄞州区姜山镇明光北路1166号