轮询、中断和DMA三种方式的原理和联系

CPU控制外部设备的方式:中断、轮询、DMA


由于外部设备的速度差异,CPU可以使用不同的方式控制外部设备的访问。常见的方式轮询、中断和DMA。

轮询

轮询最简单,CPU通过不断地查询某个外部设备的状态,如果外部设备准备好,就可以向其发送数据或者读取数据,这种方式由于CPU不断查询总线,导致指令执行受到影响,效率非常低。

中断

中断方式克服了CPU轮询外部设备的缺点,正常情况下,CPU执行指令,不会主动去检查外部设备的状态。外部设备准备好之后,向CPU发送中断信号,CPU收到中断信号后停止当前的工作,会根据中断信号指定的设备号处理相应的设备。这种处理方式既不影响COU的工作,也能保证外部设备的数据得到及时处理,工作效率很高。

DMA

中断方式效率虽然很高,但是对于大量数据的传输就显得力不从心。大量的中断会导致CPU忙于处理中断而减少对指令的处理,效率会变的很低。对于大量的数据传输可以不通过CPU而直接传送到内存,这种方式叫做DMA(DIrect Memory Access)。使用DMA方式,外部设备在数据准备好之后只需向DMA控制器发送一个命令,把数据的地址和大小传送过去,由DMA控制器负责把数据从外部设备直接存放到内存。DMA方式适合处理大量的数据,因此越来越多的嵌入式处理器开始支持它。

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DMA(Direct Memory Access,直接存储器访问)是一种数据传输方式,它可以在不占用CPU时间的情况下,实现外设与存储器之间的数据传输。在STM32F407中,DMA主要是用来优化外设与存储器之间的数据传输效率,它可以显著提高数据传输速度,降低CPU的占用率。 DMA控制器位于AHB总线上,与外设和存储器进行数据传输。它具有多个通道,每个通道可以独立地执行数据传输操作。DMA的工作原理可以简单地描述为:当外设需要向存储器传输数据时,它会向DMA控制器发送请求,DMA控制器会根据请求,选择一个空闲的通道,然后配置好通道的相关寄存器,启动数据传输操作,完成后再向外设发送传输完成信号。 下面是DMA的应用示例: 假设我们要通过USART1向串口传输100个字节的数据,我们可以使用DMA来实现。首先,我们需要将USART1的发送数据寄存器(USART_DR)与DMA通道绑定,然后配置DMA通道相关寄存器,包括源地址、目的地址、数据传输长度等信息。最后,启动DMA传输操作,当传输完成后,DMA会自动向USART1发送传输完成信号,我们可以通过中断轮询方式获取传输结果。 需要注意的是,在使用DMA时,必须保证数据的正确性和一致性,因为数据传输操作是由DMA控制器自动执行的,如果存在数据一致性问题,可能会导致系统异常或数据损坏。因此,在使用DMA时,需要仔细地设计和测试程序,确保数据传输的正确性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值