naihecao 发表于 2010-5-25 00:31:57

有关按键控制蜂鸣器实验的问题

板子附带光盘中的<按键控制蜂鸣器实验>的代码没有进行任何修改,下载到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 charKeyNum(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 GPB6GPB7 GPB0清零
        GPBCON|=0x01;   // GPB0 输出有效
        GPFCON&=0x0ffcc;    // GPF0GPF2清零
        BEEP_OFF();               // 蜂鸣器不蜂鸣
        while(1)                                                // 死循环
        {
                BeepCount(KeyNum());
        }
}

初步怀疑是GPFUP和GPBUP没有初始化的问题,但进行了各种初始化尝试之后还是没有结果;(私下觉得实验代码是随板子配送的,飞凌应该进行验证了,应该没有问题的,再说论坛中大家也没有反应该问题).
本人现在还不明白IO口在哪种情况下要进行上拉使能,什么情况下禁止上拉使能,希望斑竹和大侠们指点一下.谢谢!

飞凌-seventeen 发表于 2010-5-25 09:22:19

http://bbs.witech.com.cn/thread-960-1-1.html
在ads下一般输出的时候使能了上拉
你可以再论坛上搜一下有相关上拉的文章

naihecao 发表于 2010-5-25 11:49:09

回复 2# 飞凌-seventeen


    你给的连接是教如何下载程序到板子上的,这个我是会的,我成功下载好几个程序到板子上,都可以运行;按键控制蜂鸣器实验没有正确结果应该和这无关;
按你的说法IO口作为输出上拉是和ADS编译器有关系?

catch 发表于 2010-5-26 21:12:53

naihecao 发表于 2010-5-26 23:04:11

回复 4# catch


    请问你刚开始无法运行的原因?后来采取什么措施就可以了?有什么地方需要注意的嘛?你的代码和我上面贴出的差别大吗?谢谢,我卡在这里都半个月了,一直没有进展。

liulutong 发表于 2010-6-1 10:12:40

liulutong 发表于 2010-6-1 10:13:23

页: [1]
查看完整版本: 有关按键控制蜂鸣器实验的问题