1. NIOS2 DMA控制器结构框图

与其它IP外设一样,DMA控制器也是通过AVALON MM总线,实现寄存器配置,数据读写功能。

2. NIOS2 DMA三种传输方式

3. NIOS2 DMA API函数

NIOS2 DMA的API函数原型都定义在alt_dma.h头文件中,常用的API函数如下:

alt_dma_txchan alt_dma_txchan_open (const char* name);
static ALT_INLINE int alt_dma_txchan_send (alt_dma_txchan dma, const void* from, alt_u32 length,alt_txchan_done* done, void* handle)
{return dma ? dma->dma_send (dma, from, length,done, handle) : -ENODEV;
}
static ALT_INLINE int alt_dma_txchan_ioctl (alt_dma_txchan dma, int            req, void*          arg)
{return dma ? dma->ioctl (dma, req, arg) : -ENODEV;
}
alt_dma_rxchan alt_dma_rxchan_open (const char* dev);
static ALT_INLINE int alt_dma_rxchan_prepare (alt_dma_rxchan   dma, void*            data,alt_u32          len,alt_rxchan_done* done,  void*            handle)
{return dma ? dma->prepare (dma, data, len, done, handle) : -ENODEV;
}
static ALT_INLINE int alt_dma_rxchan_ioctl (alt_dma_rxchan dma, int            req, void*          arg)
{return dma ? dma->ioctl (dma, req, arg) : -ENODEV;
}

4. 参考设计——OnchipMenmory to SDRAM

1) Qsys设置

NIOS2代码运行在SDRAM中,OnchipMemory作为一个片上存储外设。

下面两个图是QSYS中的IP设置,图中可以看出DMA支持BURST读写模式,这样效率会大大提高。

在第二张图片中,博主勾选了show signals选项,可以看到,DMA组件定义的信号接口,有一个AVALON MM SLAVE端口,用于配制寄存器,两个AVALON MM MASTER分别实现读写功能,还有一个IRQ中断输出,向CPU产生中断信号。

2)软件源码

//file name:    main.c
//date:     2016.8.15
//author:   shugen.yin
//function: DMA, onchip memory to sdram/ddr2
//log:#include <stdio.h>
#include <string.h>
#include <sys/alt_irq.h>
#include "system.h"
#include "alt_types.h"
#include "sys/alt_dma.h"#define DAT_LEN 32unsigned int buffer0[DAT_LEN/4];
unsigned int *point=ONCHIP_MEMORY1_0_BASE;static void DMA_Init(void); //初始化DMA
unsigned int dma_end_flag = 0;alt_dma_txchan tx;
alt_dma_rxchan rx;void dma_done()
{dma_end_flag++;
}static void DMA_Init(void)
{tx = alt_dma_txchan_open("/dev/dma_0");if(tx != NULL){printf("DMA transition start\n");}alt_dma_txchan_ioctl(tx,ALT_DMA_SET_MODE_32,NULL);//point是源地址、传输数据块长度是DAT_LENalt_dma_txchan_send(tx, point, DAT_LEN, NULL, NULL);rx = alt_dma_rxchan_open("/dev/dma_0");alt_dma_rxchan_ioctl(rx,ALT_DMA_SET_MODE_32,NULL);//buffer0是目标地址、传输数据块长度是DAT_LEN、dma_done()是DMA完成后被调用的回调函数alt_dma_rxchan_prepare(rx, buffer0 , DAT_LEN, dma_done, NULL);
}int main()
{int i;for(i=0;i<DAT_LEN/4;i++)buffer0[i] = 0;for(i=0;i<DAT_LEN/4;i++)*(point+i) = i+1;//初始化DMADMA_Init();//等待中断结束,说明传输完成while(dma_end_flag == 0){}//打印接收地址的数据for(i=0;i<DAT_LEN/4;i++){printf("buffer0[%d]=%d\t",i,buffer0[i]);}alt_dma_txchan_close(tx);alt_dma_rxchan_close(rx);return 0;
}




转载于:https://blog.51cto.com/shugenyin/1839585

NIOS2随笔——DMA(1)相关推荐

  1. NIOS2随笔——BMP解码与VGA显示

    1. 系统概述 本设计采用NIOS2 32位处理器,通过SPI接口将SD/TF卡中的BMP图片数据读取到内存中,SD/TF卡的文件系统为FAT32,NIOS2软件实现BMP解码后,启动framerea ...

  2. NIOS2随笔——uCOS-II实时操作系统

    1. 概述 本设计采用NIOS2 32位处理器,实现uCOS-II实时操作系统的使用,实现两个任务同时运行,一个LED闪烁,一个串口打印.硬件平台采用ETree的开发板(某宝提供),如下图所示: 2. ...

  3. NIOS2 DMA 传输模式

    http://blog.ednchina.com/chactor/185802/message.aspx Nios II中的DMA传输有以下三种形式: 1. 存储器到存储器 这种情况下需要同时打开发送 ...

  4. 【程序】Altera FPGA NIOS实现Scatter-Gather DMA(SGDMA)收发回环测试,描述符和缓冲区全部放在同一块SDRAM里面

    Quartus II 13.0工程下载地址:https://pan.baidu.com/s/1qjkqhd7-1IKNWZUaiZVW7Q(提取码:64wu) [开发板] 开发板型号:小梅哥AC620 ...

  5. Verilog自制NIOS2外设,Avalon总线上的HelloWorld

    虚无的目录 嘿嘿嘿,开新坑 这个时候有个CPU来测试就太好了 总线 这次只用到下面几个必要的信号 接下来干什么 自制外设的代码 Qsys配置新组件 连接到Nios内核 配置顶层连接 来吧,eclips ...

  6. 基于uFUN开发板的心率计(一)DMA方式获取传感器数据

    前言 从3月8号收到板子,到今天算起来,uFUN到手也有两周的时间了,最近利用下班后的时间,做了个心率计,从单片机程序到上位机开发,到现在为止完成的差不多了,实现很简单,uFUN开发板外加一个Puls ...

  7. linux dma拷贝数据到用户态,图解:零拷贝Zero-Copy技术大揭秘

    1.前言 像大白这种调包侠,深知不懂底层技术点就如同空中楼阁,再这样下去面阿里p10是没希望了. 想到这里,我开始慌了,所以今天和大家一起学习个底层技术点-零拷贝Zero-Copy. Linux系统中 ...

  8. 单片机I/O控制方式(UART中断和DMA中断的区别)

    目录 1.程序循环检测方式 2.中断驱动方式 3.直接内存访问方式 单片机I/O设备的控制方式主要有三种:程序循环检测.中断驱动和直接内存访问. 1.程序循环检测方式 程序循环检测方式的基本思路是:在 ...

  9. Echo团队Alpha冲刺随笔 - 第九天

    项目冲刺情况 进展 已经进入测试阶段,正在消除系统的bug 问题 通过测试,找出了系统中存在的较多bug...... 体会 测试太重要了,很多原本以为没什么bug,一测就能找到好几个,而且改个bug真 ...

最新文章

  1. C语言字符串大小写转换_只愿与一人十指紧扣_新浪博客
  2. 一文理清Mybatis中resultType与resultMap之间的关系和使用场景
  3. 开机自启动和由一个APK启动另一个APK核心代码
  4. MongoDB数据表基本操作
  5. 演练 网站的导航栏 0920
  6. python爬虫案例——python爬取百度新闻RSS数据
  7. android fragment 抽屉,如何从Fragment Android中禁用或隐藏抽屉布局
  8. java读取excel图表模板,修改选值范围
  9. 网站建设--报刊订阅管理系统(java+html)(课程设计)内置部分代码和截图,资源库中有该资源
  10. 怎么查看网站的域名 如何查询网站的IP地址
  11. 整型转换为32位二进制字符串
  12. 使用亚博智能K210实现人脸特征提取和识别
  13. 前端技术(7) : 省市区联动并设置默认值II
  14. chmod +x 与chmod 777的区别
  15. [Python] 一行代码让你明白什么叫艺术
  16. 以下计算机的分类 不正确,按CPU芯片可分为单片机、单板机、多芯片机和多板机...
  17. 3dmaxobj导出选项_3DMAX怎么导出obj?
  18. a15相当于骁龙多少 A15相当于骁龙什么处理器
  19. 真值 原码 反码 补码
  20. (转)洞房花烛夜新郎坦言不爱新娘 新娘立马回娘家

热门文章

  1. 如何设计Lighthoused定位接收电路
  2. 这个奇葩打字外设火了,一分钟500词比说话还快,直接被打字比赛禁用
  3. 苹果5年来盈利首次未超预期,但大中华区营收暴增83%
  4. AI面试官也太好骗了!用书架图片做视频背景,能提高15%好感度
  5. 怎样的财报让百度市值一夜暴涨400亿?净利逆势大涨219%;李彦宏:将在中国经济的复苏中受益...
  6. 诵经嘴巴机器人入驻蓬皮杜艺术中心,MIT艺术家出品,网友:看到的第一眼我就想歪了...
  7. 大数据教程(10.6)自定义inputFormat(小文件合并)
  8. python的range()和list操作
  9. 浅谈身为小白学习Linux系统的四点实用建议
  10. Redis+keepalived 主从搭建