接收数据为例;
1.这个比较简单,应该是先配置好DMA,然后配置好接收外设,并使能外设DMA;
外设单元发送请求,DMA单元应答,解除外设请求(清外设请求标志位),然后从外设传数据到DMA;
2.发送方也是这样顺序,要知道是外设方会发请求,然后DMA一方被动回应请求,并产生读写动作;
我说的对不对?
发送数据:
我理解为,正常情况下我们手动写入一数据到发送寄存器就完成任务了;当然心细的还知道先检测一下标志位;
但DMA什么时候会知道自己要写入一个数据到发送寄存器呢?
这个任务让外设发送方先动作,外设方知道发送寄存器为空,就会主动去通知DMA,
DMA接到通知后,会说,我现在有空处理,你先把请求标志位拆掉,我就发送数据过来;
接下来,一个解除请求;另一个如约送数据过来;
如果外设收到数据后,立即把数据发送到移位寄存器,此时数据寄存器又空了,又会出现数据空标志;
只要出现数据寄存器为空,就会请求DMA给个数据;
DMA发送N个数据后,自己的标志位也出现了(任务完成,完成一半....);你可以自己检测这个标志,也可以在中断中去检测并处理;
象SPI一收一发的情况下,主控方先设好接收再设发送通道;
前面的初始化工作全部完成,最后就几个使能操作;
|