回答

收藏

NIOS II DMA

其他 其他 11220 人阅读 | 0 人回复 | 2007-08-24

NIOS?II?DMA
NIOS DMA同样是Altera SOPC Builder库组件
DMA可用于存储器之间、存储器与外设、外设之间的数据传输,允许没有CPU干预,完成固定长度或者可变长度的数据传输
DMA外设通过两个Avalon主端口(一读一写)和一从端口控制。
典型DMA传递过程如下:
1。通过写控制端口设置DMA的数据传输方式
2。启动DMA外设,实施数据传输(CPU不干预)
3。DMA读传输主端口从目标地址(内存或者外设)读取数据,写端口向目的地址(内存或者外设)写数据。读写之间通过FIFO进行数据缓冲。
4。只指定字节数的数据传输完成或者传输了一个包结束(EOP)时,DMA将结束传输。DMA外设可以在传输结束时发出中断请求。
5。传输当中或者结束后,都可以通过查看DMA的状态寄存器来判断传输在进行还是已经结束
主要寄存器: status? 第0位:done
???????????????????????????????????????? 第1位:busy
          第2位:reop(读取当前数据包结束)
          第3位:weop(写当前数据包结束)
          第4位:len(完成一次DMA传输,len置1)
????????????????????????????? readaddress(主读取起始地址),存放的是传输数据的源地址,其宽度由用户在SOPC中自己定义。(与外设匹配)
        writeaddress(主写入起始地址),与上类似
       length ,存放读写端口之间需要传输的字节数,长度寄存器宽度由系统生成时的设置决定,DMA每完成一次写传输,length寄存器值减一,当减为0时,len位使能。其寄存器的值按照字节数计算,双字传输,必须是4的倍数,字的传输,当然是2的倍数啦!!
       control 寄存器: 位0: byte?? 字节传输
               位1:  hw? 字传输
               位2: word 双字传输
               位3: go?DMA 使能
               位4: i_en 中断使能
               位5:reen 读数据包使能
               位6:ween写数据包使能
               位7:leen ,置1时,DMA在传输完length数目数据的时候结束传输(已经知道传输数据量),若设置0,则不会停止,使用于数据量不确定的场合。
               位8:rcon 从固定地址读取
               位9:wcon 从固定地址写入
读数据的地址每次访问递增1.2.4个字节,具体是几取决去传输的是字节、字、或者半字,若rcon置1,则地址不递增。
当done&&i_en == 1时候,dma向外设发出中断请求,典型的中断处理程序首先读取状态寄存器的len,reop,weop位来判断中断原因。然后,写转台寄存器清除中断,处理后,进行下一次DMA传输。
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条