niosii spi 外部_基于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、外设到存储器

这种情况下只要打开接收通

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值