1、对同一个设备的多次DMA读写操作之间如果并行,有可能会导致数据传输错误。可以在程序中对每次DMA操作进行等待。如下:

点击(此处)折叠或打开

  1. void dma_done(void *p)
  2. int *q=p;
  3. (*q)++;
  4. }
  5. main()
  6. {
  7. voliate int n1=0,n2=0;
  8. alt_dma_txchan_send(tx1, tx_buf1+BUFSIZE, length, dma_done, &n1);
  9. alt_dma_txchan_send(tx2, tx_buf2+BUFSIZE, length, dma_done, &n2);
  10. while(n1!=1);
  11. while(n2!=1);
  12. alt_dma_rxchan_prepare(rx1, rx_buf1+BUFSIZE, length, dma_done, &n3);
  13. alt_dma_rxchan_prepare(rx2, rx_buf2+BUFSIZE, length, dma_done, &n4);
  14. while(n3!=1);
  15. while(n4!=1);
  16. }

2、如果使用的nios cpu中带有数据cache,则在进行DMA数据传输之前,要先将要使用的mem对应的cache同步到mem中。如下:
#include <sys/alt_cache.h>
alt_dcache_flush_all();

3、使用dma传输数据时,数据在内存中的地址必须保持与dma传输宽度一致的字节对齐。而且长度也必须
为相应的倍数。例如:
alt_dma_txchan_ioctl(tx, ALT_DMA_SET_MODE_32,NULL);  //设为32位传输模式
alt_dma_txchan_send(tx, data, length, NULL,NULL);
data和length必须为4的倍数。
为保证字节对齐,可以使用:
int __attribute__((aligned(4))) data;
但似乎nios无法进行8字节对齐。因此可以自己用指针来保证指针指向的地址为8的倍数。如下:
alt_u64 buffer[PAGESIZE+1];    
alt_u64 *page=(((int)buffer-1)/8+1)*8;

nios DMA使用注意事项的更多相关文章

  1. 【STM32H7教程】第46章 STM32H7的ADC应用之DMA方式多通道采样

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第46章       STM32H7的ADC应用之DMA方式多 ...

  2. nios sgdma(Scatter-Gather dma)示例

    在 Quartus7.2之后的版本中,除了原有的基于avalon-mm总线的DMA之外,还增加了Scatter-Gather DMA这种基于avalon-ST流总线的DMA IP核,它更适合与大量数据 ...

  3. FPGA nios软核编写液晶屏LCD12864驱动程序源码以及注意事项,本人亲自踩坑,重要!!!

    LCD12864引脚如下: FPGA开发板得提供,3.3v电压,5v电压,普通io都是3.3v电压 DB:数据脚,得用双向io,因为程序里面需要读取液晶的应答(普通io3.3v可以) E:?输出引脚即 ...

  4. linux下共享内存mmap和DMA(直接访问内存)的使用 【转】

    转自:http://blog.chinaunix.net/uid-7374279-id-4413316.html 介绍Linux内存管理和内存映射的奥秘.同时讲述设备驱动程序是如何使用“直接内存访问” ...

  5. mmap DMA【转】

    转自:http://blog.csdn.net/lihaoweiv/article/details/6275241 第 13 章  mmap 和 DMA 本章将深入探讨 Linux 内存管理部分,并强 ...

  6. Windows NT 驱动程序开发人员提示 -- 应注意避免的事项

    下面是开发人员在使用 Windows NT 设备驱动程序时应当避免的事项列表: 1.  一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度 ...

  7. 【分享】【原创开源应用第4期】给ili9488,RA8875类显示屏的emWin底层增加DMA加速方案

    说明:1.emWin底层中最重要的一个优化就是16bpp绘制,特此为其增加DMA加速,已经支持RA8875和ili9488.2.使用中务必将emWin任务设置为除了空闲任务,统计任务以外的最低优先级, ...

  8. 阅读DMA Controller Core 官方手册

    阅读DMA Controller Core 官方手册 DMA控制器框架图 怎样去设定一个DMA控制器 实例化DMA控制器 参数配置界面如下图所示: 对于width of the DMA length ...

  9. stm32f051 DMA需要注意的一点

    STM32f051的DMA注意事项 问题说明:在使用ADC的DMA通道时,遇到了序列转换的乱序问题,我使用的是DMA循环模式,但是采集的数据却总是错的:第二个内存地址存放的是ADC序列转换中的第一个通 ...

随机推荐

  1. Jquery-操作select下拉菜单

    jQuery获取Select选择的Text和Value: 1. var checkText=jQuery("#select_id").find("option:selec ...

  2. spring boot pom

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  3. Could not connect to SMTP host: localhost, port: 25;

    1.错误描写叙述 DEBUG: setDebug: JavaMail version 1.3.3 DEBUG: getProvider() returning javax.mail.Provider[ ...

  4. C++中对字符串进行插入、替换、删除操作

    #include <iostream> #include <string> using std::cout; using std::endl; using std::strin ...

  5. Linux 0.11中write实现

    看了一下Linux 0.11版本号write的实现,首先它在标准头文件unistd.h中有定义 int write(int fildes, const char * buf, off_t count) ...

  6. Button的Click事件与js函数的两种不同顺序触发方式

    先运行js.或者先运行Click事件,近期就遇到了这个问题,開始弄了两个button分别运行,那才叫一个蛋疼... 1.先运行js,再运行Button的Click函数 <asp:Button I ...

  7. CDOJ 876 爱管闲事 DP

    爱管闲事 春希非常爱管闲事,他每天都会抽空帮助一些同学,由于春希非常死板,出于公平性,春希不会先帮助后来找他的同学. 现在有n个同学需要他的帮助,虽然他很想一天之类帮助所有人,但毕竟精力有限,于是他决 ...

  8. hdu 1051 - 贪心,水题

    题目链接 一堆小木棍,每个有两个属性值(l,w),对小木棍分组,每一组内的小木棍存在这样一个序列满足s1<=s2<=s3.....<=sn,[s1<=s2当且仅当s1.l< ...

  9. javascript满天小星星

  10. 前端压缩图片,前端压缩图片后转换为base64.

    今天利用一上午研究了一下前端如何将5m左右的照片转换base64大小为 100k以内! 有两个链接:https://www.cnblogs.com/007sx/p/7583202.html :http ...