tiny4412-arm嵌入式开发裸板驱动 (二):arm基础GPIO操作

来源:互联网 发布:抗战中日伤亡真实数据 编辑:程序博客网 时间:2024/04/27 21:55

GPIO:General Purpose Input/Output (GPIO) Control


具体查阅exynos4412手册第六章或google GPIO

本章介绍操作GPIO相关寄存器实现按键控制led灯亮灭或蜂鸣器buzzer。

按键keys在母板上 与XEINT_n相连接


查找EXINT 在核心板上


与GPX3_2(3/4/5)重用

查找手册上:需要控制的寄存器



led灯在核心板上:


手册上查找GPM4:





实现原理

将按键和led对应的寄存器设定为input/output,程序检测到按键输入,则向led输出

实现代码如下

//keysleds.c      wycinxaut原创并测试通过//实现4个按键控制4个led亮灭#define GPX3CON (*(volatile unsigned long*)0x11000c60)#define GPX3DAT (*(volatile unsigned long*)0x11000c64)#define GPM4CON (*(volatile unsigned long*)0x110002e0)#define GPM4DAT (*(volatile unsigned long*)0x110002e4)//GPX3CON[2,3,4,5] -----k1 k2 k3 k4void (*printf)(char*, ...) = 0x43e11434;void main(void){    printf("printf ok!\n");    init_led();    GPX3CON &= ~(0xffff << 8);    while(1)    {        if((GPX3DAT & (1 << 2))==0)        {            delay();            if((GPX3DAT & (1 << 2))!=0)            led_on_off(1);        }        if((GPX3DAT & (1 << 3))==0)        {            delay();            if((GPX3DAT & (1 << 3))!=0)            led_on_off(2);        }        if((GPX3DAT & (1 << 4))==0)        {            delay();            if((GPX3DAT & (1 << 4))!=0)            led_on_off(3);        }        if((GPX3DAT & (1 << 5))==0)        {            delay();            if((GPX3DAT & (1 << 5))!=0)            led_on_off(4);        }    }}void delay(void){    int i=0;    for(i=0; i<600000;i++);}void init_led(void){    GPM4CON &= ~0xffff;    GPM4CON |= 0x1111;    GPM4DAT |= 0xf;}void led_on_off(int i){    switch(i)    {        case 1: GPM4DAT ^= (1 << 0); printf("led1\n"); break;        case 2: GPM4DAT ^= (1 << 1); printf("led2\n"); break;        case 3: GPM4DAT ^= (1 << 2); printf("led3\n"); break;        case 4: GPM4DAT ^= (1 << 3); printf("led4\n"); break;        default: break;    }}


编译及运行(注:$EXE为要编译c文件的文件名)

arm-linux-gcc -c $EXE.c -o $EXE.o //交叉编译
arm-linux-ld -Ttext=0x50008000 $EXE.o -o $EXE //链接到0x50008000这个内存地址
arm-linux-objcopy -O binary $EXE $EXE.bin //去头,只保留二进制指令

运行:

1.kermit连接开发板,进入uboot,dnw 50008000

2.另开终端 dnw $EXE.bin

3.kermit端:go 50008000  运行程序



测试结果


另注:buzzzer蜂鸣器也可以设置gpio control不再赘述

wycinxaut原创,转载请注明-------by richard wong  2015-03-06 


0 0
原创粉丝点击