|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
PPC的直接DMA已经搞定。具体的程序拿不出来,公司的机器在内网,又封了USB……
按照PDF上的说明,首先在内存中为描述符建立了一个结构体数组,结构体结构示意如下:
uint32 Sour; //源地址
uint32 NC1; //描述符的要求,下同
uint32 Desc; //目的地址
uint32 NC2;
uint32 NDA; //下一个描述符的首地址
uint32 NC3;
uint32 Num;//字节计数
uint32 NC4;
结构体填充之前已经经过了字节序掉换,变成了小端格式,NDA是数组下一元素的首地址,已经左移5位,以适合寄存器。
按照PDF说明,首先初始化CDAR寄存器(当前描述符),把数组的首地址赋给这个寄存器。然后检查DMA状态,空闲的情况下,设置MR。
设置了源地址保持和16位宽度两个属性。然后先清零再置位CS,启动DMA。
这时读寄存器,SR为0x84,第7位(传输出错)和第3位(正在传输)置位,CDAR和NDAR为0,感觉DMA没有读入描述符。
然后实验,除了初始化CDAR,还初始化了NDAR,结果差不多,但是第三位没有置位了。
看PDF上,DMA功能非常简单,但是用起来就是大麻烦啊。很多东西,对知道的人来说就是一句话,初上手的却得花费一周……
请搞过的朋友赐教,谢谢。
PS:如果有用PPC,在为直接模式DMA无法启动而头痛的朋友,不妨查看下SCCR寄存器,就是时钟设置里面那个管PCI时钟的寄存器,DMA的时钟
和PCI在一起,如果不开这个,DMA是不工作的。这个问题PDF上可是没提过的,年前很是让我头痛了一下。 |
|
|