网站建站多少钱,建筑设计人才招聘网站,免费搭网站,全铝家居全屋定制十大名牌最近练了一段时间的DMA传输#xff0c;现做如下的总结#xff0c;分享自己获得心得以及遇到的一些问题。在系统运行时#xff0c;当需要传输大量数据时#xff0c;可以采用DMA的方式进行传输#xff0c;以解脱出CPU来处理其他命令。Nios II中的DMA传输有以下三种形式…最近练了一段时间的DMA传输现做如下的总结分享自己获得心得以及遇到的一些问题。在系统运行时当需要传输大量数据时可以采用DMA的方式进行传输以解脱出CPU来处理其他命令。Nios II中的DMA传输有以下三种形式1、存储器到存储器这种情况下需要同时打开发送通道和接收通道而且源地址和目标地址都是自增的。tx alt_dma_txchan_open(/dev/dma_0);//打开发送通道dma_res alt_dma_txchan_send(tx, tx_buf, 32, NULL, NULL); // tx_buf 是源地址rx alt_dma_rxchan_open(/dev/dma_0);//打开接收通道dma_res alt_dma_rxchan_prepare(rx, rx_buf, 32, dma_done, NULL); // rx_buf是目标地址dma_done()是DMA完成后被调用的回调函数。2、存储器到外设这种情况下只要打开发送通道而且源地址是自增的目标地址是固定的。tx alt_dma_txchan_open(/dev/dma_0); // 打开发送通道alt_dma_txchan_ioctl(tx, ALT_DMA_TX_ONLY_ON, (void *)dst_addr); // dst_addr是目标地址dma_res alt_dma_txchan_send(tx, tx_buf, 32, dma_done, NULL); // tx_buf是源地址3、外设到存储器这种情况下只要打开接收通道而且源地址是固定的目标地址是自增的。rx alt_dma_rxchan_open(/dev/dma_0); // 打开接收通道alt_dma_rxchan_ioctl(rx, ALT_DMA_RX_ONLY_ON, (void *)source_addr); // source_addr是源地址dma_res alt_dma_rxchan_prepare(rx, rx_buf, 32, dma_done, NULL); // rx_buf是目标地址其中通过alt_dma_txchan_ioctlalt_dma_rxchan_ioctl还可以设置每次发送和接收的字节数。下面给出两个实例说明DMA传输的过程。1、存储器到存储器下面程序为SDRAM到onchip-memory的数据传输。硬件连接图示