[嵌入式linux] 请高手帮忙分析这段代码,Nor flash

[复制链接]
 楼主| Fly_free 发表于 2013-9-17 13:08 | 显示全部楼层 |阅读模式
  1. static int ProgramBlk(U32 addr, U32 src, U32 len)//ProgramBlk(U32 0x20000, U32 dat[0x80] , 0x20000)
  2. {
  3.         int ret;
  4.         U32 i;
  5.        
  6.         addr += ROM_BASE;
  7.         for(i = 0; i < len; i +=32)
  8.         {
  9.                 int j;
  10.                 do
  11.                 {
  12.                         out_w(0x00e8, addr);//buffer program
  13.                         ret =  in_w(ROM_BASE);//ReadStatus();
  14.                 }
  15.                 while((ret&0x0080)!=0x0080);

  16.                 out_w(0x000f, addr);

  17.                 for(j=0; j<16; j++)
  18.                         out_w(*(U16 *)(src+i+j*2), addr+i+j*2);

  19.                 out_w(0x00d0, addr);

  20.                 do
  21.                 {
  22.                         ret = ReadStatus();
  23.                 } while((ret&0x0080)!=0x0080);

  24.                 ClrStatus();

  25.                 if(ret&0x001e)
  26.                 {
  27.                         printf("Program addr 0x%x Fail, status=%x\n", addr, ret);
  28.                         return -1;
  29.                 }               
  30.         }
  31.                

  32.         ReadArray();
  33.         for(i = 0; i < len; i += 2)
  34.                 if(in_w(addr + i) != *(U16 *)(src + i))
  35.                 {
  36.                         printf("Program addr 0x%x Fail, wr=0x%x, rd=0x%x\n", addr+i, *(U16 *)(src+i), in_w(addr+i));
  37.                         return -1;
  38.                 }
  39.        
  40.         ret = 0;//LockBlk(addr);
  41.        
  42.         return ret;
  43. }
这个是FL2440的开发板上JS28F320 nor flash的代码;;

有几点疑问,烦请各位帮忙解决一下;

1.第一个for循环里,i += 32;是怎么来的;
2.第二个for循环里,j 为什么循环16次;
3.out_w(0x000f, addr);这条语句是什么意思
 楼主| Fly_free 发表于 2013-9-18 15:24 | 显示全部楼层
lelee007 发表于 2013-9-19 22:21 | 显示全部楼层
         

                for(j=0; j<16; j++)
                        out_w(*(U16 *)(src+i+j*2), addr+i+j*2);

U16 *一个指针可以写2个byte,然后循环16次就是32个byte了,这就是i+=32的原因
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

105

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部