#ifndef _S3C2451_GPIO_
#define _S3C2451_GPIO_
#define GPACON *((volatile int *)0x56000000)
#define GPADATA *((volatile int *)0x56000004)
#define GPBCON *((volatile int *)0x56000010)
#define GPBDATA *((volatile int *)0x56000014)
#define GPFCON *((volatile int *)0x56000050)
#define GPFDATA *((volatile int *)0x56000054)
#define BIT(n) (1 << (n))
enum{
GPAIO = 0,
GPBIO,
GPFIO
};
enum{
INPUT = 0,
OUTPUT
};
int GPIO_key();
int GPIO_init(int gpiox,int pin,int dir);
int GPIO_writedata(int gpiox,int pin,int data);
#endif
#include"s3c2451_gpio.h"
char temp = 0;
char i = 0;
int GPIO_init(int gpiox,int pin,int dir)
{
if(gpiox == GPBIO)
{
if(dir == INPUT)
{
GPBCON &= ~BIT(pin*2);
GPBCON &= ~BIT(pin*2 + 1);
}
else if(dir == OUTPUT)
{
GPBCON |= BIT(pin*2);
GPBCON &= ~BIT(pin*2 + 1);
}
}
else if(gpiox == GPAIO)
{
if(dir == OUTPUT)
{
GPACON &= ~BIT(pin);
}
}
else if(gpiox == GPFIO)
{
if(dir == INPUT)
{
GPFCON &= ~BIT(pin*2);
GPFCON &= ~BIT(pin*2 + 1);
}
else if(dir == OUTPUT)
{
GPFCON |= BIT(pin*2);
GPFCON &= ~BIT(pin*2 + 1);
}
}
return 0;
}
int GPIO_writedata(int gpiox,int pin,int data)
{
if(gpiox == GPBIO)
{
if(data == 0)
GPBDATA &= ~BIT(pin);
else
GPBDATA |= BIT(pin);
}
else if(gpiox == GPAIO)
{
if(data == 0)
GPADATA &= ~BIT(pin);
else
GPADATA |= BIT(pin);
}
return 0;
}
int GPIO_key()
{
if((GPFDATA & 0x01)== 0)
{
i++;
if(i%2)
GPIO_writedata(GPBIO,5,0);
else
GPIO_writedata(GPBIO,5,1);
}
else if((GPFDATA & 0x02)== 0)
{
GPIO_writedata(GPBIO,6,temp);
temp = ~temp;
temp &= 0x01;
}
else if((GPFDATA & 0x04)== 0)
{
GPIO_writedata(GPAIO,25,0);
}
else if((GPFDATA & 0x08)== 0)
{
GPIO_writedata(GPAIO,26,0);
}
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-36210.html