通过查看开发板的核心电路原理图,加上查阅SUMSANG
2440的datasheed得知四个按键K1,K2,K3,K4对应GPF中的GPF1,GPF4,GPF2,GPF0。将这四个引脚配置为输入模式,
这样通过GPFDAT寄存器中的相应为来得知哪个键被按下,当某个键被按下时,相应连接引脚接地,为低电平,在GPFDAT中相应的为表现为逻辑0。否则
为1。
设置C语言环境的汇编文件和循环点亮LED灯的实验中的一样,Makefile也不需要修改,当然,如果改变源文件的名称还是需要去修改Makefile的。贴出main.c文件如下:
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
#define LED4_SET_OUTPUT ((1<<10) | (1<<12) | (1<<14) | (1<<16))
#define LED1_ON (~(1<<5))
#define LED2_ON (~(1<<6))
#define LED3_ON (~(1<<7))
#define LED4_ON (~(1<<8))
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
#define KEY4_SET_INPUT (~((3<<0) | (3<<2) | (3<<4) | (3<<8)))
#define KEY_1 (1 << 1)
#define KEY_2 (1 << 4)
#define KEY_3 (1 << 2)
#define KEY_4 (1 << 0)
#define __IS_KEY_PRESSED(dat, keyno) \
(!(dat & KEY_##keyno))
int main(void)
{
volatile unsigned long dat;
GPBCON |= LED4_SET_OUTPUT;
GPFCON |= KEY4_SET_INPUT;
while(1) {
dat = GPFDAT;
#define IS_KEY_PRESSED(n) __IS_KEY_PRESSED(dat, n)
if(IS_KEY_PRESSED(1))
GPBDAT = LED1_ON;
else if(IS_KEY_PRESSED(2))
GPBDAT = LED2_ON;
else if(IS_KEY_PRESSED(3))
GPBDAT = LED3_ON;
else if(IS_KEY_PRESSED(4))
GPBDAT = LED4_ON;
}
return 0;
}
阅读(2764) | 评论(0) | 转发(0) |