#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;
}
}
本文介绍了S3C2451微控制器中GPIO端口的初始化及读写操作方法。通过具体的C语言代码示例,详细展示了如何设置GPIO的工作模式和上拉电阻,并提供了写入和读取GPIO引脚状态的函数实现。
363

被折叠的 条评论
为什么被折叠?



