讲座视频 - 串行通信 - FIFO

展开字幕 关闭字幕 时长:8分41秒
评论 收藏 分享 上传者:hi5
大家好, 我是 John Valvano。 在本视频中,我们将讨论 串行通信。 换句话说,我们将获取 控制器中的数据,然后通过 UART 电缆 将其传送到 PC。 在本视频中,我们将了解相应的基本原理 换言之,通信是一个 包含三个步骤的过程。 我们必须获取信息,然后将其编码成 一种可以进行传输的形式。 我们将会传输该数据,使其穿过障碍, 跨越一定的距离。 然后,我们需要将该数据解码成信息。 正如我在这里的这个实验 18 中所说的, 您将会通过 USB 电缆与 PC 通信。 稍后,在下一章中,我们将再次使用 UART 来与另一个微控制器进行通信, 那便是蓝牙控制器 CC2650 我们将要使用的协议叫做 通用异步接收/发送(UART)。 我们将会使用中断。 在整个过程中,我们将学习很多 基本参数,比如波特率、带宽 和响应时间。 转入正题吧。 首先,让我们来讨论一下数据是如何进行编码的。 我们将会取一个八位的数据片段, 八位的信息,将其编码成 一帧。 帧是一个不可分割的通信块, 编码过程将在开始位置放置一个 起始位, 该位一定是 0,在最后放置 一个停止位, 该位一定是 1。 所以帧的组成将会是起始位、八个数据位、停止位。 一次 10 位,这便是它的工作方式。 如果我们是在两个微控制器之间 进行通信,那么实际电压 将会是零或高电平。 其他协议可能会使用其他电压。 但是,这一协议的计时方式是一次一位。 所以,我们可以讨论一位的时间长度, 也就是所谓的位时间。 或者说,每传输一位所耗费的时间。 所有的位都具有相同的时间。 将位时间取倒数便可得到波特率。 也就是每秒的总位数。 我们将以每秒 115200 位的速率运行。 这将会是我们的波特率。 您会注意到这里没有时钟。 只有数据位。 所以我们需要一种可实现同步的方法。 协议的一部分便是同步的方法。 因为停止位是高位, 起始位是低位,所以一定-- 如果我们认为这是前一帧的 停止位, 这里一定会有一个 1 到 0 的转换, 这意味着帧的开始。 我们便是要同步到这个转换。 输入上的停止--起始转换被用于 进行同步。 波特率是每秒传输的 总位数。 但是如果我们对传输的信息总量 感兴趣,那便是带宽。 在本例中,由于有八个 数据位,十个帧位, 因此系统的带宽将是 波特率的 80%。 让我们来看看具体的细节,MSP432 有四个 UART。 它有四个 UART。 我们将在实验 18 的这个部分使用的是 UART 0。 然后在实验 19 中,我们将使用 其中的另一个,即 UART 2。 当我们想要配置 UART 时, 我们需要告诉微控制器引脚不是 GPIO 引脚,而是 UART 功能引脚。 这意味着需要将 PxSEL1 寄存器中对应的位 置为 0,将 PxSEL0 寄存器中对应位 置为 1,这样,便会选择这个引脚作为 UART。 现在,P1.3 是输出,P1.2 是输入。 UART 如何工作? 我们知道它会一次处理一位。 那么,它是如何一次输出一位的呢? 我们将会使用移位寄存器。 发送器和接收器都有 一个移位寄存器。 当我想要进行传输时, 软件会将数据写入该寄存器。 这里会有一个与该寄存器相关的中断标志位。 如果缓冲器为空,TXIFG 标志为 1。 所以通常 TXIFG 有两种用法, 一种是忙等待(Busy-wait), 直到该标志位为 1, 另一种是当该标志为 1 进入中断。 一旦该标志为 1,软件便会 将数据写入那里的寄存器。 UART 中的硬件将会自动 添加起始位, 并会添加停止位。 最终可得到一帧的总共 10 位。 然后,它会在 P1.3 上以波特率时钟移出, 就像我所说的, 一次发送一位。 发送 10 位后,便全部完成,可以处理另外一帧。 接收器的处理方式与之相同。 但要稍微复杂一些, 因为必须要进行同步。 同样,我们会看到,接收器上的 1 到 0 输入边沿 将会使接收器与发送器同步。 现在,它们必须采用相同的波特率。 这个边沿可使两个时钟实现同步。 然后,我将在发现该边沿后,在接收器中 以 10 位为一个单位进行移动。 然后,停止位被剥离, 起始位被剥离,八个数据位 被加载到另一个寄存器中。 这便是接收数据寄存器。 该寄存器有一个关联的标志。 如果该标志为 1,便表示这里面有数据。 基本上,软件要么进行忙等待(Busy-wait), 要么当该标志位为 1 时进入中断。 当该标志出现时,软件 可以从接收缓冲寄存器中读取数据。 这就是它的基本工作方式。 让我来举例说明一下。 在这个特定示例中,我将要传输 ASCII 码 小写字母 a,它的十六进制值为 61,二进制值为 01100001。 我将会把这个八位数据从这个 MSP432 发送到那个 MSP432。 这是我的目标。 开始时,这个缓冲器是空的,那个也是空的。 这个标志位(TXIFG)为 1,表示这个缓冲器是空的。 这个标志位(RXIFG)为 0,表示那个缓冲器是空的。 这就是空闲状态。 发送器注意到了这一情况, 它将会把这个 61 写入这个寄存器。 让我们来看看发生了什么。 61 出现在这个寄存器中。 该标志变成 0,这便是在说,我获得了数据。 然后,让我们将其发送出去。 下一步是,当 61 被放置在这里后, 会被加载到 移位寄存器中。 起始位会在开始位置, 停止位则会在结尾处。 中间这里是我的数据位。 0, 1, 2, 3, 4, 5, 6, 7。 注意,现在发送缓冲器又变成了空的。 所以,如果想要的话,我们实际上可以写入另外一帧。 但是目前还没有全部完成。 还需要传到另一边。 还需要传到另一边。 让我们通过将其向外移出而使其到达另一边。 我们将会一次移动一位。 我们发送一位。 也就是这里。 我们再发送一位。 也就是这里。 再发送一位。 再发送一位。 因此,数据便这样一位一位地移出 发送器,并移入接收器。 这里会有 10 次移位,因为这里有 10 个数据片段, 或者说 10 位。 起始位、八个数据位,然后是停止位。 在接收到全部 10 位后,接收器便会说, 我获得了一整帧。 现在,它可以检查并确保起始位为低位。 它可以检查并确保停止位为 1, 从而检查是否有错误。 假设没有错误,它将会获取 中间的八位并将其加载到 接收寄存器中。 这就是接下来要发生的事情。 61 被加载到接收缓冲器中。 这个标志位将变成 1,因为要传送的 数据现在已经被传递过来了。 这个标志位便出现了。 同样,它可以导致中断或忙等待循环。 然后软件将会读取 61,清空该寄存器, 并清除该标志位。 就是这样。 我们将 61 从一边发送到了另一边。 这里列出了许多细节信息。 为了确保其正常工作, 您必须要阅读 数据手册 这些是您想要了解的寄存器。 显然,我们必须启用 接收器和发送器。 这是波特率。 我们要在这里设置波特率。 这是我们刚才讨论的两个寄存器。 我们将会写入这个寄存器,然后从这个寄存器读取。 这是出现的两个标志位。 当接收缓冲器中存在数据时,接收标志位会被置为 1, 当发送缓冲器为空时,发送标志位会被置为 1。 而且会有相应的使能位 与这些标志位向关联。 同样,请查阅数据手册 这不是很复杂。 您可以自己看明白。 那么,我将会如何使用该标志位呢? 为了触发中断,我将设置 发送标志位和接收标志位来触发中断。 在 UART 中断中,可以是两个标志位, 也可以是其中的任一个。 如果是一个接收标志位,我将读取数据 并将其放入 FIFO 中。 同样,这里有两个软件 FIFO, 一个从接收器收集数据, 另一个从发送器发送数据。 如果发送器处于空闲状态,这也是 中断发生的原因,那么我将会 从 FIFO 中退出。 如果 FIFO 恰巧为空,我将会解除发送。 否则,我将会把数据发送出去。 基本上,我都会以这样的方式 在 UART 中使用中断以及 在中断服务例程内使用 FIFO。 我将会在接收数据上执行放置操作, 并将执行获取操作。 这是两种不同的 FIFO。 一个是发送通道,一个是接收通道。 综上所述,串行通信 是一种非常常见的协议。 也是比较简单的方法之一。 我们采用的是 10 位的帧。 数据一次发送一位。 这里没有时钟,所以它使用边沿来进行同步。 在实验中,您将使用中断驱动型连接, 因为它允许我们把很多东西连接在 一起。 本课程到这里马上就要结束了。 我们的机器人已经变得非常复杂, 我们需要能够执行各种任务, 我们的软件需要能够只在需要时执行相应任务, 这便是我们使用中断的原因。 波特率是每秒传输的总位数, 换句话说,这是位时间, 波特率等于 1 除以位时间。 带宽是信息传输速率, 在本例中,由于我们拥有八个数据位, 10 个信号位,因此带宽是 波特率的 80%。 这是最大带宽。 希望您喜欢本次实验。 它非常简单,但能让您的微控制器 与另一个微控制器通信。 祝您实验愉快。261
课程介绍 共计4课时,28分43秒

TI-RSLK 模块 18 - 串行通信

TI 中断 机器人 UART RSLK 串行通信 异步收发器 设备 驱动程序

此模块的目的是介绍先进先出 (FIFO) 队列的原理和用法;这种队列使用串行通道将机器人连接到 PC。您将创建两个 FIFO 队列并设计一个命令解释器来帮助解决机器人挑战。您将使用通用异步收发器 (UART) 开发中断设备驱动程序。该串行端口可让微控制器与其他计算机、输入传感器和输出显示器等设备进行通信。
展开

  • 相关产品
  • 样品申请
  • EVM购买
  • 文档下载
  • 软件/工具
  • TI Design
分享到X
微博
QQ
QQ空间
微信

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新文章 手机版

站点相关: EEWORLD首页 EE大学堂 论坛 下载中心 Datasheet 活动专区 博客

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved