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

发布于:2024-07-17 编辑:匿名 来源:网络

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控制器的主要功能是在外部存储器和内部外设之间传输数据。

这里的内部外设包括SIO、IIS、TIMER和UART。

BDMA和ZDMA可以通过软件或硬件启动。

本设计中我们使用UART0,其对应的DMA通道为BDMA0。

控制器框图如图1所示。

  S3c44b0x的UART单元提供2个独立的异步串行I/O端口。

每个端口都可以工作在中断模式或DMA模式,即UART可以产生内部中断请求或DMA请求。

在CPU的串行I/O端口/O端口之间传输数据,支持高达0.2KBPS的传输速率。

每个UART通道包含两个16位FIFO通道,分别用于发送和接收。

  3。

硬件电路设计  由于S3c44b0x自带了支持UART的DMA控制器,所以不需要在DMA硬件部分做任何工作。

S3C44B0X的I/O口电压为3.3V,PC机一端的串口采用RS电平,所以中间需要进行电平转换,这里使用SPE芯片。

连接电路如图2所示。

  4。

基于DMA和中断相结合的通信软件设计  以S3C44B0X为核心组成的移动机器人中,采用3路PWM定时器来驱动3个直流电机,通用GPIO口和A/D口连接外部红外,超声波和激光传感器,并使用UART0完成与上位机(PC)的数据交换。

这些数据是单向的(从上位机发送到S3c44b0x),主要是从上位机发送到机器人控制器的各种数据。

命令信息,但命令信息的发送时间是不规则的,即间隔是可变的。

为了充分利用CPU并降低数据丢失的风险,我们使用UART的DMA模式来完成数据接收。

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

软件部分主要针对具体应用,正确初始化DMA控制器和UART。

UART的初始化比较简单,主要是通信数据格式、波特率等的设置,这些和其他控制器是一样的,只要设置好相关寄存器即可。

注意UART设置为不使用自动流控,也不使用红外传输模式。

需要注意的是,UART0 设置为 DMA 模式而不是中断模式,并且必须启用 FIFO 缓冲区(根据需要使用 16 字节接收缓冲区)。

这样,当接收缓冲区满时,将产生DMA请求而不是中断请求。

由于篇幅限制,具体的寄存器定义和串口初始化不再详细介绍。

可以参考文献[1][2]。

  DMA控制器的初始化也比较简单,主要是相关寄存器的设置。

本系统中用到的与BDMA0相关的寄存器及相关定义如表1所示,具体寄存器的名称定义和物理地址可参见参考文献[1][2]。

  表1 S3c44b0x的BDMA相关寄存器定义  初始化时,目标(缓冲区)首地址、数据传输方向、源寄存器首地址、地址指针是否递增以及增量方向和DMA必须正确设置。

柜台等等。

相关代码及注释如下:   #define RAM_ADDRESS 0xc00 //定义接收数据的缓冲区,具体取决于硬件。

我们系统中扩展的SDRAM存储空间是从0x0C0~0x0C7fffff,占用S3c44b0x的bank 6。

  #define size 16 //定义DMA计数器并根据需要设置。

可用选项有 4、8、2 和 16  char *Buf;  Buf=(unsigned char*) RAM_ADDRESS; //指针指向起始地址  BDISRC0=(11<<28)+(int)(rURxH0); /*以字节为单位传输;由于 UART 寄存器中的数据是在 DMA 操作期间读取并放置到设置的缓冲区中,因此源寄存器的地址应固定为; UART的接收保存寄存器rURxH0,位[29:28]应设置为0b11。

*/  BDIDES0=(10<<30)+(01<<28)+Buf); /*传输方向模式设置为从内部设备(UART口)到外部存储器(SDRAM),目标存储器(SDRAM)使用地址递增的方向依次将数据放入缓冲区*/  BDICNT0= (10<<30)+(1<<26)+(3<<22)+(1<<21)+(0<<20)+size;/*设置UART0使用BDMA0通道。

当DMA计数达到0时,会自动重新加载并自动启动。

计数结束时将产生中断。

每个 DMA 操作将 16 个字节的数据移动到设定的位置。

Buffer */  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毫秒)。

然后一台机器人采用中断方式接收上位机连续发送的组命令,另一台机器人采用基于DMA方式的中断方式接收上位机连续发送的组命令。

然后在机器人的主程序中,通过读取UART的状态寄存器来确定错误的数量(主要是数据溢出错误,即缓冲区接收到数据但没有及时读取,被新数据覆盖)。

软件采用C语言,用ADS1.2编译和调试。

测试结果如表2所示。

实验证明了第二种方法的有效性。

  表2:对比测试结果  本文作者的创新之处在于,在UART通信中,采用DMA方式直接将UART接收到的数据传输到设定的RAM区域,然后对应的全局标志设置后,只需通知主程序数据可用即可。

开发人员无需从UART缓冲区读取数据,只需直接读取RAM即可。

与采用中断方式或查询方式的串口通信方式相比,不仅节省了CPU通信时接收数据的时间,而且可以防止UART接收到的数据因未及时读取而丢失,提高了性能。

沟通效率。

可靠性。

   参考文献:   (1)《嵌入式系统开发与应用》,田泽主编,北京航空航天大学出版社,5月第一版;   (2)S3C44B0X RISC微处理器,三星电子  (3)ARM微控制器基础与实战,周立功等主编,北京航空航天大学出版社,11月第1版。

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

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 确保产业链不“断”,66家半导体企业率先复工复产

    确保产业链不“断”,66家半导体企业率先复工复产

    上海证券报 4月16日,上海经济和信息化委员会发文《上海市工业企业复工复产疫情防控指引(第一版)》,宣布第一批重点企业“白名单”,其中包括66家半导体企业。 上海证券报记者采访了部分上榜企业。 多家半导体企业回应称,已收到相关复工通知,正在与相关部门和员工沟通安

    06-06

  • iPhone 16新爆料:史上最大屏幕、采用全新电容式按键

    iPhone 16新爆料:史上最大屏幕、采用全新电容式按键

    距离上一款iPhone发布已经越来越久了,关于iPhone 16系列的消息也越来越多。 DSCC 分析师 Ross Young 近日分享了一份新报告称,苹果将于下个月开始 iPhone 16 系列的面板生产,这与之前 iPhone 15 的生产周期时间表相同。 这意味着目前 iPhone 16 的整体计划系列已基本定型,

    06-21

  • 他卖床垫一年赚40亿,要IPO

    他卖床垫一年赚40亿,要IPO

    你可能不知道连床垫都支持IPO。 投资界-天天IPO获悉,6月2日,证监会网站发布关于核准慕斯健康睡眠股份有限公司首次公开发行股票(简称“慕斯股份”)的批复。 截至6月1日,缪斯股份审核状态变更为“通过发行审核会议”,这意味着IPO钟声敲响只是时间问题。 慕斯2011年诞生于

    06-18

  • 山东最大宠物IPO:乖宝宠物市值300亿

    山东最大宠物IPO:乖宝宠物市值300亿

    A股最大宠物IPO诞生。 投资界-天天IPO获悉,今日(8月16日),麦食母公司耀铭宠物食品集团股份有限公司(简称:耀铭宠物)正式登陆深交所创业板。 本次IPO,耀明宠物发行价为39.99元/股,早盘涨幅超90%。 市值一度突破亿元,成为中国市值最大的宠物上市公司。 创造这一切的人

    06-18

  • 需求持续增长,海洋蛋白零食品牌“海狸先生”完成数千万元Pre-A轮融资

    需求持续增长,海洋蛋白零食品牌“海狸先生”完成数千万元Pre-A轮融资

    据投资界(ID:pedaily)9月16日消息,近日,海洋蛋白零食品牌“海狸先生”完成数千万元Pre-A轮融资蛋白零食品牌“海狸先生”完成数千万元Pre-A轮融资,投资方为朴长青、齐光资本、启融创投。 据了解,本轮融资将用于产品研发和渠道拓展。 海狸先生成立于2007年,为亲子、海

    06-17

  • 21世纪教育联手中国软银设立30亿教育产业基金,专注优质教育投资

    21世纪教育联手中国软银设立30亿教育产业基金,专注优质教育投资

    据投资界8月1日消息,中国21世纪教育集团宣布达成框架协议与中国软银投资管理有限公司合作,双方强强联手。 设立规模30亿元的教育产业基金。 据悉,双方此次成立基金,专注于优质教育投资并购。 目的是实现产业与资本联动,充分发挥教育各方资源协同优势,捕捉优质教育项目,

    06-18

  • 重的! Arm出货量超过1500亿颗,进入定制指令集,瞄准RISC-V

    重的! Arm出货量超过1500亿颗,进入定制指令集,瞄准RISC-V

    雷锋网消息。 近日,在一年一度的ARM Techcon大会上,ARM宣布推出新功能Arm Custom instructions。 此功能允许客户向特定 CPU 内核添加自定义指令功能,以加速特定用例、嵌入式和物联网应用程序。 ARM 采用自定义指令集。 据了解,Arm自定义指令功能适用于Cortex-M33内核及更

    06-18

  • 国内首支影视文化产业基金在津设立,总规模5亿元

    国内首支影视文化产业基金在津设立,总规模5亿元

    近日,“亿亿影视文化股权投资基金”在天津获批设立。 这是国内首支以影视文化产业为主要投资方向的人民币私募股权基金。 股权投资基金(PE)。   “依依影视文化股权投资基金”以有限合伙形式设立,总规模5亿元人民币,首期1亿元人民币。 该基金首期将投资国内优秀影视剧项

    06-17

  • 创业明星-西泉科技创始人熊伟:为家人健康保驾护航

    创业明星-西泉科技创始人熊伟:为家人健康保驾护航

    不想错过16年前的淘宝 7年前的天猫 阿里云推出“贸易明星班”,发现并帮助更多优秀科技创新 赋能的创业加速器企业构建云生态系统,加速创新。 本期特鲁姆普是赛场上明星班的17号学员——熊伟。 2008年以来,阿里巴巴大力投入智慧医疗、智慧城市的探索。 经历了最初的布局阶段

    06-18

  • 国家统计局:7月高技术制造业利润同比增长37.9%

    国家统计局:7月高技术制造业利润同比增长37.9%

    头条新闻是7月27日,统计局数据显示,1-7月,全国限额以上规模企业实现利润总额9.5亿元。 同比增速57.3%,同比增速44.6%,两年平均增速20.2%。 值得注意的是,7月份,高技术制造业利润保持较快增长。 高技术制造业利润同比增长37.9%,拉动规模以上工业利润增长6.2个百分点;两

    06-17

  • 丑闻频出,Verizon收购雅虎价格或缩水10亿美元

    丑闻频出,Verizon收购雅虎价格或缩水10亿美元

    7月,美国电信公司Verizon计划以48.3亿美元收购雅虎。 此次收购主要涉及雅虎的搜索引擎、网络广告工具、网络服务等互联网业务以及房地产等核心资产。 交易完成后,Verizon 将能够为 10 亿月用户提供雅虎的邮箱、新闻、体育内容和金融工具,以及快速增长的移动应用程序、视频和

    06-17

  • 甲骨文在中国市场的“惨败”:传统IT企业衰落的缩影

    甲骨文在中国市场的“惨败”:传统IT企业衰落的缩影

    消息传出一个多月后,甲骨文中国研发中心的裁员正式开始。 从5月7日开始,多名甲骨文中国员工被要求签署裁员协议。 尽管公司提供了N个月的工资补偿,但如此仓促的裁员还是引起了部分员工的抵制,他们举起了标语公开抗议。 甲骨文公司总部位于美国,是仅次于微软的全球第二大软

    06-17