打印
[嵌入式linux]

请高手帮忙分析这段代码,Nor flash

[复制链接]
1078|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Fly_free|  楼主 | 2013-9-17 13:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
static int ProgramBlk(U32 addr, U32 src, U32 len)//ProgramBlk(U32 0x20000, U32 dat[0x80] , 0x20000)
{
        int ret;
        U32 i;
       
        addr += ROM_BASE;
        for(i = 0; i < len; i +=32)
        {
                int j;
                do
                {
                        out_w(0x00e8, addr);//buffer program
                        ret =  in_w(ROM_BASE);//ReadStatus();
                }
                while((ret&0x0080)!=0x0080);

                out_w(0x000f, addr);

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

                out_w(0x00d0, addr);

                do
                {
                        ret = ReadStatus();
                } while((ret&0x0080)!=0x0080);

                ClrStatus();

                if(ret&0x001e)
                {
                        printf("Program addr 0x%x Fail, status=%x\n", addr, ret);
                        return -1;
                }               
        }
               

        ReadArray();
        for(i = 0; i < len; i += 2)
                if(in_w(addr + i) != *(U16 *)(src + i))
                {
                        printf("Program addr 0x%x Fail, wr=0x%x, rd=0x%x\n", addr+i, *(U16 *)(src+i), in_w(addr+i));
                        return -1;
                }
       
        ret = 0;//LockBlk(addr);
       
        return ret;
}
这个是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

粉丝