看晕了
其实你可以把DMA看成是一个功能单一的CPU(传输数据),所以它不会占用cpu资源,而是占用总线资源.
基本原理是,dma传输时,会向cpu申请总线,如果有空,得到总线开始传输,这时cpu不一定是啥都不干的,它可以译码,执行等等,当它需要使用总线时只好等待上次dma完成(这时cpu才是挂着的)
那么dma传输对cpu到底有多大影响呢,这个要看dma的模式了
一般我们用的都是,dma每个读写周期完(就是每传输完一个字节/半字/字),cpu都有机会得到总线,所以这种情况下,dma会使cpu慢一点,慢多少很难说,一般不大.这就显示了dma的优点,充分利用总线资源
还有一种dma模式,它会在整个传输过程中占用总线,这种模式下,cpu是挂着的(我猜突发传输是不是这种模式,哪位高手解答下)
还有一种称为on_the_fly的dma模式,它在传输数据时只需要一个周期就能完成读和写,这个明显比cpu快了一倍 |