凌阳科技大学计划论坛

首页 » 32位SPCE3200技术讨论区 » SPCE3200新手上路 » DMA方式操作SD卡
coffee02182006 - 2008-5-6 17:38:00
在SD Card的driver中有如下:
    int    DrvSDCWriteMulData(unsigned char *outaddr)

        i=(unsigned int) outaddr;

        if((i & 0x03) == 0)

为什么说if条件满足就是按照DMA方式操作SD Card,反之就是CPU操作????

请帮忙解释一哈!·谢谢!
xz.lin - 2008-5-6 17:48:00
顶一哈,帮忙解释一哈哦,俺也不明白啊
leajian - 2008-5-6 18:05:00
当地址是字对齐的时候,采用DMA做数据传输,否则,DMA无法完成,只能由CPU自己来完成~~
xz.lin - 2008-5-6 18:57:00
谢谢~
coffee02182006 - 2008-5-7 8:43:00
那么这样说来,操作SD卡主要用DMA的方式来操作了拉?

  另外不是很明白所谓的字对齐??????

  也不是很明白为什么要字对齐才能使用DMA方式来操作SD卡哦????

请帮忙再详细解答一下,谢谢!
coffee02182006 - 2008-5-7 11:34:00
使用DMA操作SD卡会比较快,而且比较稳定

    所谓的字对齐就是地址的最低2个bit为0。在32bit的平台上,当需要对字数据进行存取时,必须要求字对齐。当然,如果你只是希望读取一个字节,就无需做字对齐了。

    3200的DMA工作在32bit模式下,也就是说,它一次会传输32bit的数据,所以,要求RAM地址必须是字对齐的,否则没办法将数据正确的写进去
coffee02182006 - 2008-5-7 11:41:00
按照leajian斑竹的说法就是说当你的配置中,
  *P_DMA_CHANNEL0_CTRL = C_DMA_APB_MIU|C_DMA_POLLING_MODE|C_DMA_REGULAR_MODE|C_DMA_SINGLE_BUF|C_DMA_32BIT_BURST|C_DMA_CH_EN;

  那么就必须是字对齐了哦(因为配置了C_DMA_32BIT_BURST),我这个菜鸟是这么认为的哦,

如果是其他的像配置为8bit,16bit,也就不需要是字对齐了,不过对于16bit的就需要的是half word

就需要对齐了哦!
 
  是这样的吗????leajian斑竹请确认一哈哦,有没有说错的地方哦!!
leajian - 2008-5-8 9:56:00
是滴~~
maomao2126 - 2008-5-22 12:51:00
楼主好,我想问一下这个字对齐是什么意思?
是不是说地址的低两位在作为地址的同时还要用做检测是否字对齐的功能?
leajian - 2008-5-23 9:41:00
字对齐:

    在32bit platform下,一个字占用32bit,即4Byte
    所谓的字对齐,就是指,在对字数据进行读写的时候,需要保证你操作的地址必须是可以被4整除的,也就是你给的地址的低两bit为0~
maomao2126 - 2008-5-23 12:32:00
哦,明白了
coffee02182006 - 2008-5-23 16:58:00
其实你可以看出是DMA操作的一个规定拉,这个规定主要跟是否能将data完好的写到memory有关的!
  如果你配的是32bit的话,那么首地址的最低两个bit必须为00啦!
    当然16bit的话,那么首地址的最低bit必须为0拉!8bit 没有这样的要求的!
 1 
查看完整版本: DMA方式操作SD卡