| 
					阅读:1716回复:3
				 pci数据传输与内存读写
					我用9054开发的用户板,采用dma方式传输数据,局部总线是16位。
 我用malloc()函数申请了一块内存 (具体是puf=(unsigned int *)malloc(378000)), 把dma的数据传输到内存。之后我用函数输出内存的数值 printf(\"%u\\n\",(unsigned int)*(puf+j));(j是循环变量)。 可是每个内存单元输出的是32位的数,按说应该是16位呀。而且我的j值只能取到94500,也就是378000/4。如果取189000运行就出错。但是如果取94501,它输出的最后一个数据会明显不同。(应该是出了我申请的内存范围了)。这是为什么?那位大虾帮助解释一下。 不论我输出为%u,%d,%x输出的都是32位数据。 是不是跟硬件有关,还是纯软件的问题。难道是pci总线与内存数据传输采用的是32位,虽然我用16位dma,但它实际上把相邻两个16位数据拼成一个32位数据再传输到内存。这是我猜的,不知道对不对。 | |
| 沙发#发布于:2005-05-18 21:50 
					dma传输的数据是你自己设定的,改变一下数据源的内容,分析一下是不是你想象的那样,试试看。
 请问你用了sram了吗?那个型号好用?同步还是异步的? | |
| 板凳#发布于:2005-05-22 10:53 
					试试这么做行不
 printf(\"%u\\n\",(unsigned int)*((unsigned short int*)puf+j)); | |
| 地板#发布于:2005-05-28 10:57 
					多谢两位了,我的问题已经解决了,我申请内存时把它改成WORD类型的就可以了,真奇怪,既然不支持unsigned int类型,可编译时却不出错,真晕。至于dma当然还是定义了几位就是几位,不是猜测的那样。
 另外,我用的是fifo,觉得用的还可以,我用的idt72v2105。 [编辑 - 5/28/05 by flyingsea] | |
 
							
