S3C2410A的GPIO介绍及应用

一、GPIO的概念

GPIO的英文全称是General-Purpose Input/Output Ports,中文意思是通用I/O端口。在嵌入式系统中,经常需要控制许多结构简单的外部设备或者电路,这些设备有的需要通过CPU控制,有的需要CPU提供输入信号,GPIO就是满足这种需求的一种通用可编程I/O端口。

对于每个GPIO端口,其至少需要两个寄存器,一个是控制用的“通用I/O端口控制寄存器”,另一个是存放数据的“通用I/O端口数据寄存器”。数据寄存器的每一位是和GPIO的硬件引脚对应的,数据的传输方向是通过端口控制寄存器控制的。

二、S3C2410A芯片的GPIO特性

S3C2410A芯片内部集成了8组,共117个I/O引脚GPIO,其中GPIO端口分为A~H`等8中端口,每种端口都有第二功能甚至第三功能,对于这些功能可以通过对应的端口控制寄存器进行设置,可以设置为端口输入模式、端口输出模式等。当I/O设置为GPIO输出模式时,可以通过写相应的rGPXDAT寄存器控制相应I/O口输出高电平或低电平,rGPXDAT为1时对应的I/O口输出为高电平,为0时输出为低电平。

GPIO的初始化输入/输出: 
以组位单位进行,GPIO A~GPIO H 共8组。初始化是依据实际应用需求,通过编程进行设置。输入操作是从数据寄存器的相应位中读出数据,输出是将数据写入到数据寄存器的被设置为输出的相应位。


三、S3C2410A的GPIO输出运用

通过对S32410A的GPIO口的设置实现LED1到LED4的亮灭及蜂鸣器报警,蜂鸣器报警一次,LED1~LED4一起亮灭五次,LED1~LED4再以二进制形式按顺序显示0到15,其中LED1为二进制最低位。

#include "config.h"

#define LED1_CON (1 << 11) //GPE11口
#define LED2_CON (1 << 12) //GPE12口
#define LED3_CON (1 << 4)  //GPH4口
#define LED4_CON (1 << 6)  //GPH6口

#define BEEP (1 << 10)  //GPH10口
#define BEEP_MASK (~BEEP)

void DelayNS(uint32 dly)
{
     uint32 i;
     
     for(; dly > 0; dly--)
     {
          for(i = 0; i < 50000; i--);
     }
}

void BEEP()
{
    rGPHDAT = rGPHDAT & BEEP_MASK;
    DelayNS(5);
    rGPHDAT = rGPHDAT |BEEP;
    DelayNS(5);
}

void LED_ON()
{
    rGPEDAT = RGPEDAT | (0X03 << 11);
    rGPHDAT = RGPHDAT | (0X05 << 4);
}

void LED_OFF()
{
    rGPEDAT = RGPEDAT & (~(0X03 << 11));
    rGPHDAT = rGPHDAT & (~(0X05 << 4));
}

void LED_Disnum()
{
    dat = dat & 0x0000000F; //参数过滤
    //控制LED3、LED4显示
    if(dat & 0x08)  
    {
        rGPHDAT = rGPHDAT | (0x01 << 6);
    }
    else
    {
         rGPHDAT = rGPHDAT & (~(0X01 << 6));
     }

     if(dat & 0x04)
     {
          rGPHDAT = rGPHDAT | (0x01 << 4);
     }
      else
      {
           rGPHDAT = rGPHDAT & (~(0x01 << 4));
       }
       //控制LED1、LED2显示
       rGPEDAT = (rGPEDAT&(~(0x03<<11))) | ((dat & 0x03) << 11);
}

int main()
{
    int i;
    
    rGPECON = (rGPECON&(~(0x0f<<22))) | (0x05<<22); //设置GPE11、GPE12为GPIO输出模式
    rGPHCON = (rGPHCON&(~(0x33<<8))) | (0x11<<8); //设置GPH4、GPH6为GPIO输出模式
    rGPHCON = (rGPHCON&(~(0x03<<20))) | (0x01<<20); //设置GPH10为GPIO输出模式

    while(1)
    {
        BEEP();

        for(i = 0; i < 5; i++)
       {
            LED_OFF();
            DelayNS(5);
            LED_ON();
            DelayNS(5);
        }

        for(i = 0; i < 16; i++)
        {
             LED_Disnum(i) ;
             DelayNS(15);
        }
    }

    return 0;
}


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值