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