网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> EDA >> NIOSII >> 文章正文
  如何在NIOSII中使用DMA           ★★★ 【字体:
如何在NIOSII中使用DMA
作者:Free    文章来源:Free    点击数:    更新时间:2008-1-4    

最近使用NIOSIIDMA的方式来实现用SPI发送数据,具体方式是用NIOSIIUART的数据接收,当它接收到一定数量的数据后使用DMA方式将数据发送出去。

出现的问题:一开始我们使用NIOSIIe核,将程序放到外部的SRAM中,结果发现SPI的发送速度跟不上DSP要求的速度。NIOSIISPI核设定为slave模式,DSP的主SPI的访问速度为10M

然后我们就觉得是DMACPU强占总线造成速度不够,应为我们将接收的数放到外部的SRAM中,同时程序也运行在外部SRAM。我们就开辟了新的存数据的空间,具体做法是:

IDEsystem library property中将Stack memory指定为on chip memory ,然后在程序中用

#pragma DATA_SECTION( uart2_data,".ON_CHIP_RAM");

alt_u16 uart2_data[LENGTH+2];//uart2 to spi buffer;

将存储空间指定到on chip memory上结果发现如果程序中只有使用DMA发送SPI数据时可以实现,如果还有其他任务时,就不能实现正确发送数据。

同时我们还发现如果将DMA的目的端指定了两个,造成的结果

就是在程序中用txchan = alt_dma_txchan_open("/dev/dma_0");打不开DMA

问题的解决:由于以上的原因,我们初步认为是DMACPU抢占工作时间,同时NIOSII的指令工作速度不够快造成的,我们决定将NIOSII换成s核,

先使用on chip memory 来实现发送数据的存储,DMAon chip memory 源端发送到SPI 目的端,结果发现能够正确发送,

然后我们又尝试将数据放到SRAM中发现也能够正确的发送数据。

DMA的使用方法:在IDE程序中使用DMA的方法如下:

   txchan = alt_dma_txchan_open("/dev/dma_0");//打开DMA发送通道   

   alt_dma_txchan_ioctl(txchan, ALT_DMA_TX_ONLY_ON, (void *)(SPI_BASE+2));//将目的端设定为固定在SPITXDATA寄存器

   IOCTL函数的使用参考本日志中的NIOSII常用函数函数  

   alt_dma_txchan_ioctl(txchan, ALT_DMA_SET_MODE_16,(void*)NULL);//DMA的发送方式设定为16位模式,此处应该注意DMALENGTH计数是以8位来计数的

   在设定DMA的发送个数时应该×2

   alt_dma_txchan_send(txchan,(void *)&uart2_data,c_counter*2,uart2Done,NULL);

   NIOSII 中的SPIROEWOE需要及时清除,否则会造成SPI阻塞。IOWR_ALTERA_AVALON_SPI_STATUS(SPI_BASE,0x18);   

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    NIOS的用户定义接口逻辑实例
    NIOS II中用到的C/C++函数
    基于Nios II内核的SOPC开发板…
    基于Nios II的非一般模式类设…
    基于Nios II的DTMB单频网适配…
    基于Nios II和DDS的雷达信号…
    一种基于Nios II的可重构DSP…
    Nios II IDE软件编译环境探密…
    基于Nios II的非一般模式类设…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号