正确的读取答案应该是 0x1210<br />但是读取到的数值是 0x1212<br /><br />#define D12Cmd *(volatile U8 *)(0x2000001)<br />#define D12Dat *(volatile U8 *)(0x2000000)<br />#define D12Dat1 *(volatile U8 *)(0x2000002)<br /><br />U32 D12RdChipId()<br />{<br /> U32 tmp;<br /> D12Cmd = 0xfd;<br /> tmp = D12Dat;<br /> tmp = tmp<<8;<br /> tmp+=D12Dat; //D12Dat 读取失败<br /> return tmp; <br />}<br /> 0x0000009c: e3a010fd .... MOV r1,#0xfd<br /> 0x000000a0: e3a00780 .... MOV r0,#0x2000000<br /> 0x000000a4: e5c01001 .... STRB r1,[r0,#1]<br /> 0x000000a8: e5d01000 .... LDRB r1,[r0,#0]<br /> 0x000000ac: e1a01401 .... MOV r1,r1,LSL #8<br /> 0x000000b0: e5d00000 .... LDRB r0,[r0,#0]<br /> 0x000000b4: e0800001 .... ADD r0,r0,r1<br /> 0x000000b8: e1a0f00e .... MOV pc,r14<br /><br />但是我程序给为这样 第二起读取地址是*(volatile U8 *)(0x2000002)<br />可以读到0x1210<br />U32 D12RdChipId()<br />{<br /> U32 tmp;<br /> D12Cmd = 0xfd;<br /> tmp = D12Dat;<br /> tmp = tmp<<8;<br /> tmp+=D12Dat1; //D12Dat1 读取成功<br /> return tmp; <br />}<br /> 0x0000009c: e3a010fd .... MOV r1,#0xfd<br /> 0x000000a0: e3a00780 .... MOV r0,#0x2000000<br /> 0x000000a4: e5c01001 .... STRB r1,[r0,#1]<br /> 0x000000a8: e5d01000 .... LDRB r1,[r0,#0]<br /> 0x000000ac: e1a01401 .... MOV r1,r1,LSL #8<br /> 0x000000b0: e5d00002 .... LDRB r0,[r0,#2]<br /> 0x000000b4: e0800001 .... ADD r0,r0,r1<br /> 0x000000b8: e1a0f00e .... MOV pc,r14<br /> |
|