中级会员
 
- 积分
- 331
- 金钱
- 331
- 注册时间
- 2016-10-12
- 在线时间
- 53 小时
|
经常有人问:为什么DMA只有内存和外设、内存到内存的模式,为啥没有外设到外设的模式?我这里来解答一下:
1、首先,DMA并没有规定模式,其实原地址和目标地址,你放哪都可以。
2、每个通道可以连接几个硬件,并不是说这个通道的地址只能是这些外设,而是这个通道的触发条件只能是这些外设。
举个例子:
DMA1的4通道,它的触发条件有很几个,其中包括USART1_TX,意思就是,串口的TXE事件能触发这个通道的传输。其实目标地址和源地址放哪里,原则上都是可以的,只不过,我们一般把目标地址放在USART->DR寄存器地址上,这样,当串口1没数据了,DMA会自动开始传输。
3、那么,外设到外设倒底可不可以呢?答案是可以的,但是,会有很多问题。
比如:如果还是串口的例子,DMA的目标是DR寄存器地址,源地址放外设,就一定要注意,外设什么什么的数据可读,我们不知道,而只要串口发送缓冲区一空,就会开始传输,源地址如果数据不对,那就出问题了。所以,源地址如果在外设上,只要是一个随时都可以读的数,那就没问题,比如定时器的CNT寄存器,那就随时可读。可用来做P2P实验。
有人会问,不是有通道的触发条件在定时器上么?
对,有这样的通道,那就反过来,触发条件在定时器上,只要符合某种条件,就传输,那么,目标会接受吗?外设可不是内存,很多时候是不允许写入数据的。
所以,不是DMA不支持外设到外设,而是这种方式实用性不强,原因就是上面所说,同步问题。
|
|