OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8653|回复: 10

DMA+串口空闲中断问题,DMA优势

[复制链接]

8

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2019-10-20
在线时间
28 小时
发表于 2022-9-4 09:45:51 | 显示全部楼层 |阅读模式
2金钱
DMA+串口空闲中断来收发不定长数据的优势是什么?数据多的话,不是还是会频繁进入到串口空闲中断吗?那为什么还要使用DMA?
控制串口时,CPU转运数据的路径是什么呢?是不是把串口的数据一个一个搬到SRAM?然后如果有DMA的话,可以由DMA来把串口数据搬到SRAM,这样理解对吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3447
金钱
3447
注册时间
2017-7-4
在线时间
869 小时
发表于 2022-9-4 11:05:57 | 显示全部楼层
DMA接收就是减少中断,很多uart没有硬件rx fifo,中断方式接收就是1字节中断一次。用DMA很明显可以减少中断次数。
https://acuity.blog.csdn.net/art ... 1001.2014.3001.5502
回复

使用道具 举报

8

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2019-10-20
在线时间
28 小时
 楼主| 发表于 2022-9-4 12:58:39 | 显示全部楼层
Acuity 发表于 2022-9-4 11:05
DMA接收就是减少中断,很多uart没有硬件rx fifo,中断方式接收就是1字节中断一次。用DMA很明显可以减少中断 ...

那使用串口空闲中断不是可以解决吗?就是一帧数据过来再触发中断,但是我见有博主使用DMA+串口空闲中断在进行不定长数据收发,写的可以减少CPU负担
回复

使用道具 举报

8

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2019-10-20
在线时间
28 小时
 楼主| 发表于 2022-9-4 13:01:58 | 显示全部楼层
有博主为了减少频繁进入串口中断,采用DMA+串口空闲中断来收发不定长数据,这个比起只是用串口空闲中断的优势是什么?数据多的话,不是还是会频繁进入到串口空闲中断吗?那为什么还要使用DMA? 控制串口时,CPU转运数据的路径是什么呢?是不是把串口的数据一个一个搬到SRAM?然后如果有DMA的话,可以由DMA来把串口数据搬到SRAM,这样理解对吗
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
发表于 2022-9-4 14:41:59 | 显示全部楼层
rjf2729 发表于 2022-9-4 12:58
那使用串口空闲中断不是可以解决吗?就是一帧数据过来再触发中断,但是我见有博主使用DMA+串口空闲中断在 ...

只开串口空闲中断 那你怎么知道数据什么时候来新的了 来了多少个……又打算在哪个时间点把数据取走?
DMA的作用就是不管他什么时候来数据来多少个 通过DMA先把数据收集起来 然后用空闲中断告诉CPU有新数据需要处理 在这期间CPU可以执行别的任务而不耽误其他工作

空闲中断是对面发了一组数据之后才产生的 在一组数据之内是连续发送的 并不进入中断 传统的接收中断 每个字节都会中断一下
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3359
金钱
3359
注册时间
2011-11-10
在线时间
207 小时
发表于 2022-9-5 10:05:20 | 显示全部楼层
DMA是专业的搬运工。不开DMA就的CPU亲自干,开了DMA,CPU就不需要亲自干了,只告诉DMA从哪里搬放到哪里就行了,这不就是明显降低了CPU负担了?DMA是硬件,不是所有的单片机都配有DMA。
回复

使用道具 举报

9

主题

218

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1394
金钱
1394
注册时间
2020-5-12
在线时间
387 小时
发表于 2022-9-5 11:29:39 | 显示全部楼层
只开空闲中断的话,一帧数据过来中断一次,告诉一帧数据完结。但是你数据接收还是需要靠接收中断才能收数据(一字节一中断)。DMA需要做的是代替接收中断。由DMA搬运串口数据到指定位置(自己定义的)。
回复

使用道具 举报

12

主题

160

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2747
金钱
2747
注册时间
2017-12-16
在线时间
199 小时
发表于 2022-9-5 12:34:04 | 显示全部楼层
rjf2729 发表于 2022-9-4 12:58
那使用串口空闲中断不是可以解决吗?就是一帧数据过来再触发中断,但是我见有博主使用DMA+串口空闲中断在 ...

空闲中断 解决的是   帧的问题
DMA解决的是  一个字节的问题
不是一个事!
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10561
金钱
10561
注册时间
2017-2-18
在线时间
1911 小时
发表于 2022-9-5 22:10:57 | 显示全部楼层
rjf2729 发表于 2022-9-4 12:58
那使用串口空闲中断不是可以解决吗?就是一帧数据过来再触发中断,但是我见有博主使用DMA+串口空闲中断在 ...

中断方式接收就是1字节中断一次,因此串口空闲中断+DMA方式确实可以减少CPU负担
如果只是串口空闲中断,对于数据量大的串口通信,CPU从DR寄存器取数据到指定的缓冲区需时比空闲中断+DMA方式多。
回复

使用道具 举报

2

主题

64

帖子

0

精华

高级会员

Rank: 4

积分
946
金钱
946
注册时间
2014-11-2
在线时间
367 小时
发表于 2022-9-17 07:42:10 来自手机 | 显示全部楼层
有dma的话,连串口和dma中断都不用开,只要主循环开个定时查询任务就可以了,115200为例1个字节86微秒,开dma缓冲200多字节就可以少于2豪秒查询都来得及处理
回复

使用道具 举报

54

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1042
金钱
1042
注册时间
2022-4-20
在线时间
373 小时
发表于 2022-9-19 13:55:38 | 显示全部楼层
我以一种形象的方式来理解DMA+空闲中断和只用接收中断的区别:
假设CPU和DMA都是一名工人,CPU平时的工作是每一秒钟写一个数字“1”(类比执行代码),他的身旁有一个传送带(类比串口),传送带不知道什么时候会来一张纸,上面写着一些信息,每当一张纸被送来的时候,必须有人将传送带上的纸拿下来放进文件夹内。
那么当不使用DMA(仅使用接收中断)的时候,这个活就只有CPU亲自来做,传送带没来纸的时候(串口没数据),CPU将正常地执行自己的工作,而如果传送带上一直有纸来,那么装纸这个动作将大大影响他的本职工作,也许两秒钟才能写一个“1”。
但使用DMA的时候,CPU就可以说:“DMA,我这在忙,如果传送带上面有纸来了,你就把他放到这个文件夹里面(指定外设地址和存储器地址),要是有一阵子没来纸(空闲状态)你就告诉我(空闲中断),我来拿文件夹(空闲中断处理数据)。”然后CPU就可以自己干自己的事,等到DMA喊他的时候再去处理文件夹,如果这一天传送带上一直来纸,也不影响他写“1”的速度。
又菜又爱指点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 04:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表