您的位置:首页 > 其它

检测按键

2012-11-27 20:40 113 查看
硬件说明

按键KEYINT3 练到s3c6410的GPN2脚,且键按下时,GPN2脚为低电平。

GPN配置寄存器GPNCON的地址为0x7F008830, 且[5:4] 位配置为00时,表示GPN2脚用于输入功能。

GPN数据寄存器GPNDAT的地址为0x7F008834,且读取[2]位就能得到GPN2脚的电平状态。

GPN上拉控制寄存器GPNPUD 的地址为0x7F008838。

代码文件key.S

[plain] view
plaincopy

.text  

.global main  

main:  

    stmfd   sp!, {r0-r12, lr}  

  

    ldr r0, =0  

    ldr r1, GPNCON  

    str r0, [r1]  

  

check:  

    ldr r1, GPNDAT  

    ldr r0, [r1]  

    and r0, r0, #(1 << 1)  

    cmp r0, #0  

    bne check  

  

    ldr r0, =mystr  

    mov lr, pc  

    ldr pc, printf  

  

    bl  delay  

    b   check  

  

    ldmfd   sp!, {r0-r12, pc}  

  

.global delay  

delay:  

    stmfd   sp!, {lr}  

    ldr r2, =0xffffff  

dloop:  

    subs    r2, r2, #1  

    bne dloop  

    ldmfd   sp!, {pc}  

  

GPNCON:  

    .word   0x7F008830  

GPNDAT:  

    .word   0x7F008834  

GPNPUD:  

    .word   0X7F008838  

printf:  

    .word   0x57e11df8  

mystr:  

    .string "key pressed...\n"  

    .align 4  

把u-boot编译为nandflash启动,然后运行下面命令

[html] view
plaincopy

# arm-none-linux-gnueabi-nm u-boot | grep printf  

输出结果

[plain] view
plaincopy

57e11d68 T fprintf  

57e11df8 T printf  

57e11fdc T serial_printf  

57e1917c T sprintf  

57e11dcc T vprintf  

57e18d78 T vsprintf  

可知道printf函数在nandflash的地址为0x57e11df8,我们可以通过汇编直接调用它。

连接脚本key.lds

获得lds脚本模板

[plain] view
plaincopy

# arm-none-linux-gnueabi-ld --verbose > key.lds  

修改为

[plain] view
plaincopy

OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",  

          "elf32-littlearm")  

OUTPUT_ARCH(arm)  

ENTRY(main)  

SECTIONS  

{  

    . = 0x50008000 ;  

    .text :  

    {  

        *(.text) ;  

    }  

    .align = 4 ;  

}  

编译程序

[plain] view
plaincopy

# arm-none-linux-gnueabi-gcc -c key.S -o key.o  

# arm-none-linux-gnueabi-ld -T key.lds key.o -o key  

# arm-none-linux-gnueabi-objcopy -O binary key /tftpboot/key.bin  

运行程序

在u-boot命令状态

[html] view
plaincopy

$ tftp 0x50008000 key.bin  

$ go 0x50008000  

运行结果

按下按键,则打印

[plain] view
plaincopy

key pressed...                                                                                       

key pressed...                                                                                       

key pressed...                                                                                       

key pressed...   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: