mini2440按键裸机程序编写运行

1.开发环境

操作系统:linux

开发板:mini2440

2.原理图

mini2440按键裸机程序编写运行_第1张图片

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寄存器的值)

[html]  view plain copy
  1. //按键  
  2. unsigned long *GPGCON = 0x56000060;  
  3. unsigned long *GPGDAT = 0x56000064;  
  4.   
  5. *GPGCON &= 0xffffc33c;//只用到4个按键GPG0 GPG3 GPG5 GPG6,功能设为00:输入功能  
b)我们按下按键,想让对应的LED1——4,对应点亮,那么LED设置如下:

[html]  view plain copy
  1. //LED  
  2. unsigned long *GPBCON = 0x56000010;  
  3. unsigned long *GPBDAT = 0x56000014;  
  4. *GPBCON &= 0xfffc03ff;<span style="white-space:pre">    span>//功能设置:输出功能 01  
  5. *GPBCON |= 0x00015400;  
  6.   
  7. //1110 0001 1111  
  8. *GPBDAT &= 0xfffffe1f;  
  9. *GPBDAT |= (0xf<<5);//LED全灭  

c)代码如下:

[cpp]  view plain copy
  1. void key(void)  
  2. {  
  3.     //按键  
  4.     unsigned long *GPGCON = 0x56000060;   
  5.     unsigned long *GPGDAT = 0x56000064;  
  6.   
  7.     //     1100 0011 0011 1100  
  8.     //     c      3    3   c  
  9.     *GPGCON &= 0xffffc33c;//只用到4个按键GPG0 GPG3 GPG5 GPG6,功能设为00:输入功能  
  10.        
  11.     //LED  
  12.         unsigned long *GPBCON = 0x56000010;  
  13.         unsigned long *GPBDAT = 0x56000014;  
  14.         *GPBCON &= 0xfffc03ff;  
  15.         *GPBCON |= 0x00015400;  
  16.   
  17.     //1110 0001 1111  
  18.         *GPBDAT &= 0xfffffe1f;  
  19.     *GPBDAT |= (0xf<<5);//全亮  
  20.       
  21.     int i;  
  22.     int n;  
  23.     for(i = 0; i<5; i++)  
  24.     {  
  25.         *GPBDAT &= 0xfffffe1f;  
  26.         for(n = 0; n <0x100000;n++);  
  27.         *GPBDAT |= (0Xf<<5);  
  28.         for(n = 0; n<0x100000;n++);  
  29.     }  
  30.   
  31.     while(1)  
  32.     {  
  33.         if((*GPGDAT & (1)) == 0)  
  34.         {  
  35.             *GPBDAT &= ~(1<<5);  
  36.   
  37.         }  
  38.         else  
  39.         {  
  40.             *GPBDAT |= (1<<5);  
  41.   
  42.         }     
  43.                 if((*GPGDAT & (1<<3)) == 0)  
  44.                 {  
  45.                         *GPBDAT &= ~(1<<6);  
  46.                 }  
  47.                 else  
  48.                 {         
  49.                         *GPBDAT |= (1<<6);  
  50.                 }  
  51.                 if((*GPGDAT & (1<<5)) == 0)  
  52.                 {  
  53.                         *GPBDAT &= ~(1<<7);  
  54.                 }  
  55.                 else  
  56.                 {         
  57.                         *GPBDAT |= (1<<7);  
  58.                 }  
  59.                 if((*GPGDAT & (1<<6)) == 0)  
  60.                 {  
  61.                         *GPBDAT &= ~(1<<8);  
  62.                 }  
  63.                 else  
  64.                 {         
  65.                         *GPBDAT |= (1<<8);  
  66.                 }  
  67.     }  
  68. }  


d)Makefile文件:

[plain]  view plain copy
  1. key_test.bin:key_test  
  2.     arm-linux-objcopy -O binary ./key_test key_test.bin  
  3. key_test:key_test.o  
  4.     arm-linux-ld -Ttext=0x30000000 key_test.o -o key_test  
  5. key_test.o:key_test.c  
  6.     arm-linux-gcc -c key_test.c -o key_test.o  
  7. .PHONY:clear copy  
  8. clear:  
  9.     rm -rf key_test.o key_test key_test.bin  
  10. copy:  
  11.     cp key_test.bin /var/lib/tftpboot/  

你可能感兴趣的:(Linux)