- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Nios II Step By Step 3--Nios II 中的DMA.doc
Nios II Step By Step 3--Nios II 中的DMA
Nios II Step By Step 3--Nios II 中的DMA5 q l/ J, i$ n1 Q; J??P6 b! u! D# v, Y) C8 x) P8 m有了上一讲HAL的基础,我们来关注一下DMA在NIOS 中的实现和编程。DMA是个老问题了,从8086/8088一直到现在,完成不需要CPU参与的数据搬家,源和目标可以是内存也可以是设备,在NIOS II中通过基于HAL编程完成。( ~) Y( h* L0 G$ y) T2 a2 S+ ~??下图是三中基本的DMA传输:$ S: {% w0 K: e) i??R4 j6 U4 t. k
dma_1.jpg (33.42 KB)
2008-1-6 15:25
4 ~ W b4 p6 i9 R9 I 在NIOS II的HAL DMA设备模式中,DMA传输被分为两类:transmit 和 receive。NIOS提供两种设备驱动实现transmit channels和receive channels,transmit channels把缓冲区数据发送到目标设备,receive channels读取设备数据存放到缓冲区。. f) t i- z9 q; u- z7 y( I7 r? ?为了适应大家不同的开发环境,下面我们完成一个相对简单的DMA操作,复制SDRAM内存缓冲区到on_chip_memory中,如果我们在库工程属性中设置了SDRAM为主内存,那么程序中分配的数组缓冲区就在SDRAM中,我们用指针赋值让指针指向on_chip_memory。这个操作完全可以在程序中用memcpy来实现,我们趋简就繁,就是为了尝试一下DMAJ。, c+ Y) o/ F( g? ?首先我们在SOPC Builder中增加一个名字为dma_0的DMA设备。两个表单设置都选默认。% o9 g: O! _ d3 C??S! G+ j. t6 S
dma_2.jpg (31.58 KB)
2008-1-6 15:25
??}% Z; ^# r2 T0 {) K9 @/ W* P 第二步,DMA设备有三个PORT,两个MASTER PORT:read_master、write_master,一个SLAVE PORT:control_port_slave。需要在SOPC BUILDER中设置AVALONE交换总线,设置read_master和sdram连接,write_master和on_chip_memory连接,具体见下图(交叉点为黑色)。; f3 C5 j x/ ? K a( r* M
dma_3.jpg (168.1 KB)
2008-1-6 15:25
+ [ D8 k* J2 M0 [ S! lFPGA设计网论坛 P8 J P6 K) E t# z??}. ]在sopc builder中生成系统,并在Quartus II中编译下载,硬件部分就OK了。如果你的DMA操作不是内存到内存的,而是内存到设备,或者设备到内存,那么你需要在上面这一步中加以设置,设备只支持读写,是CPU读写还是DMA读写设备不加以区分。 H( L6 {3 v2 l) x在程序中,我们要使用DMA必须包含:sys/alt_dma.h。% D* H. @/ v7 v N因为是内存DMA操作,所以我们必须实现transmit channels和receive channels,这在NIOS II中就是打开两个设备。在NIOS II IDE中生成一个以Hello World为模板的memory_dma工程项目修改一下程序如下:9 S1 Q5 r% r0 w#include stdio.h/ X) u/ m% L$ K R4 Q. v#include stdlib.h8 K- `5 Q7 A( z( G+ b7 Z#include sys/alt_dma.h7 o6 Z5 m L/ ` t2 o#include system.h# ~0 C) ]% D# a3 H) T* R??m% h, Ustatic volatile int rx_done = 0;FPGA设计网论坛; c5 k j J# F5 b9 ]* e5 W, D??Z N/*FPGA设计网论坛+ z7 W* ~+ x0 h1 P) B9 n/ B4 W*? ?Callback function that obtains notification that the data has$ B. D7 P7 y1 O$ ?) C. nFPGA设计网论坛*? ?been received.+ ]2 Z6 n+ A/ |/ [2 n*
文档评论(0)