博客
2017-03-17 23:32
148 查看
#include "s3c2451_gpio.h"
GPIO_MemMapPtr const PORT_BASE_PTR[7] = {GPIOA_BASE_PTR,GPIOB_BASE_PTR,GPIOC_BASE_PTR,GPIOD_BASE_PTR,GPIOE_BASE_PTR,GPIOF_BASE_PTR,GPIOG_BASE_PTR};
void GPIO_Init(GPIO_Typedef portx,GPIO_Init_Typedef gpio_init_struct)
{
U8 i=0;
for(i=0;i<32;i++)
{
if((gpio_init_struct.pinx&(1<<i)) == (1<<i))
{
//select mode
if(GPIOA ==portx)
{
if(gpio_init_struct.mode == GPIO_MODE_OUT)
{
PORT_BASE_PTR[portx]->GPCON &= ~(1<<i);
}
else if(gpio_init_struct.mode == GPIO_MODE_ALT)
{
PORT_BASE_PTR[portx]->GPCON |= (1<<i);
}
}else{
PORT_BASE_PTR[portx]->GPCON &= ~(3<<(2*i));
PORT_BASE_PTR[portx]->GPCON |= (gpio_init_struct.mode<<(2*i));
//pull - up
PORT_BASE_PTR[portx]->GPUDP &= ~(3<<(2*i));
PORT_BASE_PTR[portx]->GPUDP |= (gpio_init_struct.udp<<(2*i));
}
}
}
}
void GPIO_WriteBit(GPIO_Typedef portx,U32 pinx,BIT_Typedef bit)
{
if( BIT_SET == bit)
{
PORT_BASE_PTR[portx]->GPDAT |= pinx;
}else
{
PORT_BASE_PTR[portx]->GPDAT &= ~pinx;
}
}
BIT_Typedef GPIO_ReadBit(GPIO_Typedef portx,U32 pinx)
{
if((PORT_BASE_PTR[portx]->GPDAT & pinx) == pinx)
{
return BIT_SET;
}else
{
return BIT_RESET;
}
}
GPIO_MemMapPtr const PORT_BASE_PTR[7] = {GPIOA_BASE_PTR,GPIOB_BASE_PTR,GPIOC_BASE_PTR,GPIOD_BASE_PTR,GPIOE_BASE_PTR,GPIOF_BASE_PTR,GPIOG_BASE_PTR};
void GPIO_Init(GPIO_Typedef portx,GPIO_Init_Typedef gpio_init_struct)
{
U8 i=0;
for(i=0;i<32;i++)
{
if((gpio_init_struct.pinx&(1<<i)) == (1<<i))
{
//select mode
if(GPIOA ==portx)
{
if(gpio_init_struct.mode == GPIO_MODE_OUT)
{
PORT_BASE_PTR[portx]->GPCON &= ~(1<<i);
}
else if(gpio_init_struct.mode == GPIO_MODE_ALT)
{
PORT_BASE_PTR[portx]->GPCON |= (1<<i);
}
}else{
PORT_BASE_PTR[portx]->GPCON &= ~(3<<(2*i));
PORT_BASE_PTR[portx]->GPCON |= (gpio_init_struct.mode<<(2*i));
//pull - up
PORT_BASE_PTR[portx]->GPUDP &= ~(3<<(2*i));
PORT_BASE_PTR[portx]->GPUDP |= (gpio_init_struct.udp<<(2*i));
}
}
}
}
void GPIO_WriteBit(GPIO_Typedef portx,U32 pinx,BIT_Typedef bit)
{
if( BIT_SET == bit)
{
PORT_BASE_PTR[portx]->GPDAT |= pinx;
}else
{
PORT_BASE_PTR[portx]->GPDAT &= ~pinx;
}
}
BIT_Typedef GPIO_ReadBit(GPIO_Typedef portx,U32 pinx)
{
if((PORT_BASE_PTR[portx]->GPDAT & pinx) == pinx)
{
return BIT_SET;
}else
{
return BIT_RESET;
}
}