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

[复制链接]
 楼主| 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在运行。
 楼主| qqq8512852 发表于 2014-4-2 14:13 | 显示全部楼层
df_flying 发表于 2014-4-2 13:51
不是,串口的软件接收是CPU在接收,串口的DMA的接收是硬件DMA接收的不需要CPU的,这时CPU可以做别的事,但 ...

你说的这点我知道,但是假设我的DMA设置为一个字节的,满了就进入DMA中断处理数据,和USART接受到一个字节就进入中断,这个进入中断里面处理数据的时间应该都是要消耗的,那么既然都要消耗,那么DMA还能体现优势吗
aozima 发表于 2014-4-2 14:20 | 显示全部楼层
本帖最后由 aozima 于 2014-4-2 14:21 编辑

DMA一次只接收一个字节就中断,比中断接收还要慢。
DMA接收不定长的数据一般使用:满/半满中断和空闲中断(数据不够多但有一段时间没接收到了)
 楼主| qqq8512852 发表于 2014-4-2 14:45 | 显示全部楼层
aozima 发表于 2014-4-2 14:20
DMA一次只接收一个字节就中断,比中断接收还要慢。
DMA接收不定长的数据一般使用:满/半满中断和空闲中断( ...

我现在是收取不定长度的数据 ,但是DMA buffer设定的大小是2个字节的buffer,而且打开了传输过半和完成两个中断进行 边接收边 计算数据的接收长度的计数,然后再在别的地方 将数据取出来 进行解析 。 这么的话 会影响cpu速度吗?
aozima 发表于 2014-4-2 17:07 | 显示全部楼层
一群人给你讲了半天难道还没明白你把DMA设置为2个字节没多大意义吗?

一般看别人至少都是32字节到几百字节的。
 楼主| qqq8512852 发表于 2014-4-3 18:08 | 显示全部楼层
aozima 发表于 2014-4-2 17:07
一群人给你讲了半天难道还没明白你把DMA设置为2个字节没多大意义吗?

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

可是我接收的数据 有一定的格式 而且在不一定的位置有两位是表示数据长度 还有帧头什么的 用大buffer接受不合适
aozima 发表于 2014-4-3 18:10 | 显示全部楼层
楼主难道不思考下那些DMA buffer设置为几百字节的就不能接收1字节的帧吗?
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

粉丝
快速回复 在线客服 返回列表 返回顶部