打印
[STM32F3]

DMA完成接收进入中断的时候,此时进入的中断消耗cpu时间吗

[复制链接]
3739|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qqq8512852|  楼主 | 2014-4-2 12:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DMA完成接收进入中断的时候,此时进入的中断消耗cpu时间吗?
沙发
df_flying| | 2014-4-2 13:30 | 只看该作者
单片机CPU一次只能完成一个任务(单片机的多任务也是软件模拟的),他进入中断运行中断里面的程序当然需要CPU了,要不然用什么运行呢?DMA所谓的不占用CPU是因为DMA相对独立的硬件设计,他来了数据就往相应的地址里面送,占用数据,地址总线,而不占用CPU时间,其实也是影响CPU的执行的。

使用特权

评论回复
板凳
qqq8512852|  楼主 | 2014-4-2 13:36 | 只看该作者
df_flying 发表于 2014-4-2 13:30
单片机CPU一次只能完成一个任务(单片机的多任务也是软件模拟的),他进入中断运行中断里面的程序当然需要C ...

那如果我设置DMA—usart每次接收一个byte的字节就进入中断的话 岂不是和使用串口中断接收数据一样耗时?

使用特权

评论回复
地板
df_flying| | 2014-4-2 13:51 | 只看该作者
qqq8512852 发表于 2014-4-2 13:36
那如果我设置DMA—usart每次接收一个byte的字节就进入中断的话 岂不是和使用串口中断接收数据一样耗时? ...

不是,串口的软件接收是CPU在接收,串口的DMA的接收是硬件DMA接收的不需要CPU的,这时CPU可以做别的事,但是进入中断后,都是相同的了,都是CPU在运行。

使用特权

评论回复
5
qqq8512852|  楼主 | 2014-4-2 14:13 | 只看该作者
df_flying 发表于 2014-4-2 13:51
不是,串口的软件接收是CPU在接收,串口的DMA的接收是硬件DMA接收的不需要CPU的,这时CPU可以做别的事,但 ...

你说的这点我知道,但是假设我的DMA设置为一个字节的,满了就进入DMA中断处理数据,和USART接受到一个字节就进入中断,这个进入中断里面处理数据的时间应该都是要消耗的,那么既然都要消耗,那么DMA还能体现优势吗

使用特权

评论回复
6
aozima| | 2014-4-2 14:20 | 只看该作者
本帖最后由 aozima 于 2014-4-2 14:21 编辑

DMA一次只接收一个字节就中断,比中断接收还要慢。
DMA接收不定长的数据一般使用:满/半满中断和空闲中断(数据不够多但有一段时间没接收到了)

使用特权

评论回复
7
qqq8512852|  楼主 | 2014-4-2 14:45 | 只看该作者
aozima 发表于 2014-4-2 14:20
DMA一次只接收一个字节就中断,比中断接收还要慢。
DMA接收不定长的数据一般使用:满/半满中断和空闲中断( ...

我现在是收取不定长度的数据 ,但是DMA buffer设定的大小是2个字节的buffer,而且打开了传输过半和完成两个中断进行 边接收边 计算数据的接收长度的计数,然后再在别的地方 将数据取出来 进行解析 。 这么的话 会影响cpu速度吗?

使用特权

评论回复
8
aozima| | 2014-4-2 17:07 | 只看该作者
一群人给你讲了半天难道还没明白你把DMA设置为2个字节没多大意义吗?

一般看别人至少都是32字节到几百字节的。

使用特权

评论回复
9
qqq8512852|  楼主 | 2014-4-3 18:08 | 只看该作者
aozima 发表于 2014-4-2 17:07
一群人给你讲了半天难道还没明白你把DMA设置为2个字节没多大意义吗?

一般看别人至少都是32字节到几百字节 ...

可是我接收的数据 有一定的格式 而且在不一定的位置有两位是表示数据长度 还有帧头什么的 用大buffer接受不合适

使用特权

评论回复
10
aozima| | 2014-4-3 18:10 | 只看该作者
楼主难道不思考下那些DMA buffer设置为几百字节的就不能接收1字节的帧吗?

使用特权

评论回复
11
feilusia| | 2014-4-3 21:09 | 只看该作者
qqq8512852 发表于 2014-4-3 18:08
可是我接收的数据 有一定的格式 而且在不一定的位置有两位是表示数据长度 还有帧头什么的 用大buffer接受 ...

这样就是任意数据长度使用DMA:比如A和B用串口通信,先不用DMA,将A要发往B的字节数长longth发给B,B在中断里接收longth并设置B的DMA,然后发送一个任意数据给A说明接收完成,A进入中断后配置A的DMA将你要发送的数据发过去,OK。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

15

帖子

0

粉丝