第四讲串口通信之接收.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四讲串口通信之接收

上一讲我们讲解了串口的发送操作。这一讲我们继续讲解串口的接收。在学习这个串口接收的过程中,我们要巩固这个状态机的写法,也再熟悉熟悉前几讲讲解的内容。 首先回顾一下异步串口通信的数据格式: 由于在空闲状态时,传送线为逻辑“1”状态,而数据的传送总是以一个起始位“0”开始,所以当接收器检测到一个从“1”向“0”的跳变时,便视为可能的起始位(要排除干扰引起的跳变);起始位被确认后,就知道发送器已开始发送,接收器就可以按这个数据通信格式接收后续的数据了;当检测到停止位“1”后就表明一帧字符数据已发送完毕。 关于接收器的设计最主要的一点是如何提高采样的准确率,最好是保证采样点处于被采样数据的时间中间点。所以,在接收采样时要用比数据波特率高n倍(n≥1)速率的时钟对数据进行采样。在本程序中用16倍波特率时钟进行采样。结合图示,我们讲解一下如何让采样时刻处于被采样数据的时间中间点: 在t1时刻若检测到低电平,就开始对这个低电平进行连续的检测 当检测了8个时钟周期后,到达t2,此刻,若前面的8个周期都是低电平,则认为检测到了起始脉冲。否则就认为是干扰,重新检测。 在检测到起始位后,再计数16个采样时钟周期就到达了第一个数据位的时间中间点t3,在此刻采样数据并进行保存。 然后再经过16个周期,就是第二个数据位的时间中间点,在此时刻进行采样;然后,再经过16个周期,就是第三个数据位的时间中间点, 在此时刻进行采样…..一直这样采样,直到把所有的数据位采样完毕。 在理解完上面这个流程后,我们来按这个编制一下程序。 逐行解释: 11:bclk为波特率的16倍。这个同uart_t。 12:一帧数据接收完毕信号,可以通知顶层模块来提取数据。该信号 在复位后为“0”,在接收完一帧数据后变高,然后直到下一次检 测到起始位后,即下一帧数据到来时才复位到“0”。顶层模块可 通过检测该信号的上升沿来判断一帧数据是否已经接收完毕。 19:用type声明一种枚举类型,用来表示接收状态机的状态。共有五 状态:r_idle----空闲状态,r_sample_start_bit----采样起始位状 态,r_sample_data_bit-----采样数据位状态,r_stop----采样停止位状 态。 24-31:通过一个D触发器,先把串口的输入信号整形一下,这样可减 少干扰引起的检测误判。D触发器的原理的工作机制大家应该 明白吧,这里就不再赘述了。 33-35:定义一些变量。count为时钟bclk的计数器,因为采用了16倍 频的时钟,所以一个数 据位会维持16个bclk时钟周期,需要 用count来计数。rcnt是对接收到的数据位进行计数。这个和串 口的发送程序有点类似的。 32-95:通过状态机来接收一帧数据。 37-41:系统复位。 38:复位后状态机设置为空闲状态。 39-40:清零计数器。 41:置r_ready为0,表示数据还没接收完毕。 42-93:系统正常工作,通过状态机的变化实现一帧数据的接收, 用case语句实现状态转变。 44-53:描述空闲状态时的执行动作。 45-49:若传送线上检测到低电平则立即转入 r_sample_start_bit状态,并清零计数器。反之,若没 有检测到低电平,则还是使系统处于r_idle状态,还 需要不断的去检测传送线的状态。 55-68:描述采样到起始位后执行的动作。 56-68:假设在44-53句中检测到的低电平是起始位,则这 个低电平应该持续 16个时钟(因为是16倍频采样 的)。在这16个时钟周期内,若是干扰,则可能会 在这16个时钟的时间内检测到高电平。若有,那么 状态机就回到x_idle 状态,否则就认为已经检测到 了起始位。 57-64:在检测到起始位后的8个时钟里总线若一直是低电 平,则认为是检测到了起始位,状态机切换至 r_sample_data_bit,并初始化一些计数器, 准备开 始采样数据位。 70-85:描述采样数据位时执行的动作。 71-73:连续计数16个bclk时钟 74-85:当计数到16个bclk后,就开始采样传送线的电平状 态。 75-78:在检测传送线数据前首先判断是否已经接收完数据 位,若是就使状态机转入r_stop 状态,并清零计数 器。 79-83:若数据位还没有接收完毕,则80句,保持状态机处 于 r_sample_data_bit状态,并清零count。82句,把 当前传送线的

文档评论(0)

tianma2015 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档