ARM裸机——FS2410按键控制LED灯(查询方式)
2012-03-26 23:12
471 查看
一、开发环境
1、硬件平台:FS2410(s3c2410)
2、主机:Ubuntu 10.10
二、硬件的原理图(LED和按键)
1、LED灯的原理图:
2、按键的原理图:
按键的接线资源:
KSCAN0 -> GPE11 KSCAN1 -> GPG6 KSCAN2 -> GPE13 KSCAN3 -> GPG2
EINT0 -> GPF0 EINT2 -> GPF2 EINT11 -> GPG3 EINT19 -> GPG11
三、程序的主要原理:
主要涉及到K1,K2, K3, K4这四个按键,要用查询的方式进行判断哪个键被按下去了,因此将EINT11, EINT19设置为输入,用于读取,将KSCAN0,KSCAN1, KSACAN2,设置为输出,并分别设置为0,1,1或1,0,1或1,1,0这三种情况下,这样可用于区分K1、K2、K3中哪个键按下去,例如先让KSCAN0~2 = 011,那么K1被按下时,EINT19才会变为低电平,这时K2按下时,EINT19不会变低,这样就区分了按键K1和K2,区分其它按键原理一样。
四、寄存器的配置
1、有关LED的寄存器的配置:(设置GPF4-GPF7为输出)
2、按键方面涉及到寄存器配置(设置相关寄存器输入输出):
五、程序的详细代码:
led_key.c:(s3c2410.h头文件可在keil目录下找到,由s3c2440.h重命名得来)
Makefile:
启动文件start.S:
然后在开发板的uboot上执行以下命令:
tftp 30008000 led_key.bin
go 30008000
1、硬件平台:FS2410(s3c2410)
2、主机:Ubuntu 10.10
二、硬件的原理图(LED和按键)
1、LED灯的原理图:
2、按键的原理图:
按键的接线资源:
KSCAN0 -> GPE11 KSCAN1 -> GPG6 KSCAN2 -> GPE13 KSCAN3 -> GPG2
EINT0 -> GPF0 EINT2 -> GPF2 EINT11 -> GPG3 EINT19 -> GPG11
三、程序的主要原理:
主要涉及到K1,K2, K3, K4这四个按键,要用查询的方式进行判断哪个键被按下去了,因此将EINT11, EINT19设置为输入,用于读取,将KSCAN0,KSCAN1, KSACAN2,设置为输出,并分别设置为0,1,1或1,0,1或1,1,0这三种情况下,这样可用于区分K1、K2、K3中哪个键按下去,例如先让KSCAN0~2 = 011,那么K1被按下时,EINT19才会变为低电平,这时K2按下时,EINT19不会变低,这样就区分了按键K1和K2,区分其它按键原理一样。
四、寄存器的配置
1、有关LED的寄存器的配置:(设置GPF4-GPF7为输出)
2、按键方面涉及到寄存器配置(设置相关寄存器输入输出):
五、程序的详细代码:
led_key.c:(s3c2410.h头文件可在keil目录下找到,由s3c2440.h重命名得来)
#include "s3c2410.h" void delay(long long max) //延迟函数 { for(; max > 0; max--); } int main(void) { int read_value; GPFCON = GPFCON & (~(0xff) << 8) | (0x55 << 8); //设置4个LED灯为输出(GPF4-GPF7输出) GPFDAT |= (0xf << 4); //先将4个灯都熄灭掉 GPGCON = (0 << 7) | (1 << 12) | (0 << 23); //GPG3, GPG11 输入,GPG6, GPE11, GPE13输出 GPECON = (1 << 22) | (1 << 26); while(1) { GPEDAT &= (0 << 11); //将GPE11置0,同时将GPE13和GPG6置1 GPEDAT |= (1 << 13); GPGDAT |= (1 << 6); read_value = GPGDAT & 0x808; //读取GPG11和GPG3的输入值 if((read_value & 0x800) == 0) //判断GPG11输入是否为0,以此判断K1键是否按下 { read_value = 0x800; delay(200000); //按键去抖 if((read_value &= GPGDAT) == 0) { if((GPFDAT & (1 << 4)) == 0) //判断D12是否亮着,如果亮着则熄灭,反之相反 GPFDAT |= (0x1 << 4); else GPFDAT &= (0xe << 4); } } else { if((read_value & 0x8) == 0) //判断GPG3输入的值是否为0, 以此K4键是否按下 { read_value = 0x8; delay(200000); //按键去抖 if((read_value &= GPGDAT) == 0) { if((GPFDAT & (0x8 << 4)) == 0) //判断D9是都亮着,如果亮着则熄灭,反之相反 GPFDAT |= (0x8 << 4); else GPFDAT &= (0x7 << 4); } } } GPEDAT |= (1 << 11); //将GPE11和GPE13置1,同时将GPG6置0 GPEDAT |= (1 << 13); GPGDAT &= (0 << 6); read_value = GPGDAT & (0x8 << 8); //读取GPG11的值 if(read_value == 0) //判断GPG11是否输入0,以此判断K2键按下 { read_value = 0x800; delay(200000); //按键去抖 if((read_value &= GPGDAT) == 0) { if((GPFDAT & (0x2 << 4)) == 0) //判断D11是否亮着, 如果亮着则熄灭,反之相反 GPFDAT |= (0x2 << 4); else GPFDAT &= (0xd << 4); } } GPEDAT &= (0 << 13); //将GPE13置0, 同时将GPE11和GPG6置1 GPEDAT |= (1 << 11); GPGDAT |= (1 << 6); read_value = GPGDAT & 0x800; //读取GPG11的值 if(read_value == 0) //判断GPG11是否为0,以此判断K3键是否按下 { read_value = 0x800; delay(200000); //按键去抖,延迟一段时间 if((read_value &= GPGDAT) == 0) { if((GPFDAT & (0x4 << 4)) == 0) //判断D10是否亮着,如果亮着则熄灭,反之相反 GPFDAT |= (0x4 << 4); else GPFDAT &= (0xb << 4); } } } return 0; }
Makefile:
led.bin: start.S led_key.c arm-none-linux-gnueabi-gcc -c start.S -o start.o arm-none-linux-gnueabi-gcc -c led_key.c -o led_key.o arm-none-linux-gnueabi-ld -Ttext 0x30008000 start.o led_key.o -o led_key arm-none-linux-gnueabi-objcopy -O binary -S led_key led_key.bin clean: rm -f *.o led_key.bin
启动文件start.S:
.text .global _start _start: #define WATCHDOG 0x53000000 ldr r0, =WATCHDOG mov r1, #0 str r1, [r0] ldr sp, =1024*4 bl main loop: b loop
然后在开发板的uboot上执行以下命令:
tftp 30008000 led_key.bin
go 30008000
相关文章推荐
- ARM裸机——FS2410按键控制LED(中断方式)
- 从ARM裸机看驱动之按键中断方式控制LED(二)
- 用查询方式,用按键控制led灯亮灭
- Tiny6410按键轮询方式控制LED的SD卡启动裸机程序
- 【嵌入式】——arm裸机开发 step by step 之 按键控制 LED 和 蜂鸣器
- ARM裸机程序开发——按键控制LED灯
- 用查询方式去控制led灯(ARM 驱动开发)
- 【ARM】按键・查询式控制led灯・fs2410
- 用定时器T0查询方式P0口8位控制LED闪烁
- 【ARM】2410裸机系列-按键查询式控制led
- 国嵌实验:key_poll,采用查询的方式一旦按键再松开,LED亮灭一次
- STM32学习笔记之按键查询方式控制led灯的亮灭
- 基于mini2440的按键中断控制LED(裸机代码)
- 用定时器T0查询方式P0口8位控制LED闪烁
- ARM裸机程序开发10(LED控制程序)
- 定时器 T1 通过查询方式控制 LED1 周期性闪烁
- 第三个实验 通过中断方式让按键控股按键控制LED
- TQ210_裸机编程(二)——按键控制LED灯
- S3C2440按键查询方式点亮LED汇编程序
- 【ARM】按键·查询式控制led灯·fs2410