使用双数据指针实现串行端口FIFO

发布者:电子科技爱好者最新更新时间:2024-02-19 来源: elecfans关键字:双数据指针  串行端口  FIFO 手机看文章 扫描二维码
随时随地手机看文章

Dallas Semiconductor高速微控制器系列允许系统设计人员通过内部UART优化串行通信。本应用笔记演示了如何利用这些增强型8051微控制器中的双数据指针使用循环缓冲器。提供的示例汇编代码用于显示简单的 256 字节串行端口循环缓冲区的实现。


介绍

原始 8051 微处理器的架构包括一个标准的通用 同步/异步接收器/发射器(USART,通常称为UART)。这 外设允许器件通过RS-232接口以各种波特率进行通信。其中之一 8051 UART实现的缺点是其接收和发送缓冲区 只有一个深度,即软件必须从接收缓冲区中检索一个字节,然后才能被 下一个收到的字符。可以在许多达拉斯半导体公司中实现快速软件FIFO 和Maxim微控制器,增加了串行端口的实用性。


本应用笔记演示了一个简单的256字节循环缓冲器,但原理可以扩展到 缓冲长度可达 64kB。数据由串行端口接收并存储在缓冲区中,直到对其采取行动 通过用户提供的例程。当缓冲区变满时,接收器通过软件流控制将 向主机发出停止传输的信号。当用户提供的例程清除缓冲区中的空间时,它将 向主机发出信号以恢复传输。本应用笔记中的示例足够通用,可以 适用于各种用户应用。示例随附的汇编源代码是 在网站上的文件AN603_SW中提供。回答 51.


支持先进先出构建的硬件增强功能

高速和超高速微控制器系列具有许多功能,大大简化了 软件先进先出的实施。所有这些功能都旨在最大限度地减少软件开销 与存储和检索数据相关联。其中第一个功能是极高速 达拉斯半导体和Maxim微控制器的性质。他们增强的 4 时钟和 1 时钟 机器循环型芯最大限度地减少了维护缓冲区所花费的时间,并且通过扩展允许 应用程序运行得更快。


另一个重要功能是双数据指针。最初的 8051 只有一个数据指针,它 使得同时实现输入和输出指针变得困难。每次系统需要 在指针之间切换,它必须保存当前值并加载另一个的值 指针。在尝试将数据快速移入和移出缓冲区时,这会引入明显的延迟。 使用两个数据指针,一个可以分配给输入(插入)指针,另一个分配给输出 (删除)缓冲区的指针,消除与处理指针相关的延迟。另外 一些微控制器集成了增强的数据指针,可以自动递增数据 执行某些数据指针相关指令后的指针。这节省了额外的机器 每个缓冲区访问的周期。


通过使用内部 1kB MOVX SRAM(其数据可用),可以进一步提高速度 可以在单个机器周期内访问。在此内存中定位循环缓冲区允许 实现非常快速的缓冲区。


软件说明

此示例介绍串行端口的循环 FIFO 缓冲区的基本体系结构。接收数据 通过串行端口 0 并存储在 MOVX 存储器中的循环缓冲区中,直到提取为止 并由用户定义的算法操作。此示例使用达拉斯和 Maxim 微控制器 双数据指针。DPTR(也称为 DPTR0)用作输入指针,并始终指定 应存储通过串行端口接收的新信息的位置。DPTR1 是输出指针, 显示应用程序软件将检索下一个未处理字节的位置。伴随的 软件应该被认为是这样一个例子的骨架。

做了一些假设来简化软件并减小其大小:

缓冲区长度为 256 字节,从 0000h 开始,到 00FFh 结束。软件可以快速检查 表示非零数据指针高字节,以指示翻转。

输入和输出指针仅递增,尽管软件可以很容易地修改为 支持双向指针。

收到字符后对缓冲区状态的反馈限制为剩余 1 个字节 警告和 0 字节剩余关机方法。这种通过/不通过的方法允许非常快的错误 检查,可最大限度地减少缓冲区输入和输出例程中花费的时间。缓冲区状态 从缓冲区读取字符后,用户提供的算法负责。


主机的错误通知通过软件流控制执行。这是一个常见的 传输协议易于实现,占用的处理器开销很小。

当程序启动时,两个数据指针都初始化到缓冲区的开头。串口 也被初始化,然后软件流控制“就绪”字符(XON:11h)被发送到 主机以允许传输数据。然后,软件会等待,直到收到新字符或 应用程序需要从缓冲区读取一个字节。此示例仅显示例程的外壳,该 缓冲区中的字节;实际代码将由应用程序定义。

当串口收到字符时,调用串口0中断服务例程(ISR)。第一 例程从串行端口检索字节,并存储在缓冲区中由 输入指针 (DPTR)。然后调用子例程Increment_DPTx,这将递增所选数据 指针,然后执行两个操作。首先,它确保递增的值不超过 缓冲区的上限。如果是这样,它将指针值重置为缓冲区的开头。二、它 检查输入指针是否有覆盖输出指针的危险,这种情况可能是 如果主机清空缓冲区的速度不够快,则会遇到此问题。

溢出检测和处理

溢出检测和处理例程如图 1 所示。它在输入或 输出指针递增。首先,溢出例程确定输入和 输出指针。如果距离为一个字节,则软件会声明溢出警告。这将设置 溢出标志,并且还向另一个单元发送XOFF以停止传输,直到缓冲区 再次清空。串行端口接收器保持启用状态,以允许发送单元 在收到 XOFF 时的传输过程中。声明警告状态比 缓冲区已满状态允许接收这最后一个字符。

如果距离为零字节,则软件声明溢出关闭。这将设置溢出标志, 传输 XOFF,并禁用串行端口接收器以防止 缓冲区。退出溢出警告或关闭状态的唯一方法是让缓冲区输出例程 删除数据,直到距离增加到 2。

如果距离不是单个字节也不是零字节,则未检测到溢出。然后例程检查 溢出标志的状态。如果未设置该标志,则例程将退出。如果设置了溢出标志,则 当前状态指示缓冲区刚刚从溢出警告状态转换为否 警告。如果是这种情况,则缓冲区已准备好再次开始接收数据,因此例程将清除 溢出标志,重新启用串行端口接收器,并传输 XON 字符。

pYYBAGP0e5-AO7q0AAAusCS5RV4257.gif?imgver=1

图1.溢出处理程序流程图。

程序集代码示例

以下汇编语言代码示例是使用 Keil 软件编译和模拟的 μVision2 集成开发环境。头文件 reg320.inc 是一个包含名称的文件 目标微控制器(本例中为DS80C320)的寄存器和位,以及类似的文件 通常会随您的汇编程序一起提供,以便与正在使用的特定微控制器一起使用。

关键字:双数据指针  串行端口  FIFO 引用地址:使用双数据指针实现串行端口FIFO

上一篇:DS89C430/DS89C450超高速闪存微控制器存储器接口时序
下一篇:汽车ECU故障诊断仪的设计及应用方案分析

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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