- 论坛徽章:
- 0
|
今天看了DMA的知识,一直没搞明白,数据是怎么从内存传输到外设的,或者从外设传输到内存的。
DMA控制器8237只设置了一个DMA缓冲区的首地址与长度,然后就开启了DMA。网上能查到的最多的一段代码就是:
flags = claim_dma_lock();
disable_dma(chan);
clear_dma_ff(chan);
set_dma_mode(chan, DMA_MODE_WRITE);
set_dma_addr(chan, virt_to_bus(page));
set_dma_count(chan, 32);
enable_dma(chan);
release_dma_lock(flags);
那我想问题,那数据传送到哪个外设去了呢?
这里只设置了一个DMA写缓冲地址,那目的地址呢?数据被传送到哪去了?哪个设备接受数据?
要有两个地址才能传输的吧?只有一个地址,怎么传输数据啊?具体是怎么工作的?
数据传输,总待有个源地址与目的地址吧?这里怎么传输?
在PC机上做实验,内存到内存之间,用DMA传输数据?
flags = claim_dma_lock();
disable_dma(0);
clear_dma_ff(0);
set_dma_mode(0, DMA_MODE_WRITE);
set_dma_addr(0, virt_to_bus(page0));
set_dma_count(0, 32);
enable_dma(0);
release_dma_lock(flags);
//////////////////////////////////////////
flags = claim_dma_lock();
disable_dma(1);
clear_dma_ff(1);
set_dma_mode(1, DMA_MODE_WRITE);
set_dma_addr(1, virt_to_bus(page1));
set_dma_count(1, 32);
enable_dma(1);
release_dma_lock(flags);
这样能将缓冲区page0的数据传送到缓冲区page1中吗?不然,怎么传送?帮忙看看啊?
|
|