首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

哪位好心人解释下vivi 中的 nand_read_ll的NFADDR设置这段啊该怎么解决

2012-03-05 
哪位好心人解释下vivi 中的 nand_read_ll的NFADDR设置这段啊voidnand_read_ll(unsignedchar*buf,unsignedl

哪位好心人解释下vivi 中的 nand_read_ll的NFADDR设置这段啊
void   nand_read_ll(unsigned   char   *buf,   unsigned   long   start_addr,   int   size)
{
        int   i,   j;

        if   ((start_addr   &   NAND_BLOCK_MASK)   ||   (size   &   NAND_BLOCK_MASK))   {
                return   ;   /*   invalid   alignment   */
        }

        /*   chip   Enable   */
        NFCONF   &=   ~0x800;
        for(i=0;   i <10;   i++);

        for(i=start_addr;   i   <   (start_addr   +   size);)   {
            /*   READ0   */
            NFCMD   =   0;

            /*   Write   Address   */                                                               //这段是什么意思?
            NFADDR   =   i   &   0xff;
            NFADDR   =   (i   > >   9)   &   0xff;
            NFADDR   =   (i   > >   17)   &   0xff;
            NFADDR   =   (i   > >   25)   &   0xff;

            wait_idle();

            for(j=0;   j   <   NAND_SECTOR_SIZE;   j++,   i++)   {
  *buf   =   (NFDATA   &   0xff);
  buf++;
            }
        }

        /*   chip   Disable   */
        NFCONF   |=   0x800;   /*   chip   disable   */

        return   ;
}  


[解决办法]
NFADDR = (i > > 25) & 0xff;
的值了吗?前面的那三条都没有用啊!

有的器件是这样的,完成了一个读写,会自动跳指针,指向第一个存储空间,但是对上面的读写入口没变的
& 0xff;//感觉这个操作就是为了把i的低八位弄出来,然后弄到成八位的宽度...

当然,我没有你的硬件,我只是相当然,仅供参考

热点排行