6 b! u! D# v, Y) C8 x) P8 m有了上一讲HAL的基础,我们来关注一下DMA在NIOS 中的实现和编程。DMA是个老问题了,从8086/8088一直到现在,完成不需要CPU参与的数据搬家,源和目标可以是内存也可以是设备,在NIOS II中通过基于HAL编程完成。( ~) Y( h* L0 G$ y) T2 a2 S+ ~
下图是三中基本的DMA传输:
4 ~’ W’ b4 p6 i9 R9 I 在NIOS II的HAL DMA设备模式中,DMA传输被分为两类:transmit 和 receive。NIOS提供两种设备驱动实现transmit channels和receive channels,transmit channels把缓冲区数据发送到目标设备,receive channels读取设备数据存放到缓冲区。. f) t& i- z9 q; u- z7 y( I7 r
为了适应大家不同的开发环境,下面我们完成一个相对简单的DMA操作,复制SDRAM内存缓冲区到on_chip_memory中,如果我们在库工程属性中设置了SDRAM为主内存,那么程序中分配的数组缓冲区就在SDRAM中,我们用指针赋值让指针指向on_chip_memory。这个操作完全可以在程序中用memcpy来实现,我们趋简就繁,就是为了尝试一下DMAJ。
, c+ Y) o/ F( g 首先我们在SOPC Builder中增加一个名字为dma_0的DMA设备。两个表单设置都选默认。
没有回复内容