► S3C2440的I/O口特性
S3C2440具有130个可配置为I/O口的引脚,分为别在8个端口,如下所列:
◎ Port A(GPA): 25个I/O口
◎ Port B(GPB): 11个I/O口
◎ Port C(GPC): 16个I/O口
◎ Port D(GPD): 16个I/O口
◎ Port E(GPE): 16个I/O口
◎ Port F(GPF): 8个I/O口
◎ Port G(GPG): 16个I/O口
◎ Port H(GPH): 9个I/O口
◎ Port J(GPJ): 13个I/O口
这些引脚可配置为I/O口,也可以配置为特殊口。在main函数启动之前,每个引脚都已经在启动代码中配置好了,如下所列:
- void Port_Init(void)
- {
- rGPACON = 0x7fffff ;
-
- rGPBCON = 0x055555;
- rGPBUP = 0x6Bf; // The pull up function is disabled GPB[10:0]
-
- rGPCCON = 0xaaaaaaaa;
- rGPCUP = 0xffff; // The pull up function is disabled GPC[15:0]
-
- rGPDCON = 0xaaaaaaaa;
- rGPDUP = 0xffff; // The pull up function is disabled GPD[15:0]
-
- rGPECON = 0xa02aa800; // For added AC97 setting
- rGPEUP = 0xffff;
- rGPFCON = 0x55aa;
- rGPFUP = 0xff; // The pull up function is disabled GPF[7:0]
-
- rGPGCON = 0x00a2aaaa;// GPG9 input without pull-up
- rGPGUP = 0xffff; // The pull up function is disabled GPG[15:0]
-
- rGPHCON = 0x00faaa;
- rGPHUP = 0x7ff; // The pull up function is disabled GPH[10:0]
-
- rGPJCON = 0x02aaaaaa;
- rGPJUP = 0x1fff; // The pull up function is disabled GPH[10:0]
-
- //External interrupt will be falling edge triggered.
- rEXTINT0 = 0x22222222; // EINT[7:0]
- rEXTINT1 = 0x22222222; // EINT[15:8]
- rEXTINT2 = 0x22222222; // EINT[23:16]
- }
复制代码
在应用程序中可根据自己需求再定制,程序中寄存器说明如下:
♥ I/O端口控制寄存器(GPACON-GPJCON)
在S3C2440A中多数引脚具有多元化,可配置多种功能。所以需要GPnCON寄存器对每个引脚当前功能进行配置。
♥ I/O端口数据寄存器(GPADAT-GPJDAT)
如果I/O端口配置为输出口,数据写入PnDAT寄存器可控制Pn端口的输出,相应位为1输出高电平,为0输出低电平。
如果I/O端口配置为输入口,数据可通过读取PnDAT寄存器的值知道I/O口的状态,相应位为1输入高电平,为0输入低电平。
♥ I/O端口数据寄存器(GPBUP-GPJUP)
配置相应的引脚上拉使能,相应位配置为0,该引脚上拉使能;配置为1,不使能。注意,端口A不能配置上拉。
♥ 外部中断寄存器(EXTINT0-EXTINT2)
总共有24个外部中断源,通过EXTINT寄存器配置中断触发方式。
000 |
低电平触发 |
001 |
高电平触发 |
01x |
下降沿触发 |
10x |
上升沿触发 |
11x |
上下沿均可触发 |
上列Port_Init()函数中相应引脚的配置,请详细查阅S3C2440手册。
► 蜂鸣器控制实验
♥ 实验设备
硬件: PC机 一台
YX-AIO嵌入式综合创新设计平台 一台
ARM9核心板 一块
软件: Windows操作系统,ADS1.2集成开发环境,H-JTAG下载环境
♥ 实验内容
控制YX-AIO嵌入式综合创新设计平台上的蜂鸣器报警。
♥ 硬件电路
普通I/O GPA16连接蜂鸣器,通过给GPA16高电平控制蜂鸣器蜂鸣(报警),电路图如下所示:
♥ 实验原理
① 配置GPACON寄存器。该寄存器的第16位控制GPA16(请详细查阅S3C2440英文手册),配置该位为0;
- rGPACON &= ~(1<<16); //设置GPA16口输出
复制代码
② 在程序中设置GPADAT的第16位为1时,GPA16将输出高电平,蜂鸣器进行报警;设置GPADAT的第16位为0时,GPA16将输出低电平,蜂鸣器停止报警。
- rGPADAT |= (1<<16); //GPA16口输出高电平
- rGPADAT &= ~(1<<16); //GPA16口输出低电平
复制代码
♥ 实验步骤
① 在ADS开发环境中使用AIO2440工程模版创建一个工程,并将程序代码添加到该工程;
② 在ADS开发环境中编译链接并生成目标文件;
③ 将JTAG下载器连接YX-AIO嵌入式综合创新设计平台,并将该平台通电;
④ 开启H-JTAG软件检测处理器与NOR-Flash;
⑤ 使用H-JTAG软件将目标文件(.bin)下载到YX-AIO嵌入式综合创新设计平台上;
⑥ 复位平台。
源代码:
- /********************************************************************
- **名称:DelayMS()
- **功能:软件延时
- **入口参数:dly 延时参数
- ********************************************************************/
- void DelayMS(U32 dly)
- { U32 i; //定义一个32位无符号整型变量i
- for(dly=dly+1; dly>0; dly--)
- for(i=6500; i>0; i--);
- }
- /********************************************************************
- ** 文件名:main()
- **-----------------------------------------------------------------
- **------------------------------------------------------------------
- ** 文件名: main.c
- ** 修改时间: 2009-6-1
- ** 描述:
- ********************************************************************/
- void Main(void)
- {
- //----------------添加自己的代码-------------------
- rGPACON &= ~(1<<16);
- while (1)
- {
- rGPADAT |= (1<<16);
- DelayMS(50);
- rGPADAT &= ~(1<<16);
- DelayMS(500);
- }
- }