在对性能要求较高的场合,需要直接对DMA的端口进行读写操作。可以参考DMA controller core。
在altera_avalon_dma_regs.h头文件中,有对DMA底层操作的宏定义,直接使用这些宏即可。
例如:
- void dmareset() //每次dma之前都要进行下面的操作否则会出错
-
{
-
IOWR_ALTERA_AVALON_DMA_CONTROL(DMA_0_BASE,0); //清空控制寄存器
-
IOWR_ALTERA_AVALON_DMA_LENGTH(DMA_0_BASE, DATASIZE); //设置传输数据量以字节为单位,传输时该寄存器数值自减
-
}
-
-
void dodma(alt_u64 datin[])
-
{
-
dmareset();
-
-
IOWR_ALTERA_AVALON_DMA_RADDRESS(DMA_0_BASE, datin); //设置读地址寄存器
-
IOWR_ALTERA_AVALON_DMA_WADDRESS(DMA_0_BASE, DEVICE_0_BASE); //设置写地址寄存器
-
IOWR_ALTERA_AVALON_DMA_CONTROL(DMA_0_BASE, 0x688); //设置控制寄存器的模式为写地址固定,双字传输并且开始传送数据
-
-
delay();
- }
阅读(1875) | 评论(0) | 转发(0) |