- 积分
 - 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口在哪种情况下要进行上拉使能,什么情况下禁止上拉使能,希望斑竹和大侠们指点一下.谢谢! |   
 
 
 
 |