UART寄存器的循环缓冲区实现以及中断驱动的UART实现和硬件设置

电子说

1.3w人已加入

描述

本应用笔记介绍了用于 Z8 Encore 的中断驱动 UART!XP® 和 Z8 Encore!MC™ 微控制器。它描述了 UART 寄存器描述、循环缓冲区实现,以及中断驱动的 UART 实现和硬件设置。

Z8 Encore 中的 UART 外设概述设备

通用异步接收器/发送器 (UART) 是一种能够处理异步数据传输的全双工通信通道。UART 使用具有可选奇偶校验的单个 8 位数据模式。UART 的特性包括:

  • 8 位异步数据传输
  • 可选择的偶数或奇数奇偶校验生成和检查
  • 一或两个停止位的选项
  • 独立的发送和接收中断
  • 单独的发送和接收使能
  • 帧、奇偶校验、溢出和中断检测
  • 16 位波特率发生器 (BRG)
  • 具有三种可配置中断方案的可选多处理器(9 位)模式
  • 波特率发生器定时器模式
  • 驱动器启用外部总线收发器的输出

UART 由三个主要功能块组成:发送器、接收器和波特率发生器。UART 的发送器和接收器各自独立运行,但使用相同的波特率和数据格式。图 1 显示了 UART 架构。

 

uart
图 1 Z8 Encore 示意图!XP UART 模块

循环缓冲区实现

本节介绍循环缓冲区的实现。此处介绍的例程可用于任何排队或缓冲应用程序。

缓冲区通常用作临时数据存储,通常用于流式传输数据。类似地,循环缓冲区(或环形缓冲区)是具有内存分配方案的临时数据存储,其中缓冲区可以具有固定大小,并且当索引指针返回到起始位置时可以重用每个内存位置。这种缓冲方案被广泛使用,并且有几个现有版本,每个版本都根据应用需求而变化。本节描述一个简单的缓冲机制。

为了初始化循环缓冲区,需要初始化一个内存段或任何预定义长度的数组。这是缓冲数据的存储位置。

《br》#define RBUF_IN_BUFFERSIZE (UINT8) 64)《br》UINT8 RBUF_InBuff [RBUF_IN_BUFFERSIZE];《br》

为了便于管理循环缓冲区,初始化了两个索引指针和一个数据计数器。

《br》UINT8 RBUF_InRdPtr; // Pointer to the next read location《br》UINT8 RBUF_InWrPtr; // Pointer to the next write location《br》UINT8 RBUF_InLength // Buffer length《br》

初始化时,缓冲区不包含任何内容,指针位于缓冲区的开头,如图 2 所示。

uart
图 2 初始化缓冲区

当数据被写入缓冲区时,写指针增加,数据计数器也增加。类似地,当从缓冲区读取数据时,读取指针会递增,而数据计数器会递减。参见图 3。

uart
图 3 缓冲区的读/写操作

当读或写指针到达缓冲区的末尾时,它会跳回到开头,造成环绕效应。因此,之前使用读取操作获取的数据将被覆盖。见图 4。

uart
图 4 环绕

中断驱动的 UART 实现

本节介绍通过Z8 Encore 的UART 外设初始化、发送和接收数据的方法!设备。

本文档中介绍的 UART 软件实现支持基本格式,即 8 个数据位、无奇偶校验和 1 个停止位。程序等待接收一个字符串(以换行符结束),然后回显到输入字符串。

为了便于通过 UART 进行数据输入/输出,上一节中讨论的循环缓冲区用于存储数据。单独的缓冲区用于处理发送和接收数据。可以根据用户需要更改缓冲区大小 RBUF_IN_BUFFERSIZE 和 RBUF_OUT_BUFFERSIZE。

硬件设置

uart
图 5 Z8 Encore 通过 RS-232 端口连接到 PC

图 5 显示了 Z8 Encore 的硬件设置!开发套件通过超级终端连接到 PC。超级终端设置为 8-N-1,流量控制设置为无。源代码和本文档中的默认波特率设置使用 115 kbps。用户可以根据需要更改设置。

编辑:ymf

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分