- 积分
- 2
贡献0
飞刀0 FD
注册时间2010-5-24
在线时间0 小时
扫一扫,手机访问本帖
|
板子附带光盘中的<按键控制蜂鸣器实验>的代码没有进行任何修改,下载到MyApp分区运行,按下按键却没有任何反应,希望斑竹和大侠们帮忙找找原因.
板子是OK2440-III,编译选项分别为 -entry 0x32000000 -ro-base 0x32000000;
//init.s文件如下:
AREA |DATA|,CODE,READONLY
ENTRY
ldr r13, =0x1000
IMPORT keyMain
b keyMain
END
//main.c文件如下:
/*********************按键实验*********************************/
// 公司名称 :保定飞凌嵌入式技术有限公司
// 描 述 :按键控制蜂鸣器
#define GPFCON (*(volatile unsigned *)0x56000050)
#define GPFDAT (*(volatile unsigned *)0x56000054)
#define GPFUP (*(volatile unsigned *)0x56000058)
#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
#define GPBUP (*(volatile unsigned *)0x56000018)
void Delay(int count)
{
unsigned int i;
while(--count != 0)
{
for(i = 0; i < 0xfff; i++); // ";" 表示空语句,CPU空转。
} // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
}
void BEEP_ON()
{
GPBDAT|=0x01;
}
void BEEP_OFF()
{
GPBDAT&=0xfffe;
}
void BeepCount(unsigned char count)
{
unsigned int time;
time=count*120;
if(time!=0)
{
BEEP_ON(); Delay(time);
BEEP_OFF();Delay(time);
}
}
unsigned char KeyNum(void)
{
unsigned char KeyTemp;
KeyTemp=0;
if ((GPFDAT&0x01)==0) KeyTemp=1;
if ((GPFDAT&0x04)==0) KeyTemp=2;
if ((GPBDAT&0x20)==0) KeyTemp=16;
if ((GPBDAT&0x40)==0) KeyTemp=8;
//if ((GPBDAT&0x80)==0) KeyTemp=4;
return KeyTemp;
}
int keyMain()
{
GPBCON&=0x3f03fc; //GPB5 GPB6 GPB7 GPB0清零
GPBCON|=0x01; // GPB0 输出有效
GPFCON&=0x0ffcc; // GPF0 GPF2清零
BEEP_OFF(); // 蜂鸣器不蜂鸣
while(1) // 死循环
{
BeepCount(KeyNum());
}
}
初步怀疑是GPFUP和GPBUP没有初始化的问题,但进行了各种初始化尝试之后还是没有结果;(私下觉得实验代码是随板子配送的,飞凌应该进行验证了,应该没有问题的,再说论坛中大家也没有反应该问题).
本人现在还不明白IO口在哪种情况下要进行上拉使能,什么情况下禁止上拉使能,希望斑竹和大侠们指点一下.谢谢! |
|