Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1166301
  • 博文数量: 173
  • 博客积分: 4048
  • 博客等级:
  • 技术积分: 2679
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-12 18:53
文章分类

全部博文(173)

文章存档

2018年(1)

2016年(1)

2013年(1)

2012年(118)

2011年(52)

分类: 嵌入式

2012-01-08 19:53:07

在对性能要求较高的场合,需要直接对DMA的端口进行读写操作。可以参考DMA controller core。
在altera_avalon_dma_regs.h头文件中,有对DMA底层操作的宏定义,直接使用这些宏即可。
例如:
  1. void dmareset()   //每次dma之前都要进行下面的操作否则会出错
  2. {
  3.     IOWR_ALTERA_AVALON_DMA_CONTROL(DMA_0_BASE,0);        //清空控制寄存器
  4.     IOWR_ALTERA_AVALON_DMA_LENGTH(DMA_0_BASE, DATASIZE); //设置传输数据量以字节为单位,传输时该寄存器数值自减
  5. }

  6. void dodma(alt_u64 datin[])
  7. {
  8.     dmareset();
  9.     
  10.     IOWR_ALTERA_AVALON_DMA_RADDRESS(DMA_0_BASE, datin); //设置读地址寄存器
  11.     IOWR_ALTERA_AVALON_DMA_WADDRESS(DMA_0_BASE, DEVICE_0_BASE); //设置写地址寄存器
  12.     IOWR_ALTERA_AVALON_DMA_CONTROL(DMA_0_BASE, 0x688);  //设置控制寄存器的模式为写地址固定,双字传输并且开始传送数据
  13.          
  14.     delay();
阅读(1875) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~