|
问题初步解决!!!!
GPFCON = GPFCON & GPF0 & GPF1 & GPF2 & GPF4;
和
GPFCON = GPFCON & GPF0 & GPF1 & GPF2 & GPF4 | (2 << 4) | (2 << 0) \
| (2 << 8) | (2 << 2);
方式都可以点亮led。问题出在赋值上!!
请看代码
while(1)
{
if(GPFDAT & GPF1_in)
{
GPBDAT = 0x000001f0;
}
else
{
GPBDAT = 0x00000000;
}
}
return 0;
}
我去掉了key_data = GPFDAT;!!
这个是上面代码反汇编后while语句里面的代码
7c: e2033002 and r3, r3, #2 ; 0x2
80: e3530000 cmp r3, #0 ; 0x0
84: 0a000004 beq 9c <main+0x84>
88: e3a03456 mov r3, #1442840576 ; 0x56000000
8c: e2833014 add r3, r3, #20 ; 0x14
90: e3a02e1f mov r2, #496 ; 0x1f0
94: e5832000 str r2, [r3]
98: eafffff4 b 70 <main+0x58>
9c: e3a03456 mov r3, #1442840576 ; 0x56000000
a0: e2833014 add r3, r3, #20 ; 0x14
a4: e3a02000 mov r2, #0 ; 0x0
a8: e5832000 str r2, [r3]
下面这个是添加了key_data = GPFDAT;且将while循环内的if语句的GPFDAT换为key_data后的反汇编代码:
70: e3a03456 mov r3, #1442840576 ; 0x56000000
74: e2833054 add r3, r3, #84 ; 0x54
78: e5933000 ldr r3, [r3]
7c: e50b3010 str r3, [fp, #-16]
80: e51b3010 ldr r3, [fp, #-16]
84: e2033002 and r3, r3, #2 ; 0x2
88: e3530000 cmp r3, #0 ; 0x0
8c: 0a000004 beq a4 <main+0x8c>
90: e3a03456 mov r3, #1442840576 ; 0x56000000
94: e2833014 add r3, r3, #20 ; 0x14
98: e3a02e1f mov r2, #496 ; 0x1f0
9c: e5832000 str r2, [r3]
a0: eafffff2 b 70 <main+0x58>
a4: e3a03456 mov r3, #1442840576 ; 0x56000000
a8: e2833014 add r3, r3, #20 ; 0x14
ac: e3a02000 mov r2, #0 ; 0x0
b0: e5832000 str r2, [r3]
看来我堆栈设置有问题,但是 这个设置代码 在我以前一个板子2410上都没有问题…………
感谢大家的解答!! |
|