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

时间:2021-01-20 19:53:45

GPIO:General Purpose Input/Output (GPIO) Control

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

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

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

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

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

查找EXINT 在核心板上

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

与GPX3_2(3/4/5)重用

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

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

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

led灯在核心板上:

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

手册上查找GPM4:

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


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


实现原理

将按键和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 k4


void (*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  运行程序

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


 

测试结果

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

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

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