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

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

3天内不再提示

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

汽车玩家 来源: Zilog 作者: Zilog 2021-06-23 15:43 次阅读

本应用笔记介绍了用于 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

    文章

    1155

    浏览量

    99856
  • 波特率
    +关注

    关注

    2

    文章

    279

    浏览量

    33754
  • 中断驱动
    +关注

    关注

    0

    文章

    2

    浏览量

    1699
收藏 人收藏

    评论

    相关推荐

    使用UART FIFO缓冲区时,缓冲区中的数据有时会损坏的原因?

    1 TX FIFO 缓冲区中的一个字节从 UART 0 TX FIFO 更改为一个字节(见下图)。 据我所见,问题发生在FIFO硬件的某个地方,因为软件发送的数据是正确的。 UART
    发表于 03-06 06:59

    UART0串口编程系列(二)-串口编程(UART0)之中断方式(上)

    三.中断方式的串口编程1.用中断方式编写串口程序由那几部分组成2.硬件上的支持1>UART0 发送FIFO缓冲区A.
    发表于 08-20 22:24

    UART上的FIFO循环缓冲区大小

    ?示例:{STX,Hello \ 0,RTX}和{STX,这是一个长文本\ 0,RTX}我一直在互联网上挖掘,我发现最好的方法是使用FIFO循环缓冲区。问题是BUFFER_SIZE在这种情况下如何解
    发表于 09-13 15:42

    UART缓冲区问题

    问题与中断有关。只要UARTHI PUCHCHAR例程将字符直接放入PSoC UART发送数据寄存器,就发送字符。如果UARTHIPPUCHAR例程将字符放置到缓冲区中,则
    发表于 05-22 13:19

    基于ARM和FPGA的环形缓冲区接口设计方案

    来设计的。在本方案中,FPGA存储空间包括两个部分:寄存器空间和数据缓冲区空间。寄存器空间用于设置各种读写的参数,包括
    发表于 05-30 05:00

    如何写带大缓冲区和内部中断uart函数?

    字节而不是128字节。有时也丢失了字节。在PSoC Creator好的例子中,没有使用大缓冲区UART。请你帮助我,告诉你如何写这个函数。AuthyScB.Cyrkk.Access 02.Zip1.1兆字节
    发表于 10-14 10:32

    缓冲区如何以及在何处可以接收ECAN模块?

    )地址读取,写到ECANCiTXD寄存器。我很不明白为什么仍然可以设置缓冲区来接收?如果程序确实设置缓冲区来接收,
    发表于 04-10 10:07

    UART缓冲技术:友好中断

    释想象一下执行一个任务的中断例程:通过UART接收到字节后,它将字节存储到缓冲区数组中,并增加totalBytes计数。isr_routine(){if(
    发表于 09-19 08:32

    掌握UART各个控制寄存器设置

    AVR单片机实验七 UART传输实验1 实验目的通过实验,掌握UART各个控制寄存器设置,并能使用串口发送数据和使用中断方式接收数据。2
    发表于 11-23 07:01

    导致STM32L152 UART Rx中断间歇性不触发的原因是什么?

    UART Rx 线上接收到数据时,会从数据寄存器中读取数据,将其放入循环缓冲区中,然后将信号发送至高优先级 RTOS 任务以解析数据。如果检测到错误标志,则通过读取标志清除
    发表于 12-09 06:21

    DMA循环缓冲区如何重置起点?

    ){head_index = (head_index + dma_buffer_interrupt_size) % uartsize;}我遇到的问题是,当我设置一个循环缓冲区时,一旦它进入
    发表于 12-13 08:22

    如何接收UART数组缓冲区的长度呢?有何解决方案?

    数据,禁用接收并返回。如果缓冲区数组已满,但传输仍在继续,只需等待传输结束,然后禁用接收并返回。代码:void uart1_receiveArray(uint8_t *arrayp
    发表于 12-14 08:18

    【Start_DSC28034PNT湖人开发板免费体验】基于循环缓冲区的串口驱动

    前言 前面进行了串口的收发测试,现在来实现基于环形缓冲区的串口驱动,以提供给应用层方便使用的收发接口。 设计 设计思路 设计的核心思想是,使用缓冲区,串口接收
    发表于 08-02 22:41

    51单片机内核UART串行总线环形缓冲区驱动实现的程序免费下载

    驱动实现串口中断接收和发送数据,缓冲区使用环形缓冲区。发送:手动置RI中断标志位为1,发生
    发表于 07-19 17:38 3次下载
    51单片机内核<b class='flag-5'>UART</b>串行总线环形<b class='flag-5'>缓冲区</b><b class='flag-5'>驱动</b><b class='flag-5'>实现</b>的程序免费下载

    UART寄存器介绍与中断操作详解

    简介 UART核提供了一个Avalon存储器映射(Avalon-MM)的接口,这个接口使得Avalon-MM的主要周边设备(例如Nios II处理器)通过读和写数据、控制寄存器,就能实现UA
    的头像 发表于 08-25 16:46 1.5w次阅读
    <b class='flag-5'>UART</b><b class='flag-5'>寄存器</b>介绍与<b class='flag-5'>中断</b>操作详解