ARM中基于DMA的高效UART通讯及其应用

发布者:幸福旅程最新更新时间:2012-03-26 来源: 微计算机信息关键字:UART  DMA  ARM 手机看文章 扫描二维码
随时随地手机看文章

1、引言

由于UART串行口的广泛应用,在传统的8位和16位的处理器以及32位处理器中,一般都带有UART串行口。传统的基于UART的数据通讯中,采用的方式一般有两种,查询式和中断式。查询方式下CPU的负担较重,浪费了处理器的能力,不能够很好的处理其他的事件;中断方式可以在接收到信息或需要发送数据时产生中断,在中断服务程序中完成数据的接收与发送。相对于查询方式,中断方式的CPU利用率要高。在CPU任务简单的系统中,使用中断方式确实是一种好方法。但是在复杂的系统中,比如移动机器人,处理器需要处理串行口通信,多个传感器数据的采集以及处理,实时轨迹的生成,运动轨迹插补以及位置闭环控制等等任务,牵扯到多个中断的优先级分配问题。为了保证数据发送与接收的可靠性,需要把UART的中断优先级设计较高,但是系统可能还有其他的需要更高优先级的中断,必须保证其定时的准确,这样就有可能造成串行通讯的中断不能及时响应,从而造成数据丢失。为此,笔者在采用S3c44b0x设计移动机器人控制器时,为了保证串行通讯的数据及时可靠的接收,同时兼顾其它任务不受影响,采用了基于DMA和中断方式相结合的UART串行通信方式。DMA是 Direct Memory Access的缩写,意思是“存储器直接访问”,它是一种高速的数据传输操作,允许在外部设备和存储器之间直接读/写数据,即不通过CPU,也不需要 CPU干预。整个数据传输操作是在一个称作DMA控制器的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中可以进行其他的工作。这样,在大部分时间里,CPU和输入/输出设备都处于并行的操作状态。其基本原理可以查阅教科书,此处不赘述。这里仅介绍S3c44c0x的DMA控制器。

2、S3c44b0x中的DMA控制器和UART的特性

S3c44b0x采用ARM7TDMI核,具有4 通道的DMA控制器,并且对应有4个中断。其中两个DMA通道称做ZDMA(通用DMA),连接在SSB(系统总线)上,另外两个DMA通道称做 BDMA(桥DMA),连接于SSB和SPB(外设总线)之间的接口层。连接于SSB上的ZDMA控制器可以用于从存储器到存储器,从存储器到固定目标的 I/O存储器,和从I/O 设备到存储器之间的数据传输。另外的两个BDMA 控制器主要作用是在外部存储器和内部外设之间传输数据,这里的I内部外设包括SIO,IIS,TIMER和UART等。BDMA与ZDMA可以通过软件启动,也可以通过硬件启动。此设计中我们使用UART0,与其对应的DMA通道为BDMA0。其控制器框图如图1所示。

S3c44b0x的UART单元提供2个独立的异步串行I/O口,每个口均可以工作于中断模式或者DMA模式,即 UART可以产生内部中断请求或者DMA请求,在CPU的串行I/O口之间传送数据,支持高达115.2KBPS的传输速率,每个UART通道包含2个 16位的分别用于发送和接收的FIFO通道。                        

图1  S3C44B0X的DMA控制器框图

3、硬件电路设计

由于S3c44b0x自带支持UART的DMA控制器,所以关于DMA硬件部分不需要作任何的工作。S3C44B0X的I/O口电压为3.3V,而PC机一端的串口采用RS232电平,所以中间要经过电平转换,在此采用SP3232E芯片。连接电路如图2所示。    

图2 S3c44b0x UART 电平转换电路[page]

4、基于DMA和中断相结合的通讯软件设计

在以S3C44B0X为核心组成的移动机器人中,采用3路PWM定时器驱动3个直流电机,通用的GPIO口和A/D口连接外部的红外和超声以及激光传感器,使用UART0完成与上位机(PC)的数据交换,这些数据是单向的(从上位机发送给S3c44b0x),主要是上位机传给机器人控制器的各种命令信息,但是命令信息的发送时间上是不具有规律性的,即间隔时间不定。为了充分的利用CPU,减少数据丢失的风险,我们利用UART的DMA模式来完成数据的接收。软件部分主要是针对具体的应用,对DMA控制器以及UART作适当的初始化。UART的初始化比较简单,主要是通讯数据格式、波特率等的设置,这些与其他控制器相同,只要设置相关的寄存器即可。注意UART设置成不使用自动流控制,不使用红外线传输模式,关键要注意UART0设置成DMA模式而不是中断模式,并且要使能FIFO缓冲区(根据需要,使用16字节的接收缓冲区),这样在接收缓冲区满时,会产生DMA请求而不是中断请求。限于篇幅,具体的寄存器定义以及串行口的初始化不做详悉介绍,可以参考文献[1][2]。

DMA控制器的初始化也比较简单,主要是相关寄存器的设置。与BDMA0相关的在本系统中用到的寄存器以及相关定义见表1,具体寄存器的名称定义以及物理地址见参考文献[1][2]。

表1  S3c44b0x的BDMA相关寄存器的定义

BDMA0控制寄存器BDCON0

位[5:4],DMA通道的状态,00=准备好 ;01=还没有终止计数;10=终止计数 ;11=N/A

位[3:2]禁止/使能外部/内部DMA请求,00=使能;其他=禁止

位[1:0]软件命令00:无命令,在写入其他数值CMD位将被自动清0;01:保留;10:保留;11:取消DMA操作

BDMA0 的初始化时源地址BDISRC0,

位[31:30] ,传输数据的尺寸,00=字节 01=半字;10=字 11=未用

位[29:28],载入地址的方向00=N/A 01=增加;10=减少 11=内部外设(固定地址)

位[27:0],BDMA的初始化源地址

BDMA0 的初始化时目标地址BDIDES0

位[31:30],传输方向模式设定:00=保留;01=M2IO(从外部存储器到内部设备);10=IO2M(从内部设备到外部存储器);11=IO2IO(从内部设备到内部设备)

位[29:28],保存地址的方向

00=N/A 01=增加

10=减少 11=内部外设(固定地址)

位[27:0],BDMAn 的初始化目标地址

 

BDMA0 的初始化时计数器寄存器BDICNT0

位[31:30],DMA请求源选择:00=N/A 01=IIS;10=UARTn ;11=SIO

位[23:22],中断模式设置:00=轮流检测模式 01=N/A;10=在传输时发生中断;11=终止计数时发生中断。

位[21],在DMA 计数器达到0时是否自动重载和自动启动。0=禁止;1=使能

位[20],DMA的硬件使能/禁止。0=禁止DMA;1=使能DMA

位[19:0],BDMA0 的传输计数器

 

在初始化时要正确设置目标(缓冲区的)首地址、数据传输的方向、源寄存器的首地址、地址指针是否递增以及递增方向、DMA计数器等等。相关代码以及注释如下:

#define  RAM_ADDRESS  0xc200000  //定义接收数据的缓冲区,根据硬件而定。在我们的系统中扩展的SDRAM 存储空间从0x0C00000~0x0C7fffff,占用S3c44b0x的bank 6。

#define  size  16  //定义DMA的计数器,根据需要设定,可以选择的选项是4、8、2和16

char *Buf;

Buf=(unsigned char*) RAM_ADDRESS;  //指针指向起始地址

BDISRC0=(11<<28)+(int)(rURxH0);    /*以字节为单位传送;因为DMA操作时是将UART的寄存器中的数据读出放置到设定的缓冲区,所以源寄存器的地址应该是固定到;UART的接收保存寄存器rURxH0,同时位[29:28]应该设置成 0b11。*/

BDIDES0=(10<<30)+(01<<28)+ Buf); /*传输方向模式设定为从内部设备(UART口)到外部存储器(SDRAM),目标存储器(SDRAM)使用地址递增的方向,将数据顺次放置到缓冲区中*/

BDICNT0=(10<<30)+(1<<26)+(3<<22)+(1<<21)+(0& lt;<20)+size;/*设置UART0使用BDMA0通道,在DMA计数到0时自动重载和自动启动,计数结束产生中断,每次DMA操作移动 16字节数据到设定地缓冲区*/

BDICNT0 |= (1<<20);//使能DMA

BDCON0 = 0x0<<2;//允许外部DMA请求

数据接收:这一部分工作由初始化好后的DMA控制器依靠硬件来完成。接收数据不定时,初始化UART0的接收缓冲区为16字节,当接收缓冲区满时,会产生DMA请求,然后在DMA控制器的控制下,将UART的接收FIFO中的16字节的数据转移到指定的缓冲区中(SRAM),当数据转移完毕(DMA 计数到0)后,要做两件事情:一是自动重载和自动启动,即自动重新设置好目标(缓冲区)首地址和源地址(UART接收寄存器)以及DMA计数器,准备好下次DMA请求;另外产生DMA中断。DMA中断服务程序要做的工作很简单,只要对全局标志RECEIVE_FLAG置位,通知主程序有新的命令需要处理。这样主程序可以直接处理RAM中的数据,而不需要花费时间去读取UART的接收缓冲区。                                 

数据处理:当主程序通过查询全局标志RECEIVE_FLAG,如果为1,则知道有新的命令,可以直接读取命令缓冲区,同时对RECEIVE_FLAG清零。然后按照一定的算法对接收的数据做出解析,这部分内容不做重点讨论。

5、试验及结论                

为了验证基于DMA的通讯的有效性,笔者做了对比试验。把负责轨迹插补的定时中断优先级设计成最高(中断时间间隔50毫秒,中断服务程序执行时间约需要30毫秒),然后一个机器人采用中断方式接收上位机连续发送的100组命令,另一个采用基于DMA的方式接收上位机连续发送的100组命令。然后在机器人主程序中通过读取UART的状态寄存器判断出现错误(主要是数据溢出错误,即缓冲区有接收数据而没有及时读取,被新的数据覆盖)的次数。软件采用C语言,用ADS1.2编译调试。试验结果如表2。实验证明了第二种方式的有效性。

表2:对比试验结果

试验

第1组

第2组

第3组

采用DMA方式接收命令的机器人出现数据溢出错误的次数

0

0

0

采用中断方式接收命令的机器人出现数据溢出错误的次数

6

4

6

本文作者的创新点在于:在UART通讯中,通过采取DMA方式,直接将UART接收的数据转移到设定好的RAM区,然后设置相应的全局标志,通知主程序数据可用就可以了。开发人员不需要到UART的缓冲区中读取数据,直接读RAM就可以了。与采用中断方式或者查询方式的串行口通讯方式相比较,不仅仅可以节省CPU通讯时用于接收数据的时间,同时可以防止UART接收的数据由于没有及时被读取而丢失,提高了通讯的可靠性。

参考文献:

(1)嵌入式系统开发与应用,田泽编著,北京航空航天大学出版社,2005年5月第一版;

(2)S3C44B0X RISC MICROPROCESSOR ,SAMSUNG ElECTRONICS

(3)ARM微控制器基础与实战,周立功等编著,北京航空航天大学出版社,2003年11月第1版.

(4) 魏永清 万宝年,具有软件模拟FIFO缓冲区的串口通信模块设计,微计算机信息 2006年第7-2期:64-66

关键字:UART  DMA  ARM 引用地址:ARM中基于DMA的高效UART通讯及其应用

上一篇:基于S3C44B0X的Bootloader设计与实现
下一篇:基于ARM单片机的嵌入式最小系统架构研究

推荐阅读最新更新时间:2024-03-16 12:56

Nios系统基础上的UItra DMA数据传输模式
摘 要:为实现高速、大容量的数据存储,提出一种基于硬盘Ultra DMA传输模式的高性价比解决方案。详细介绍Nios嵌入式系统的整体构架和各个子模块的功能;提出一种在不改变传输频率条件下,通过使用寄存嚣组对不同时钟沿数据进行锁存,以数据带宽的扩展为代价,完成IDE总线上的双边数据沿锁存与系统内部的单边数据沿锁存之间的传输模式转换;给出具体的系统读/写操作的工作流程和相关软件实现。 关键词:Ultra DMA Nios 硬盘 引 言 随着消费类电子,如MP3、3G手机、视频终端以及宽带无线网络的普及,对大容量存储设备的需求越来越强烈。传统的SRAM、SDRAM以及DDR SDRAM等存储设备的价格与容量比,远远比硬盘高;光存储
[嵌入式]
Arm已经将其持有的安谋中国股权全部转让
据日经亚洲(NIKKEI Asia)援引《财新》的报道称,英国芯片设计巨头 Arm Ltd. 已将其持有的中国合资企业安谋中国(Arm China)的股份转让给了其母公司软银集团旗下的一个特殊目的公司(SPV),以加速推动Arm的首次公开发行(IPO)计划。 报道称,过去两年,Arm 一直在努力重新控制 安谋中国,因为尽管 2020 年 6 月安谋中国董事会以 7 比 1 的投票结果将安谋中国董事长兼CEO吴雄昂赶下台,但吴雄昂拒绝放弃权力。这场争吵使 Arm 难以审计这家中国合资公司的财务状况,成为其赴美国IPO的主要绊脚石。 美国政府正与在美国上市的外国公司进行为期三年的审计纠纷,如果它们无法向美国审计师提供访问权限,
[半导体设计/制造]
全球首款采用7纳米工艺的CCIX测试芯片即将问世
赛灵思、Arm、Cadence和台积公司今日宣布一项合作,将共同构建首款基于台积7纳米FinFET工艺的支持芯片间缓存一致性(CCIX)的加速器测试芯片,并计划在2018年交付。这一测试芯片旨在从硅芯片层面证明CCIX能够支持多核高性能Arm CPU和FPGA加速器实现一致性互联。 关于CCIX 出于功耗及空间方面的考虑,在数据中心内对应用进行加速的需求日益增长,诸如大数据分析、搜索、机器学习、4G/5G无线、内存内数据处理、视频分析及网络处理等应用,都已受益于可在多个系统部件中无缝移动数据的加速器引擎。CCIX将支持部件在无需复杂编程环境的情况下,获取并处理位于任何地方的数据。 CCIX将利用现有的服务器互连基础架构,实现对
[嵌入式]
基于ARM处理器S3C2440和Linux系统的I2C触摸屏
0 引言 随着计算机相关技术的发展,ARM嵌入式系统受到越来越广泛的应用,与人们生活的结合也越来越紧密。触摸屏设备因其友善的人机交互性,操作方便灵活,输入速度快,被广泛的应用于这种嵌入式领域中。嵌入式Linux系统具有开发源代码、内核稳定、可裁减性等特点,吸引着众多商业公司和自由软件开发者的目光,成为嵌入式系统领域不可或缺的操作系统之一。触摸屏是一种输入设备,操作简单易学,可靠性高,不占额外的空间,是最常用的便携式系统的输入设备。特别是电阻式触摸屏,它结构简单,成本低,透光效果好,工作环境和外界完全隔离,不怕灰尘和水气,同时具有高解析度、高速传输反应、一次校正、稳定性高、不漂移等特点,因而被广泛用于工业控制领域。 1 电阻式触摸屏
[单片机]
基于<font color='red'>ARM</font>处理器S3C2440和Linux系统的I2C触摸屏
Microchip推出基于Arm® Cortex®-M0+内核的32位单片机PIC32CM JH
Microchip推出基于Arm® Cortex®-M0+内核的32位单片机PIC32CM JH,具备功能安全、网络安全保护并支持AUTOSAR PIC32CM JH单片机是一款内置512 KB闪存的5V双CAN FD器件,提供通常只有更昂贵、更高性能的器件才具备的高级功能 随着汽车和家用电器等电子系统制造商朝着自动化和连接终端应用的方向发展,对与功能安全和网络安全保护相关的行业标准的需求也与日俱增,以确保其产品安全可靠地运行。为了向制造商提供符合ISO 26262功能安全和ISO/SAE 21434网络安全工程标准的单片机解决方案,Microchip Technology Inc.(美国微芯科技公司)今日宣布推出PIC3
[嵌入式]
Microchip推出基于<font color='red'>Arm</font>® Cortex®-M0+内核的32位单片机PIC32CM JH
S3C2440A的UART
UART(Universal Asynchronous Receiver/Transmitter),通用异步收发器,是常用于开发调试的RS-232C串口的核心器件。在百度百科( http://baike.baidu.com/view/245027.htm )上可以找到对它的详细介绍。 虽然这段时间实验定时器、键盘、LED操作时都使用了UART串口输出功能,但那是用开发板提供的示例程序中已有的代码的,想要自己写代码正确实现串口读写操作,还不是那么容易的。昨天花了整整一天时间才稍微弄得明白了点,主要是涉及的寄存器和可选操作方式多,包括收发方式、边沿触发中断与电平触发中断、是否使用自动流控制、是否使用FIFO以及FIFO触发
[单片机]
S3C2440A的<font color='red'>UART</font>
Ubuntu9.10制作ARM交叉编译器
本环境内核版本:Linux ubuntu910 2.6.31-21-generic #59-Ubuntu SMP i686 GNU/Linux 准备软件包如下: bison_13a2.3.dfsg-4build1_i386.deb build-essential_11.4_i386.deb flex_2.5.33-10build1_i386.deb libncurses5-dev_5.6+20071124-1ubuntu2_i386.deb m4_1.4.8-1build1_i386.deb patch_2.5.9-5_i386.deb gcc-3.4.5.tar.gz glibc-2.3.6.tar.gz l
[单片机]
基于ARM的城市供水站分布式监控系统
城市供水系统担任着为整个社会提供安全的生活工业用水以及合理调度用水环节、保障用水合理性的重要职责,是整个社会正常运行的命脉。而各个供水站又是整个供水系统中最为核心的工作部分。因此,城市供水站监控系统就显得特别重要 。 当前城市供水站监控系统多以单片机为核心,将外部传感器数据进行A/D转换后接入单片机,其精度可达12位,数据经过处理后用点阵显示屏显示。单片机为8位中央处理器,这对于要求较高的领域显得稍有不足。下位机与上位机之间多采用串口进行通信。串行485接口采用差分方式传输,传输距离最大可达1 200 m,但此距离速率只能达到100 Kb/s,且485在任何时刻只允许一个下位机向上位机传递数据,使得这种通信方式受到了一定
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved