各位大虾,小弟在学习44b0,目前在调试在线编程flash am29lv160db的试验时,遇到一些问题,三四天了都没有办法解决,实在郁闷,望各位大虾指点,作为报酬,可以提供我刚刚调试好的以太网驱动程序,该程序在我的板子上已经运行良好,保证可以使用。<br />我的问题如下:<br />用c写的程序,每次读此flash的厂商id和设备id时都不正确,逼于无奈,嵌入了一段汇编代码,可以正确读出第一参数,但是第二个参数,即厂商id争取,设备id错误,把程序的次序调换一下,设备id又正确,厂商id 又错误,实在没辙。<br />具体代码如下:<br /><br />int CMDam29lv160(int argc, char *argv[])<br />{<br /> U32 id;<br /> id=0xffffffff;<br /> rNCACHBE0=((0x2000000>>12)<<16 )|(0x0>12); //flash area must be non-cachable area.<br /> rNCACHBE1=(((U32)0xc000000>>12)<<16 )|(U32)(0x6000000>>12); //flash area must be non-cachable area.<br /> rSYSCFG=rSYSCFG&(~0x8); //write buffer has to be off for proper timing. <br /> id=GetFlashId();<br /> Uart_Printf("
Flash id=0x%x",id); <br /> return 0;<br />}<br /><br />unsigned int GetFlashId (void) <br />{<br /> unsigned short i,j;<br /> i=0;j=0;<br /> <br /> __asm {<br />mov r0,#0xf0<br />mov r4,#0x00<br />mov r8,#0xaa<br />mov r5,#0xa00<br />mov r9,#0x55<br />mov r10,#0x500<br />mov r11,#0x90<br /><br />strh r0,[r4,#0] <br /><br />strh r8,[r5,#0xaa] <br />strh r9,[r10,#0x54]<br />strh r11,[r5,#0xaa]<br />ldrh r2,[r4,#0]<br />ldrh r3,[r4,#2]<br /><br />mov i,r2<br />mov j,r3<br /><br /> };<br /> return ((unsigned int)((i<<16) |j)); <br />}<br />至于c语言的代码,参考了三星的代码都不行。<br /><br />请各位指点,先谢谢各位大虾了。<br /> |