0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

星星科技指导员 来源:ADI 作者:ADI 2023-02-21 16:06 次阅读

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 软件编译和interwetten与威廉的赔率体系 的 μVision2 集成开发环境。头文件 reg320.inc 是一个包含名称的文件 目标微控制器(本例中为DS80C320)的寄存器和位,以及类似的文件 通常会随您的汇编程序一起提供,以便与正在使用的特定微控制器一起使用。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7547

    浏览量

    151333
  • 接收器
    +关注

    关注

    14

    文章

    2468

    浏览量

    71880
  • fifo
    +关注

    关注

    3

    文章

    387

    浏览量

    43655
收藏 人收藏

    评论

    相关推荐

    基于FPGA的异步FIFO实现

    大家好,又到了每日学习的时间了,今天我们来聊一聊基于FPGA的异步FIFO实现。 一、FIFO简介 FIFO是英文First In First Out 的缩写,是一种先进先出的
    的头像 发表于 06-21 11:15 6511次阅读
    基于FPGA的异步<b class='flag-5'>FIFO</b>的<b class='flag-5'>实现</b>

    Keil C51中对双数据指针的直接利用

    在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的XDATA或CODE空间,通常它被当作一个16位指针,指向一个常数表。双数据
    发表于 11-30 17:30

    异步FIFO指针同步产生的问题

    如图所示的异步FIFO,个人觉得在读写时钟同步时会产生两个时钟周期的延时,如果读写时钟频率相差不大,某一时刻读写指针相等,当写指针同步到读模块时会产生延时,实际同步到读模块的写指针是两
    发表于 08-29 18:30

    如何使用串行端口发送和接收数据

    你好,我必须发送3个长TIPE可变形式的PLC到CY8C KIT01,我应该使用这个工具包的串行端口,但我没有任何线索如何开始。我应该使用哪些组件来编程它来使用串行端口发送和接收
    发表于 04-09 12:06

    如何重置fifo指针

    它不会产生额外的SLWR信号。在传输开始时,FIFI重置FIFO,第一个字是不确定的。我不知道为什么。所以我认为如果我能重置FIFO指针,问题就可以解决了。那么有人知道如何重置FIFO
    发表于 04-24 14:06

    轻松上手单片机编程软件——keil单片机编程软件双数据指针+二进制

    keil对双数据指针的支持情况以及其代码生成机制,并为大家介绍keil c51直接使用二进制的方法。在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的X
    发表于 12-28 08:00

    如何通过一个简单的INC AUXR1指令来回切换两个数据指针

    Keil C51对双数据指针的支持情况Keil C中直接生成双数据指针的代码
    发表于 04-26 06:11

    串行端口工作原理

    串行端口工作原理 串行端口工作原理 9针连
    发表于 07-24 00:21 1882次阅读

    Keil C51中对双数据指针的支持情况及代码生成

    在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的XDATA或CODE空间,通常它被当作一个16位指针,指向一个常数表。双数据
    发表于 07-20 17:36 1408次阅读
    Keil C51中对<b class='flag-5'>双数据</b><b class='flag-5'>指针</b>的支持情况及代码生成

    使用mxtni的串行端口

    外部串行端口 在使用外部串行端口之前,必须添加必要的硬件。外部串行端口包括五个模块:DUART、
    发表于 04-12 11:08 6次下载
    使用mxtni的<b class='flag-5'>串行</b><b class='flag-5'>端口</b>

    FPGA的FIFO实现过程

    FIFO队列有两个位置指示指针。一个是写指针,指向队列的第一个存储单元。一个读指针,指向队列的最后一个存储单元。当有写命令的时候,数据写入写
    发表于 06-29 08:51 1.6w次阅读

    Keil C51是如何支持双数据指针,有哪些特别的要求

    在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的XDATA或CODE空间,通常它被当作一个16位指针,指向一个常数表。双数据
    的头像 发表于 09-19 16:47 3717次阅读
    Keil C51是如何支持<b class='flag-5'>双数据</b><b class='flag-5'>指针</b>,有哪些特别的要求

    同步FIFO和异步FIFO的区别 同步FIFO和异步FIFO各在什么情况下应用

    简单的一种,其特点是输入和输出都与时钟信号同步,当时钟到来时,数据总是处于稳定状态,因此容易实现数据的传输和存储。 而异步FIFO则是在波形的上升沿和下降沿上进行处理,在输入输出
    的头像 发表于 10-18 15:23 1683次阅读

    什么是串行端口?有哪几种分类?

    什么是串行端口?有哪几种分类? 串行端口是计算机中用于进行数据传输的一种接口类型,通过单一的数据
    的头像 发表于 02-02 15:40 2078次阅读

    Keil+C51中对双数据指针的直接利用

    Keil+C51中对双数据指针的直接利用
    发表于 06-18 10:15 0次下载