DSP

SPI与DMA的联系

2019-07-13 20:19发布

SPI和DMA的区别
SPI通过MOSI MISO CS SCLK不是应该就可以进行数据传输了吗?
为什么还有SPI下的DMA这种说法?
DMA不是数据直接绕过寄存器直接把数据从一个地址传送到另一个地址吗?
有SPI了为什么还要用DMA或者是有DMA了为什么还要用SPI?
或者说可不可以直接用SPI而不用DMA?
直接用DMA而不用SPI?
首先DMA简介:
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。
两个DMA控制器有12个通道(DMA1有7个通道, DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。
SPI:
串行外设接口(SPI)允许芯片与外部设备以半/全双工、同步、串行方式通信。此接口可以被配置成主模式,并为外部从设备提供通信时钟(SCK)。
1、SPI要用四根线进行通信MISO,MOSI,SCLK,CS。
2、TXE/RXNE发送和接受数据的标志位
3、CPOL选择时钟的空闲模式是低电平或者高电平
4、CPHA选择数据采样时钟边沿第一个或者第二个
这里写图片描述
5、MOSI(数据输出)脚上MSB在先还是LSB在先,取决于SPI_CR1寄存器中的LSBFIRST位。数据从发送缓冲器传输到移位寄存器时TXE标志将被置位,如果设置SPI_CR1寄存器中的TXEIE位将产生中断。
数据接收移位寄存器里的数据传送到接收缓冲器,并且RXNE标志被置位,如果SPI_CR2寄存器中的RXEIE位被设置,则产生中断。
我的理解:
我们一般使用SPI时是将数据从ADC发送到32上即主输出从输入MOSI,然后再使用DMA将数据从MOSI发到缓存器中再从缓冲器发到外设上一般为串口1上,我们也可以不用DMA使用SPI的数据发送函数把数据再发送到串口但是这就需要使用MCU了,或者就可以理解为占用了CPU了。