基于LPC54101和SDK实现串口DMA接收超时的机制
0 2023-02-07

在MCU的应用中,经常需要通过串口进行不定长数据包的传输。发送方很简单,不需特别的考虑,而接收方则需要能够侦测到数据包的结束。接收方的简单做法是结合串口的IDLE中断,或使用DMA并利用DMA的超时传输机制。

但有些MCU在设计时出于成本上的考虑,简化了串口接收的IDLE模式以及DMA超时传输机制。没有串口IDLE中断或者DMA超时传输的机制,我们就不知道什么时候通信结束了。这种情况下,为了实现通过串口传输不定长数据包的要求,需要使用软件和其它片内外设的配合,协同完成指定的功能。

LPC54101系列的UART模块,支持FIFO的接收超时,能够方便地实现上述功能。除此之外,本文介绍一种基于LPC54101和SDK,通过使用引脚中断和定时器配合,实现串口DMA接收超时,实现串口DMA接收超时的机制。

先分析下UART传输的时序,图1是一个典型的8位数据位1位停止位的串口通信数据流。串口每次发送数据时会首先发送一个起始位,在TTL电平逻辑下,Start位首先是一个下降沿信号。


图1. 串口接收数据时序图

在串口DMA接收超时系统中,我们需要利用MCU的引脚中断功能侦测这个下降沿信号,引脚中断触发后告诉系统开始计时。要特别注意的是,当系统侦测到Start位的下降沿后最好关闭引脚中断,不然后续数据流等信号的下降沿也会触发引脚中断使得整套方案失去了意义(还不如直接用串口接收完成中断)。

LPC54101的引脚中断可以在任意IO引脚上使能,所以可以直接把LPC54101的串口接收的引脚的中断功能打开,并设置成下降沿触发。

超时计数器最好是系统里的低功耗定时器,这个例程中我们用的是LPC54101的RIT定时器。超时的时间设置要考虑到当前串口设置的波特率以及一次串口传输的最大包长。

超时定时器计数溢出产生中断后,软件首先要从DMA的状态寄存器中获取到当前接收到数据的长度(对于LPC54101来说,串口DMA接收数据的长度在XFERCFGn寄存器中的XFERCOUNT位,如图2所示),然后从串口DMA预设置的数据缓冲区获取对应的数据即可。


图2. LPC54101 DMA传输数据长度计数位

在初始化设置串口对应的DMA通道时,最好设置传输长度为可能的最大长度,在接收超时后也别忘记重新复位一下串口对应DMA通道的状态,不然本次接收的数据和数据长度还会带入下次传输的过程中。

图3是例程的流程图,分主程序,串口RX引脚中断服务程序,超时定时器服务程序三个部分。




图3. 程序流程图 
声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
  • PS/2接口协议的的嵌入式软件编程及应用分析

    1、引言随着计算机工业的发展,作为计算机最常用输入设备的键盘也日新月异。1981年IBM推出了IBMpc/XT键盘及其接口标准。该标准定义了83键,采用5脚DI

    12小时前
  • 基于通用型单片机和以太网控制器实现嵌入式以太网接口的设计

    由于嵌入式技术和网络技术的迅速发展,以太网接口在嵌入式系统中的应用越来越广泛,以太网接口不仅通信速度快,传输可靠,使用和配置方便,而且不受地域限制(广域网和局域

    12小时前
  • ARM TrustZone的简介概念

    TrustZone是ARM对ARM6的扩展,其实只是增加了一条指令,一个配置状态位,以及一个新的有别于核心态和用户态的安全态。ARM并没有把TrustZone设

    昨天
  • 主流ARM的分类介绍

    ARMCPU现在分为3种型号:A系列:主要是用在智能手机上,代表的系统是Andrios和IOS。R系列:和M系列一样,更注重实时功能,军工和航天的实时嵌入式设备

    昨天
  • 如何用51单片机进行遥控解码

    遥控器使用方便,功能多.目前已广泛应用在电视机、VCD、DVD、空调等各种家用电器中,且价格便宜,市场上非常容易买到。如果能将遥控器上许多的按键解码出来.用作单

    昨天
  • Cortex-M3寄存器的11个知识点

    1.寄存器CM3拥有R0~R15通用寄存器和一些特殊功能寄存器R0~R12这些通用寄存器,复位初始值都是不可预料的2.CM3有R0到R15的通用寄存器组注:绝大

    昨天
  • MM32F0/L0/W0系列MCU之EXTI

    一、MM32嵌套向量中断控制器本文针对MM32F0/L0/W0系列MCU产品。特征 ○中断都可屏蔽(除了NMI) ○16个可编程的优先等级(使用了4位中断优先级

    昨天
  • 用库函数的方法来设置STM32 DAC

    STM32的DAC模块(数字/模拟转换模块)是12位数字输入,电压输出型的DAC。DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC工作在1

    昨天
  • PIC单片机设计引脚中断程序

    所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是

    昨天
  • EEPROM和FLASH的区别

    1、EEPROM介绍ElectricallyErasableProgrammableReadOnlyMemory电气可拭除可编程只读存储器发展过程:ROM–&g

    昨天
  • stm32之CMSIS标准、库目录、GPIO

    一、CMSIS标准ST公司的stm32采用的是cortex-m3内核,内核是整个微处理器的CPU。该内核是ARM公司设计的一种处理器体系架构。内核与外设的关系就

    昨天
  • uCOS-II下编写中断服务程序

    在uCOS-II实时内核下,对外设的访问接口没有统一完善,有很多工作需要用户自己去完成。串口通信是单片机测控系统的重要组成部分,异步串行口是一个比较简单又很具代

    昨天
下载排行榜
更多
广告