mini2440按键裸机程序编写运行

1.开发环境

操作系统:linux

开发板:mini2440

2.原理图


K1EINT8GPG0
K2EINT11GPG3
K3EINT13GPG5
K4EINT14GPG6
K5EINT15GPG7
K6EINT19GPG11

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/  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值