开发环境
操作系统:linux
开发板:mini2440
2.原理图
GPGCON控制寄存器地址:
GPGCON控制寄存器功能说明:
3. 操作流程
(只需要操作GPGCON寄存器即可操作K1按键)
a)设置控制寄存器GPGCON为输入功能:00
(即:可读取GPGDAT寄存器的值)
//按键
unsigned long *GPGCON = 0x56000060;
unsigned long *GPGDAT = 0x56000064;
*GPGCON &= 0xffffc33c;//只用到4个按键GPG0 GPG3 GPG5 GPG6,功能设为00:输入功能
b)我们按下按键,想让对应的LED1——4,对应点亮,那么LED设置如下:
//LED
unsigned long *GPBCON = 0x56000010;
unsigned long *GPBDAT = 0x56000014;
*GPBCON &= 0xfffc03ff; //功能设置:输出功能 01
*GPBCON |= 0x00015400;
//1110 0001 1111
*GPBDAT &= 0xfffffe1f;
*GPBDAT |= (0xf<<5);//LED全灭
c)代码如下:
void key(void)
{
//按键
unsigned long *GPGCON = 0x56000060;
unsigned long *GPGDAT = 0x56000064;
// 1100 0011 0011 1100
// c 3 3 c
*GPGCON &= 0xffffc33c;//只用到4个按键GPG0 GPG3 GPG5 GPG6,功能设为00:输入功能
//LED
unsigned long *GPBCON = 0x56000010;
unsigned long *GPBDAT = 0x56000014;
*GPBCON &= 0xfffc03ff;
*GPBCON |= 0x00015400;
//1110 0001 1111
*GPBDAT &= 0xfffffe1f;
*GPBDAT |= (0xf<<5);//全亮
int i;
int n;
for(i = 0; i<5; i++)
{
*GPBDAT &= 0xfffffe1f;
for(n = 0; n <0x100000;n++);
*GPBDAT |= (0Xf<<5);
for(n = 0; n<0x100000;n++);
}
while(1)
{
if((*GPGDAT & (1)) == 0)
{
*GPBDAT &= ~(1<<5);
}
else
{
*GPBDAT |= (1<<5);
}
if((*GPGDAT & (1<<3)) == 0)
{
*GPBDAT &= ~(1<<6);
}
else
{
*GPBDAT |= (1<<6);
}
if((*GPGDAT & (1<<5)) == 0)
{
*GPBDAT &= ~(1<<7);
}
else
{
*GPBDAT |= (1<<7);
}
if((*GPGDAT & (1<<6)) == 0)
{
*GPBDAT &= ~(1<<8);
}
else
{
*GPBDAT |= (1<<8);
}
}
}
d)Makefile文件:
key_test.bin:key_test
arm-linux-objcopy -O binary ./key_test key_test.bin
key_test:key_test.o
arm-linux-ld -Ttext=0x30000000 key_test.o -o key_test
key_test.o:key_test.c
arm-linux-gcc -c key_test.c -o key_test.o
.PHONY:clear copy
clear:
rm -rf key_test.o key_test key_test.bin
copy:
cp key_test.bin /var/lib/tftpboot/
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』