本应用笔记介绍了用于 Z8 Encore 的中断驱动 UART!XP® 和 Z8 Encore!MC™ 微控制器。它描述了 UART 寄存器描述、循环缓冲区实现,以及中断驱动的 UART 实现和硬件设置。
Z8 Encore 中的 UART 外设概述设备
通用异步接收器/发送器 (UART) 是一种能够处理异步数据传输的全双工通信通道。UART 使用具有可选奇偶校验的单个 8 位数据模式。UART 的特性包括:
- 8 位异步数据传输
- 可选择的偶数或奇数奇偶校验生成和检查
- 一或两个停止位的选项
- 独立的发送和接收中断
- 单独的发送和接收使能
- 帧、奇偶校验、溢出和中断检测
- 16 位波特率发生器 (BRG)
- 具有三种可配置中断方案的可选多处理器(9 位)模式
- 波特率发生器定时器模式
- 驱动器启用外部总线收发器的输出
UART 由三个主要功能块组成:发送器、接收器和波特率发生器。UART 的发送器和接收器各自独立运行,但使用相同的波特率和数据格式。图 1 显示了 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 所示。
图 2 初始化缓冲区
当数据被写入缓冲区时,写指针增加,数据计数器也增加。类似地,当从缓冲区读取数据时,读取指针会递增,而数据计数器会递减。参见图 3。
图 3 缓冲区的读/写操作
当读或写指针到达缓冲区的末尾时,它会跳回到开头,造成环绕效应。因此,之前使用读取操作获取的数据将被覆盖。见图 4。
图 4 环绕
中断驱动的 UART 实现
本节介绍通过Z8 Encore 的UART 外设初始化、发送和接收数据的方法!设备。
本文档中介绍的 UART 软件实现支持基本格式,即 8 个数据位、无奇偶校验和 1 个停止位。程序等待接收一个字符串(以换行符结束),然后回显到输入字符串。
为了便于通过 UART 进行数据输入/输出,上一节中讨论的循环缓冲区用于存储数据。单独的缓冲区用于处理发送和接收数据。可以根据用户需要更改缓冲区大小 RBUF_IN_BUFFERSIZE 和 RBUF_OUT_BUFFERSIZE。
硬件设置
图 5 Z8 Encore 通过 RS-232 端口连接到 PC
图 5 显示了 Z8 Encore 的硬件设置!开发套件通过超级终端连接到 PC。超级终端设置为 8-N-1,流量控制设置为无。源代码和本文档中的默认波特率设置使用 115 kbps。用户可以根据需要更改设置。
编辑:ymf
-
uart
+关注
关注
22文章
1235浏览量
101354 -
波特率
+关注
关注
2文章
307浏览量
34115 -
中断驱动
+关注
关注
0文章
2浏览量
1715
发布评论请先 登录
相关推荐
评论