FPGA nios ii dma使用DMA 传输问题

每个时代都有一群爱“玩”的人,比如瓦特玩出了蒸汽机,……
近年来,以智能手机、智能硬件为代表的电子产品技术飞速……
ADI公司于近日推出了射频设计品牌RadioVerse™。这……
电动汽车逐渐成为一种新型的代步产品,据工信部统计,20……
演讲人:1王伟刚,2、3董桂珍时间: 10:00:00
演讲人:骆彦志时间: 10:00:00
演讲人:罗丽平时间: 10:00:00
预算:¥1,000-¥3,000预算:¥10,000-¥20,000
基于DMA的大批量数据快速传输模块设计
[导读]摘要 针对Altera公司SOPC解决方案中,DMA模块无法直接读/写FPGA外设的情况,提出了基于Avalon总线流传输模式的通用DMA读/写控制模块的设计,设计了两个自定义外设,实现了DMA对FPGA外设的高速数据存取和Nios II与F
摘要 针对Altera公司SOPC解决方案中,DMA模块无法直接读/写FPGA外设的情况,提出了基于Avalon总线流传输模式的通用DMA读/写控制模块的设计,设计了两个自定义外设,实现了DMA对FPGA外设的高速数据存取和Nios II与FPGA大批量数据的快速传输。介绍了Avalon&MM总线规范,阐述了系统架构以及DMA读控制器的设计,测试结果表明,该方法是一种高效可行的解决方案。
关键词 SOPC;Nios II;DMA;Avalon总线
&&& DMA控制器作为SOPC设计中使用频率较高的IP核,可用于存储器或外设间进行批量数据传输,以提高系统数据吞吐量。然而,由于DMA控制器只支持对基于Avalon总线流传输模式的外设进行数据传输操作,对用户自定义外设不予支持。文中提出了一种基于Avalon总线流传输模式的通用DMA接口控制器设计,实现了NiosⅡ与FPGA的大批量数据快速传输,显著提高了系统的数据吞吐量。
1 Avalon&MM总线规范
&&& Avalon总线规范是为开发SOPC环境下外设而设计的,为SOPC设计者描述这些外设的端口提供了基础。Avalon总线有多种传输模式,其中,流传输模式为从端口提供了一种机制,用于控制来自主端口的传输,流传输模式的这些特点使其特别适合于DMA传输。
&&& 流模式从端口传输模式的信号,除了在从端口传输中使用的信号之外,又引入了3个信号:readyfordata、dataavailable和endofpack et。其中,从端口通过设置Readyfordata有效来表示它已经准备好接收来自Avalon总线模块的写传输;使readyfordata无效表示写操作将引起数据上溢;从端口通过设置dataavailable有效来表示它已经能够为来自Avalon总线模块的读传输提供数据,dataavailable无效时读操作将引起数据下溢;在任何传输期间,流模式从端口都可以设置endofpacket信号有效,并通过Avalon总线模式传输给主端口。对于endofpack et信号的解释取决于用户设计,必须明确外设如何响应endofpacket信号的变化。
2 系统结构
&&& 提出的NiosⅡ与外设进行大批量数据传输的结构如图1所示,当NiosⅡ需要从外设读入数据时,外设通过FIFO接口将数据写入DMA读控制模块,然后数据经DMA传输至NiosⅡ,反之,当NiosⅡ输出数据时,数据通过DMA传输至DMA写控制模块,FPGA逻辑通过FIFO接口从这个模块读取数据。DMA读/写控制模块的设计,是为了解决SOPC中DMA模块与FPGA片上FIFO不同接口间的数据传输问题,而在SOPC中,DMA模块使用的是支持流传输模式的Avalon&MM总线。DMA读/写控制模块主要完成两个功能:一是FIFO与DMA主端口之间的数据交互;二是作为一个NiosⅡ的外设,NiosⅡ处理器能够对此外设进行控制并能随时获取该外设的状态信息。
3 DMA读/写控制模块的设计
&&& DMA读/写控制模块作为系统结构的核心,其结构框图如图2所示。此模块包括两个Avalon&MM从端口:一个作为DMA从端口,用于处理DMA对此模块的数据读操作;另一个Avalon&MM从端口是NiosⅡ的控制从端口,用于NiosⅡ处理器对这个模块进行控制并且随时获取此模块的状态信息。模块还包括一个中断请求信号(IRQ),当外设有数据需要读取时,可以使这个信号有效,从而通知NiosⅡ发起DMA读传输。另外,DMA读控制模块中还例化了一片FPGA片上FIFO作为数据上传FIFO,用于系统待上传数据的暂存。使用FIFO可以提高数据传输的吞吐量,同时简化FPGA硬件逻辑的操作,图2中的管道(Conduit)端口就是FPGA硬件逻辑操作FIFO的接口。
&&& 对于与NiosⅡ处理器交互的Avalon&MM从端口,从NiosⅡ处理器的角度看,这个端口是一些寄存器的映射,即NiosⅡ对该模块的操作,是通过对模块内部的寄存器的操作完成的。根据功能需隶,DMA读控制模块中设计了3个寄存器,即状态寄存器status,控制字寄存器control和FIFO中已有数据个数寄存器usedw。
&&& DMA读控制模块的中断请求应当在两种情况下产生:一是此模块的数据源端将FIFO写满且外设中断使能有效;二是此模块的数据源端置数据包结束标志且外设中断使能有效。
&&& 对于DMA从端口,使用的是带流控制信号的Avalon总线,DMA使用流控制信号中的dataavailable以及endofpacket两个总线信号。其中dataavailable表示外设是否准备好读操作,即FIFO是否非空;对于endofpacket信号,设计中使用这个信号来表示模块中数据包的结束,endofpacket信号与最后一个数据同时出现并持续1个时钟周期,DMA检测到endofpacket信号有效后将停止DMA传输。对于管道端口,这是最新的Avalon总线规范定义的接口形式,主要用于外设和外部逻辑进行交互。
&&& DMA读控制模块作为一个用户自定义外设,在将其添加到SOPC Builder外设库后,就可以在SOPCBuilder中调用此外设,图3表示了SOPC Builder中该外设与DMA的连接,图中fifo_control_0即为DMA读控制模块,可以看出,这个外设包含了两个Avalon&MM端口,其中一个连接至DMA控制器模块dma_0,而且SOPC Builder为这个外设分配了基地址和中断优先级。
4 测试验证
&&& DMA读控制模块测试时,FPGA内部产生数据源并通过外设管道接口把数据写入FIFO,外设中断时,DMA读取外设中的数据。测试时使用QuartusⅡ自带的SignalTapⅡ嵌入式逻辑分析仪进行测试,观察相应信号的波形。本测试的触发条件为signaltap_read上升沿触发,FIFO深度为1 024,FIFO数据宽度为16位,数据源为2~513共512个计数值,在Nios II的软件中读取600个数据,测试结果如图4所示。
&&& 图4对应3幅图像,图4(a)表示DMA读取外设的测试数据的全局视图,后面两幅为局部放大结果,其中图4(b)是测试数据的开始段,图4(c)是测试数据的结束段。如图4(b)所示,在第一个时钟周期,DMA的读信号有效,在之后的第二个时钟周期,FIFO的数据总线出现数据2,之后是3,4,&,从图4(c)可以看出,最后一个数据是513,且DMA读取外设512个数据,只花费了约776个时钟周期,这充分显示了DMA高速的数据传输能力。
&&& 对于调试模式下Nios II IDE的输出结果,如图5所示。由于测试数据太长,这里只给出测试数据的首部及尾部。图5(a)为测试数据的首部,使用printf()函数输出,第一个数据为2,接着是2,3,&,从图5(b)可看出最后一个有效数据是513,从512起的数据为0,这是数组的初始值,这与图4相对应。
&&& DMA写控制模块测试时,置FIFO数据宽度为16,NiosⅡ控制端口数据总线宽度为16,FIFO深度为2 048,在NiosⅡ软件中设置一个长度为2 048的数组,数组数据宽度为16位,初始化时把数据赋值为1~2 048的计数值,然后发起DMA写传输,把数据写入到DMA写控制模块中,在FPGA再用硬件语言读此外设中FIFO数据并在SignalTapⅡ中显示,其测试结果如图6所示。
&&& 图6中,fifo_rd表示FPGA中硬件逻辑读取DMA写控制模块的读信号,fifo_readdata是外设中FIFO的数据总线信号,sigtap_test信号连接至外设中FIFO满、FIFO空以及waitrequest信号(LSB),图6(a)表示了外部逻辑读取外设中FIFO的数据起始段,在读信号有效之前,sigtap_ test[2]信号是高电平,表示FIFO满,sigtap_test[0]为高,表示外设此刻不能响应DMA写入的数据,然后FPGA外部逻辑在检测到FIFO满后开始读取数据,在下一个时钟周期,FIFO数据总线上出现有效数据。图6(b)是读取FIFO时数据的结束段,最后一个数据为2 048,读取后,sig tap_test[1]为高电平,表示数据读空,这与NiesⅡ中软件写入DMA从而写入DMA写控制模块的数据是一致的,由此验证了模块设计的正确性。
&&& 设计方案稳定可靠、传输速度高,具有一定的通用性,能满足NiosⅡ与外设之间的大批量数据传输,具有广泛的应用前景,同时,使用了FIFO作为缓存,进一步提高了数据吞吐量,具有较强的实用价值。
给大家一个参考,如果在中关村起步创业,你大概要花费的一个起步成本,心里有个数。同时,这些成本配置也能让第一次创业的朋友在开始办公司的激动心情中,快速了解你需要配置什么东西,然后一项项去跑、去办就 OK 了。
......关键字:
从流传的PPT上可以看出,即便没有全国层面上的关闭,部分省市也会分批关停。......关键字:
说到数据存储,大家可能会想到传统的光盘和磁盘,不过这种方式时间长了就有些不靠谱。眼下,微软有个雄心勃勃的计划,它们想把数据存储在DNA中。
......关键字:
如何才能打造一个成功的Google团队?谷歌黑板报今日撰文对此进行了分析。Google人力运营团队试图去用数据和严谨的分析来找出答案。他们用了两年多的时间分析研究了180多个Google活跃团队中的250多个特性。之后,他们曾......关键字:
“这一根线就赚了500多万,不过钱都到了‘华强北’的口袋。”......关键字:
我 要 评 论
热门关键词EP4CE30 Cyclone IV
USB2.0/VGA/SD视频采集开发系统
零售价(790元)
高速AD/DA VER2.0扩展板+EP4CE30
VER2.0核心板+USB2.0/SD/VGA扩展板组合照片
Cyclone IV EP4CE30
USB2.0/VGA/SD 视频开发系统组合照片
部分实验效果展示
实时视频采集实验效果图(OV7670采集到TFT2.8英寸触摸屏显示)
OV7670采集图像到VGA显示输出视频展示
触摸屏写字板控制实验
/v_show/id_XNjM3MTU4Njk2.html
摄像头采集图像通过USB2.0接口传输到PC端实时显示(灰度和彩色)
摄像头采集图像并经过FPGA进行边缘检测处理以后通过USB2.0接口传输到PC端
边缘检测视频展示
/v_show/id_XNzE4NzIxMzk2.html
OV7670摄像头采集图像到7英寸TFT屏显示效果(选配)
OV7725摄像头采集到7英寸屏显示视频展示(EP4CE30 VER2.0核心板)
/v_show/id_XNzIxOTE4MjA4.html
摄像头采集到7英寸TFT屏显示实验(VERILOG代码)
(搭载NET+TFT7INCH+USB扩展板)
&1. 系统结构图
2. EP4CE30 VER2.0 FPGA核心板结构布局图
3.FPGA核心板资源
HSEP4CE30 VER2.0 CycloneIV FPGA核心板资源
EP4CE30F23C7N(FBGA484封装),Speed Grade 8,Logic
Elements 28848,Memory Bits 608256,Embedded
Multipliers 132,Global Clocks 20,I/O 533,PLLs 4
高速6层PCB布线,资深工程师手工布线,并进行EMC仿真分析,从而保证系统高速运行。
标配EPCS64(64Mbit),选配EPCS128(128Mbit),烧写固件或NIOS程序以及用户数据。
标准配置一片256K×16Bit SRAM
(4Mbit),独立地址数据总线方便使用,可选配512K x
16bit(8Mbit),高速静态SRAM 10ns读写。
一片16M×16Bit SDRAM
,最高143MHz读写速度 256Mb,超大容量,我们已经预留了扩展I/O,可以直接扩展到32M
X 16bit SDRAM (64M byte). 独立数据地址总线。
AM290LV128 16M
byte(128Mbit)大容量,存储用户数据和NIOS程序,独立数据地址总线控制
2个源时钟50M,20M方便用户使用和分频处理,用户可以自行更换其他频率
一个标准LCD1602液晶接口,NIOS
IP核直接支持。独立I/0,也可以做用户I/O
带上拉电位,用户按键输入。
标准RS232接口,MAX232芯片接口转换
5V,3.3V/3A,1.2V/800MA,2.5V/800MA,独立引出方便用户使用和测试
在线调试FPGA,NIOS读写FLASH,固化用户程序和固件
EPCS串行FLASH编程烧写
系统主复位
系统复位按键,带上拉。也可以做为用户按键输入。
(J6)38+(J7)38+(J10)26+(J4)11+(J3)44=157个(引出独立I/O)
4. USB2.0/SD/VGA扩展板结构布局图
&4.1USB2.0 /VGA/SD扩展板资源:
板上载有独立的电源模块,可以稳定提供运行时的电源,避免使用FPGA下载板电源造成干扰和不稳定.可以通过核心板对扩展板进行供电,也可以通过USB端口供电,也可以通过外部电源供电。并有独立的电源开关,方便用户使用。
采用12bit电阻网络构成DAC视频输出,可以产生4096色VGA图像输出.提供对应的4096色VGA输出控制源码。
USB芯片:CY7C68013A-56,USB2.0单片机芯片。集成了USB2.0
传输技术,速度达到480Mb/S&,USB2.0有独立的复位按键,EEPROM可以通过跳线选择单独擦除,避免误烧程序造成不能重新烧写麻烦。
8位上拉拨码开关,满足大多数实验和应用需求。
SD卡座,并提供对应的SD卡的FAT和FAT32读写测试源码。
PS2端口。提供对应的PS键盘读写程序。
红外接收头
,可以通过红外遥控提供远程控制,或提供其它额外按键功能。
5V长声蜂鸣器,提供音乐演奏源码。
2个40针的扩展口,可以插我们提供的其他扩展板,比如TFT
LCD屏和数字模拟摄像头的扩展等。
5.CMOS摄像头模块(OV7670)
CAMERACHIPTM图像传感器,体积小、工作电压低,提供单片VGA摄像和影像处理器的所有功能。通过SCCB
总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率8位影响数据。该产品VGA图像最高达到30帧/秒。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡、饱和度、色度等都可以通过SCCB接口编程。OmmiVision
图像传感器应用独有的传感器技术,通过减少或消除光学或电子缺陷如固定图案噪声、托尾、浮散等,提高图像质量,得到清晰的稳定的彩色图像。
6.TFT2.8英寸触摸屏
板上包括有触摸屏控制芯片。
接口类型:
2X20PIN 2.54MM间距接口双排针。 2X30PIN
2.0MM间距接口双排DC3座。
5V电源输入接口2.54MM间距接口。
触摸屏控制芯片:ADS7843
LCD:尺寸:2.8英寸,分辨率:320*240 65K色
输入电压:5V
连接器: 40PIN 2.54MM, 30PIN 2.0MM
控制器:ILI9325
实验例程和配套教程还在不断增加中,请关注华升EDA网站,开发环境QUARTUS11.0+NIOS
EP4CE30 Cyclone IV USB2.0/VGA/SD视频采集开发系统例程清单
其它EDA控制实验
SOPC (NIOS II)实验
实验例程(VERILOG)
音乐演奏实验
基于GUI图形界面的图像显示分层显示
PS2键盘控制
电子相册SD卡读取图片在TFT屏显示
红外遥控接收
NIOS运行在SRAM实验
开关控制LED数码管
OV7670采集到TFT屏显示(并行FLASH)
LCD1602显示(VHDL)
OV7670采集到TFT屏显示(串行FLASH)
SRAM读写测试
OV7670采集图像到TFT显示并存储BMP图像格式到SD卡
基于NIOS的TFT2.8英寸屏显示
基于NIOS的核心板全检测试验(LCD1602,SRAM,SDRAM,FLASH,按键,LED,RS232)
触摸屏画板实验(触摸屏测试)
VGA显示控制实验
USB传输图像到PC端采集显示实验
实验例程(VERILOG)
实验例程(VERILOG)
VGA 640*480@60Hz
灰度图像的均值滤波算法
灰度图像的中值滤波算法
VGA字符显示实验
灰度图像的中值滤波算法
基于SDRAM的VGA显示
灰度图像的中值滤波腐蚀运算膨胀运算算法
OV7670采集输出到VGA显示
灰度图像的边缘检测算法
OV7725采集输出到VGA显示
灰度图像的腐蚀运算算法
VGA的彩色条纹显示
灰度图像的腐蚀运算膨胀运算&
OV7670+68013的USB视频显示(彩色)
RGB888 转 Gray 灰度算法实现
YCbCr422 转 Gyay 灰度算法实现
USB扩展板实验
实验例程(VERILOG)
CY7C68013传输速度测试
SPI与68013SLVAEFIFO的FPGA接口程序
USB数据传输测试(FIFO)
擦除68013固件EEPROM数据
同步传输测试程序
正弦数据传输测试
EP4CE30 SOPC核心板配套例程清单(附送)
(这部分代码要配合本公司的使用,如有需要可以选配
,建议初学者选配EDA6.1主板)
SOPC (NIOS II)实验
实验例程(VERILOG)
实验例程(C)
3/8 译码器
分频器(VERILOG)
LED流水灯实验
BCD 七段显示译码器实验
4X4矩阵键盘实验
串口通信实验
6分配实验(VHDL)
RTC控制实验
四位加法器
IIC EEPROM读写实验
多路选择器
十六进制BCD译码器
网络通信实验
简易频率计
系统时钟实验
定时器实验
并口转串口简易控制器
PS2键盘实验
异步清零加法计数器
移位运算器
SDRAM读写实验
串行FLASH读写实验
12864(ST7565)液晶显示实验
流水灯实验
LCD1602显示实验
RS-232 串口控制器
USB通信实验
LCD1602液晶驱动显示实验
U盘读写实验
VGA 控制输出实验
SD卡读写控制实验
在VGA显示器上显示字母和图像
AVALON IP核实验
PS/2 键盘控制器实验
数码管显示实验
接口互连实验
LCD2864(ST7920)显示实验
音乐演奏实验
NIOS固化到串行FLASH实验(EPCS)
红外遥控实验
NIOS固化到并行FLASH实验(AM29LV128)
步进电机控制实验
系统全检测实验
直流电机速度控制和闭环测速实验(PWM)
LCD12864动画显示实验(ST7565P)
DS1302实验
LCD12864汉字中文显示实验(VERILOG)
LCD12864汉字中文显示实验(VHDL)
配套光盘资料
附送开发资料和相关例程详细内容下载
五.视频采集TFT触摸屏控制显示说明
1.视频采集实验例程(基于NIOS+VERILOG):
视频采集回放程序结构图
六发货清单
(标准配置)
标准配置发货清单
EP4CE30 VER2.0核心板一块
USB2.0 VGA SD扩展板一块
高品质USB2.0纯铜线一根USB通讯供电用
RS232通讯线一条
30W像素摄像头模块一个
TFT2.8英寸触摸屏模块一个
USB BLASTER Ver.C下载线
6角铜柱4个
5V/1A开关电源
DVD资料光盘2张
可选配件以及扩展板 (更多扩展板将陆续推出,让您轻松应对各种应用和设计要求)
超多扩展板和扩展模块,谁与争霸!!!
请您直接点击对应模块就可以打开各扩展模块链接!
.EP4CE30 FPGA V2.0核心板 一块
USB2.0 VGA/SD卡 扩展板 一块
&2.8英寸TFT 触摸屏模块 一个
&30万像素摄像数字头模块(OV7670)& 一个
&USB2.0优质纯铜线 一条
&RS232通讯线&& 一条
&USB blaster VER.C下载线 一条;(如果换
原厂方案版加 50元)
&5V/1A开关电源 一个
&资料光盘&&&&DVD光盘 2张
七.可选配件
2.8英寸TFT 触摸屏VER4.0 110(元)
(原件180元)
USB BLASTER下载线(ALTERA原厂方案) 70元 (原件90元)
音频视频采集开发板VIDEO3.1 350元
音频采集SD/CF卡扩展板 150元
LCD12864液晶(带中文字库) 65元
EDA4.1主板 200(元)
EDA5.1主板 800(元)
200 (元)
EDA7.0底板 260(元)
90(元) (原件130元)第1章 概述_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
第1章 概述
上传于||暂无简介
大小:1.52MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢博客访问: 545182
博文数量: 195
博客积分: 4048
博客等级:
技术积分: 2487
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 嵌入式
关于DMA传输的实验。
&&& 在系统运行时,当需要传输大量数据时,可以采用DMA的方式进行传输,以解脱出CPU来处理其他命令。
打开DMA时一般同时设定其传输位数://打开发送通道&&& tx1 = alt_dma_txchan_open("/dev/dma_0"); &&& alt_dma_txchan_ioctl(tx1, ALT_DMA_SET_MODE_32,NULL);//打开接收通道 &&& rx1 = alt_dma_rxchan_open("/dev/dma_2"); &&& alt_dma_rxchan_ioctl(rx1, ALT_DMA_SET_MODE_32,NULL);nios总线address是按32位编址的,对32位以内的寻址由4位的byteenable来决定,每位表示32位中1字节。
&&&&&& Nios II中的DMA传输有以下三种形式:
1、 存储器到存储器
这种情况下需要同时打开发送通道和接收通道,而且源地址和目标地址都是自增的。
//打开发送通道
tx = alt_dma_txchan_open("/dev/dma_0");
//tx_buf是源地址、传输数据块长度是length字节
dma_res = alt_dma_txchan_send(tx, tx_buf, length, NULL, NULL);
//打开接收通道
rx = alt_dma_rxchan_open("/dev/dma_0");
//rx_buf是目标地址、传输数据块长度是length、dma_done()是DMA完成后被调用的回调函数,handle为其void *类型的参数。
dma_res = alt_dma_rxchan_prepare(rx, rx_buf, length, dma_done, handle);&
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, length, 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, length, dma_done, NULL); // rx_buf是目标地址
其中通过alt_dma_txchan_ioctl,alt_dma_rxchan_ioctl还可以设置每次发送和接收的字节数。
以下是基于DMA通过UART发送和接收数据的例子,注意DMA_0
为接受通道,DMA_1为发送通道。当然可以将dma的read_master和writer_master同时连在uart_0和sdram_0的从端
口上,这样是可以用一个dma对两者读写操作,但是不能同时做双向传输。
#include #include #include "system.h"#include "sys/alt_dma.h"#include "unistd.h"
int main(void){/*&&& alt_dma_&&& //创建DMA接收信道&&& rx = alt_dma_rxchan_open("/dev/dma_0");&&& //当信道创建成功&&& if(rx != NULL)&&& {&&&&&&& printf("Dma transition start.");&&&&&&& while(1)&&&&&&& {&&&&&&&&&&& //设置DMA传输的数据位宽 本例中为8位&&&&&&&&&&& alt_dma_rxchan_ioctl(rx,ALT_DMA_SET_MODE_8,NULL);&&&&&&&&&&& //指定从uart接收数据&&&&&&&&&&& alt_dma_rxchan_ioctl(rx,ALT_DMA_RX_ONLY_ON,(void*)UART_0_BASE);&&&&&&&&&&& &&&&&&&&&&& //提交DMA接收请求 指定接收数据的位置(sdram)以及传输数据量&&&&&&&&&&& if(alt_dma_rxchan_prepare(rx, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SDRAM_0_BASE, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 1024, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NULL, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NULL) < 0)&&&&&&&&&&& {&&&&&&&&&&&&&&& printf ("Error: failed to post receive request\n");&&&&&&&&&&& }&&&&&&&&&&& //关闭DMA接收信道&&&&&&&&&&& alt_dma_rxchan_close(rx);&&&&&&&&&&& usleep(1000000);&&&&&&& }&&& }&&& && */&&& alt_dma_txchan&&&& tx = alt_dma_txchan_open("/dev/dma_1");&&&& if(tx != NULL)&&& {&&&&&&& printf("Dma transition start.");&&& while(1)&&&&&&& {&&& &&&&&&&&&&& alt_dma_txchan_ioctl(tx,ALT_DMA_SET_MODE_8,NULL);&&&&&&&&&&& alt_dma_txchan_ioctl(tx,ALT_DMA_TX_ONLY_ON,(void*)(UART_0_BASE+2));
&&&&&&&&&&//注意是UART_0_BASE+2,因为UART的txdata寄存器在rxdata之后,偏移量为一个rxdata的长度(16位,2个字节)&&&&&&&&&&&&&&& if(alt_dma_txchan_send(tx, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& SDRAM_0_BASE, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 1024, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& NULL, &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (void*) NULL) < 0)&&&&&&&&&&& {&&&&&&&&&&&&&&& printf ("Error: failed to post transmit request\n");&&&&&&&&&&& }&&&&&&&&&&& //关闭DMA发送信道&&&&&&&&&&& alt_dma_txchan_close(tx);&&&&&&&&&&& usleep(1000000);&&&&&&& }&&& }&&& return 0;}
阅读(2420) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。FPGA48人关注
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA资料下载
FPGADIY创意
关注此标签的用户(48人)
Copyright &
.All Rights Reserved}

我要回帖

更多关于 fpga nios ii 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信