1.开发环境
操作系统:linux
开发板:mini2440
2.原理图
K1 | EINT8 | GPG0 |
K2 | EINT11 | GPG3 |
K3 | EINT13 | GPG5 |
K4 | EINT14 | GPG6 |
K5 | EINT15 | GPG7 |
K6 | EINT19 | GPG11 |
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:输入功能
- //LED
- unsigned long *GPBCON = 0x56000010;
- unsigned long *GPBDAT = 0x56000014;
- *GPBCON &= 0xfffc03ff;<span style="white-space:pre"> </span>//功能设置:输出功能 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/