kifile 发表于 2012-9-1 10:10:33

tq2440,GPB8口的用途

刚开始学习ARM,编了一个挺简单的键盘控制LED的程序,可是发现LED4无论按键与否。总是亮着,求高手指导,代码如下


#define GPBCON      (*(volatile unsigned long *)0x56000010)
#define GPBDAT      (*(volatile unsigned long *)0x56000014)

#define GPFCON      (*(volatile unsigned long *)0x56000050)
#define GPFDAT      (*(volatile unsigned long *)0x56000054)

/*
* LED
*/
#define        GPB5_out        (1<<(5*2))
#define        GPB6_out        (1<<(6*2))
#define        GPB7_out        (1<<(7*2))
#define        GPB8_out        (1<<(8*2))

#define        GPB5_msk        (3<<(5*2))
#define        GPB6_msk        (3<<(6*2))
#define        GPB7_msk        (3<<(7*2))
#define        GPB8_msk        (3<<(8*2))

/*
*Key
*/

#define        GPF0_in        (0<<(0*2))
#define        GPF1_in        (0<<(1*2))
#define        GPF2_in        (0<<(2*2))
#define        GPF4_in        (0<<(4*2))

#define        GPF0_msk        (3<<(0*2))
#define        GPF1_msk        (3<<(1*2))
#define        GPF2_msk        (3<<(2*2))
#define        GPF4_msk        (3<<(4*2))



int main()
{
      unsigned long dwDat;
      
      GPBCON &= ~(GPB5_msk | GPB6_msk | GPB7_msk | GPB8_msk); //清零
      GPBCON |= GPB5_out | GPB6_out | GPB7_out| GPB8_out;//设置输出
      
      
      GPFCON &= ~(GPF0_msk | GPF1_msk | GPF2_msk | GPF4_msk);
      GPFCON |= GPF0_in | GPF1_in | GPF2_in | GPF4_in;


      while(1){
            
            dwDat = GPFDAT;            
      
            if (dwDat & (1<<1))
                GPBDAT |= (1<<5);      
            else   
                GPBDAT &= ~(1<<5);
               
            if (dwDat & (1<<4))
                GPBDAT |= (1<<6);
            else   
                GPBDAT &= ~(1<<6);
   
            if (dwDat & (1<<2))
                GPBDAT |= (1<<7);
            else   
                GPBDAT &= ~(1<<7);

            if (dwDat & (1<<0))
                GPBDAT |= (1<<8);
            else   
                GPBDAT &= ~(1<<8);
       

    }

    return 0;
}

embedsky_lhh 发表于 2012-9-1 12:09:28

你把LED换个按键控制看是否正常,如果正常了,那就可能是那个键有问题,如果还是不正常那就灯有问题

kifile 发表于 2012-9-1 15:43:48

应该是LED灯的问题吧,我把            if (dwDat & (1<<0))
                GPBDAT |= (1<<8);
            else   
                GPBDAT &= ~(1<<8);去掉之后,LED灯还是亮着
页: [1]
查看完整版本: tq2440,GPB8口的用途