2022DMA传输小结_dma传输方式.docx

上传人:l*** 文档编号:7634137 上传时间:2022-02-28 格式:DOCX 页数:8 大小:33.40KB
返回 下载 相关 举报
2022DMA传输小结_dma传输方式.docx_第1页
第1页 / 共8页
2022DMA传输小结_dma传输方式.docx_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《2022DMA传输小结_dma传输方式.docx》由会员分享,可在线阅读,更多相关《2022DMA传输小结_dma传输方式.docx(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、2022DMA传输小结_dma传输方式 DMA传输小结由我整理,希望给你工作、学习、生活带来便利,猜你可能喜爱“dma传输方式”。 关于DMA传输的几点说明: 1 memory 到 外设的传输,调用alt_dma_txchan_ioctl()时,有一个参数为alt_dma_tx_only_on等 2调用alt_dma_txchan_send函数时,在传输结束前就返回一个值,假如此值为负的话,说明发送恳求失败。正确传输结束后,调用done函数。 3 接收函数alt_dma_rxthan_prepare类似上面的1和2 4传输结束,有两种可能:数据传完或者end of packet(要预先使能)

2、5 Sopc builder中例化时要制定哪些可以访问DMA的主端口,DMA的avalon slave端口要接cpu。实际传输的最大数可以帮助确定设置的位数 6 alt_dma_txchan_ioctl用于限制dma的一些工作性质,运用多的话可以用信号量等来“抢占” 7dma传输最小应当传4字或者其倍数。 两图是地址为什么加4的缘由(每个寄存器32位,偏移为1时,地址应当加4) 内存到串口的DMA传输程序! (运用的是HAL API函数,用IOWR灯访问reg调整参数也可以) #include system.h #include #include #include altera_avalon_

3、pio_regs.h #include altera_avalon_uart_regs.h #include altera_avalon_timer_regs.h #include altera_avalon_dma_regs.h #include alt_types.h #include sys/alt_irq.h #include sys/alt_dma.h static volatile int rx_done = 0;/两种试验,数组和字符串 volatile static alt_u8 chr20 = 1,2,3,4,6,5,7,8,9,10,11,12,13,14,15,16,17

4、,18,19,20 ; /发送字符volatile static char *chr =asdfghjkloiuytrewqzx ; static void done (void* handle, void* data)/DMA传输结束调用函数 rx_done+; main() int rc,cwg; alt_dma_txchan txchan; if (txchan = alt_dma_txchan_open(/dev/dma) = NULL) printf (Failed to open transmit channeln); exit (1); cwg = alt_dma_txchan_

5、ioctl(txchan,ALT_DMA_SET_MODE_8 ,NULL); cwg = alt_dma_txchan_ioctl(txchan,ALT_DMA_TX_ONLY_OFF,NULL);/ cwg = alt_dma_txchan_ioctl(txchan,ALT_DMA_RX_ONLY_OFF,NULL); cwg = alt_dma_txchan_ioctl(txchan,ALT_DMA_TX_ONLY_ON,UART1_BASE + 4); / ALT_DMA_TX_ONLY_ON代表运用流模式,UART1_BASE + 4是要写的地址(寄存器偏移为1时,+4) if (r

6、c = alt_dma_txchan_send (txchan, chr , 20, done, NULL) /* Wait for transfer to complete */ while (!rx_done); printf(%d,rx_done); rx_done = 0; 程序二,memory to memory的程序如下: 在NIOS II的HAL DMA设备模式中,DMA传输被分为两类:transmit 和 receive。NIOS供应两种设备驱动实现transmit channels和receive channels,transmit channels把缓冲区数据发送到目标设备

7、,receive channels读取设备数据存放到缓冲区。 为了适应大家不同的开发环境,下面我们完成一个相对简洁的DMA操作,复制SDRAM内存缓冲区到on_chip_memory中,假如我们在库工程属性中设置了SDRAM为主内存,那么程序中安排的数组缓冲区就在SDRAM中,我们用指针赋值让指针指向on_chip_memory。这个操作完全可以在程序中用memcpy来实现,我们趋简就繁,就是为了尝试一下DMAJ。 首先我们在SOPC Builder中增加一个名字为dma_0的DMA设备。两个表单设置都选默认。 其次步,DMA设备有三个PORT,两个MASTER PORT:read_maste

8、r、write_master,一个SLAVE PORT:control_port_slave。须要在SOPC BUILDER中设置AVALONE交换总线,设置read_master和sdram连接,write_master和on_chip_memory连接,详细见下图(交叉点为黑色)。 在sopc builder中生成系统,并在Quartus II中编译下载,硬件部分就OK了。假如你的DMA操作不是内存到内存的,而是内存到设备,或者设备到内存,那么你须要在上面这一步中加以设置,设备只支持读写,是CPU读写还是DMA读写设备不加以区分。 在程序中,我们要运用DMA必需包含:sys/alt_dma

9、.h。 因为是内存DMA操作,所以我们必需实现transmit channels和receive channels,这在NIOS II中就是打开两个设备。在NIOS II IDE中生成一个以Hello World为模板的memory_dma工程项目修改一下程序如下: #include #include #include #include system.h static volatile int rx_done = 0; /* * Callback function that obtains notification that the data has * been received.*/ st

10、atic void done (void* handle, void* data) rx_done+; int main (int argc, char* argv, char* envp) int rc; static char buff256; alt_dma_txchan txchan; alt_dma_rxchan rxchan; void* tx_data = (void*) buff; /* pointer to data to send */ void* rx_buffer = (void*) 0x01000000; /* on_chip_memory addr*/ /* Cre

11、ate the transmit channel */ if (txchan = alt_dma_txchan_open(/dev/dma_0) = NULL) printf (Failed to open transmit channeln); exit (1); /* Create the receive channel */ if (rxchan = alt_dma_rxchan_open(/dev/dma_0) = NULL) printf (Failed to open receive channeln); exit (1); /* Post the transmit request

12、 */ if (rc = alt_dma_txchan_send (txchan, tx_data, 128, NULL, NULL) /* Post the receive request */ if (rc = alt_dma_rxchan_prepare (rxchan, rx_buffer, 128, done, NULL) /* wait for transfer to complete */ while (!rx_done); printf (Transfer succeful!n); return 0; 我们许多人对DMA理解的很深化,在其他嵌入式领域有丰富的阅历,在其他系统上的

13、实现问题很自然会想在NIOS II中是怎么完成的呢,比如DMA完成以后须要中断吗?如何知道DMA传输完成等等,在上面的程序中,事实上是通过回调函数完成的,回调函数在Windows系统的WIN API中以及驱动开发中被大量运用。 好了,DMA就是如此,还有一些相关的函数须要去尝试一下。尝试特别重要,在资料欠缺的时候,须要创建环境去试验,你的理解是这样的,按这样的理解会有这样的结果,实际做一下究竟是怎样的,不符合?是理解错了吗?不断尝试,收益无限 网络传输原理小结 局域网参考模型中数据链路层的LLC子层,MAC子层各是什么含义? LLC子层负责向其上层供应服务;MAC子层的主要功能包括数据帧的封装

14、/卸装,帧的寻址和识别,帧的接收与发送,链路的管理,. 电信传输局月度小结 电信传输局月度小结从2022年7月2号到现在,我有幸加入到贵中心工作,至今已有一个月的时间。经过一个月的学习,回顾这三十多天的工作经验,自我感觉还算不错,总体来讲也称得上是诚诚. 毕业实习个人小结无线传输 个人小结为期一个月的毕业实习已经结束,一个月只是时间长河中的一瞬间,但对于我来说的确千金难买的珍贵光阴。十几年的学习生涯就要接近尾声,实习是我跨入社会进行的一个热身运. 双绞线传输与无线传输 双绞线传输与无线传输双绞线传输在智能大厦综合布线中,安防系统具有特别重要的地位。在传统的设计和施工中,往往将网络布线与安防监控布线分开考虑,由于运用的介质差异使人们无. 双绞线传输 双绞线传输优势 双绞线报价 双绞线传输器价格 双绞线视频传输器 厂家批发双绞线传输设备 双绞线传输距离 双绞线制作 双绞线传输距离 云台解码器云台限制器 云台协议 监控云. 本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第8页 共8页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com