dm9000问题读取ID 出问题解决方法

转自:http://blog.sina.com.cn/s/blog_7f0456bf0100zup6.html

static void __CheckPHYID(void)
{
//*    如果能够正常读取出数据,那么说明时序是正确的
//*    注意这个时序和读取或者写入一个寄存器的值后的
//*    延时时间不是一样的含义。
    U32 id_val;
     id_val=ior(DM9KS_VID_L);
    id_val|=ior(DM9KS_VID_H)<<8;
    id_val|=ior(DM9KS_PID_L)<<16;
    id_val|=ior(DM9KS_PID_H)<<24;

    Printf("DM9000AE ChipId is %x\n", id_val);
    if(id_val == DM9KS_ID)
        Printf("DM9000 ID correct\n");
    else
        Printf("DM9000 ID wrong\n");   
}
调试该函数时DM9000ID号一直不对,总是显示46464646即DM9KS_VID_L的默认值。查阅资料发现问题出在MMU_init()函数,该函数将对应的cache打开了,这样cpu的读写操作都会在cache中进行,导致读取寄存器结果一直相同,解决办法是: 
在MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_CNB); //bank4 for dm9000 
把RW_CNB 改为RW_NCNB   //cache_off,WR_BUF 以关闭cache

 

博主:经试验,有效

你可能感兴趣的:(cache)