嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验

一、 实验目的

1、掌握仿真器FS-JTAG 的使用方法;
2、掌握主流的ARM开发环境;
3、掌握GPIO的工作原理及其控制LED编程。

二、 实验仪器设备

PC机、Exynos4412 实验箱。

三、 实验原理

1、ARM仿真器简介

JTAG仿真器也称为JTAG调试器,是通过ARM芯片的JTAG边界扫描口进行调试的设备。JTAG仿真器比较便宜,连接比较方便,通过现有的JTAG边界扫描口与 ARM CPU 核通信,属于完全非插入式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何端口,而这些是驻留监控软件所必需的。另外,由于JTAG调试的目标程序是在目标板上执行,仿真更接近于目标硬件。JTAG仿真器进行开发是目前采用最多的一种调试方式。
FS_JTAG ARM 仿真器是华清远见自主研发的Cortex-A 系列 ARM 仿真器。.该款仿真器可以仿真 Cortex-M3、 ARM7、ARM9、ARM11、Cortex-A8、Cortex-A9 等多个 ARM 处理器系列。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第1张图片
2、GPIO简介

通用I/O接口(General Purpose IO,GPIO)是嵌入式系统中一种非常重要的I/O接口。它具有使用灵活、可配置性好、代价小等优点,在嵌入式中被广泛应用。通俗地说,GPIO就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。

GPIO接口至少有两个寄存器,即“通用 IO 控制寄存器”与“通用 IO 数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对这种寄存器中每一位的作用,即每一位的信号流通方向,则可以通过控制寄存器中对应位独立地加以设置。比如,可以设置某个引脚的属性为输入、输出或其他特殊功能。

Exynos4412 的 GPIO 具有如下特性:

(1) 304 个多功能输入输出 GPIO
(2) 37 组通用 GPIO 和 2 组 memory GPIO。
Exynos4412 的 GPIO 分组预览:
(1) GPA0, GPA1: 14 in/out ports-3xUART with flow control, UART without flow control, and/ or 2xI2C
(2) GPB: 8 in/out ports-2xSPI and/ or 2xI2C and/ or IEM
(3) GPC0, GPC1: 10 in/out ports-2xI2S, and/ or 2xPCM, and/ or AC97, SPDIF, I2C, and/ or SPI
(4) GPD0, GPD1: 8 in/out ports-PWM, 2xI2C, and/ or LCD I/F, MIPI
(5) GPF0, GPF1, GPF2, GPF3: 30 in/out ports-LCD I/F
(6) GPM0, GPM1, GPM2, GPM3, GPM4: 35 in/out ports-CAM I/F, and/ or TS I/F, HSI, and/ or Trace I/F
(7) GPJ0, GPJ1: 13 in/out ports-CAM I/F
(8) GPK0, GPK1, GPK2, GPK3: 28 in/out ports-4xMMC (4-bit MMC), and/ or 2xMMC (8-bit MMC) ),and/ or GPS debugging I/F
(9) GPL0, GPL1: 11 in/out ports-GPS I/F
(10) GPL2: 8 in/out ports-GPS debugging I/F or Key pad I/F
(11) GPX0, GPX1, GPX2, GPX3: 32 in/out ports-External wake-up, and/ or Key pad I/F

Exynos4412 的 GPIO 寄存器分类:

(1) 端口控制寄存器(GPA0CON-GPZnCON)
在 Exynos4412 中,大多数的引脚都可复用,所以必须对每个引脚进行配置。端口控制寄存器(GPXnCON)定义了每个引脚的功能。
(2) 端口数据寄存器(GPA0DAT-GPZnDAT)
如果端口被配置成了输出端口,可以向 GPXnDAT 的相应位写数据。如果端口被配置成了输入端口,可以从 GPXnDAT 的相应位读出数据。
(3) 端口上拉寄存器(GPA0PUD - GPZnPUD)
端口上拉寄存器控制了每个端口组的上拉/下拉电阻的使能/禁止。根据对应位的 0/1 组组合,设置对应端口的上拉/下拉电阻功能是否使能。如果端口的上拉电阻被使能,无论在哪种状态(输入、输出、 DATAn、EINTn 等)下,上拉电阻都起作用。
(4) 驱动能力寄存器(GPA0DRV - GPZnDRV)
设置 GPIO 口的驱动能力。

3、Exynos4412 的 GPIO 寄存器设置GPIO引脚
这里以GPF0CON 控制GPF0DAT寄存器为例说明。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第2张图片
即:
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第3张图片
4、实验箱中的LED连接

实验箱中,4个LED灯分别与 GPX2_7、 GPX1_0、 GPF3_4、 GPF3_5 相连,通过这些引脚的高低电平来控制LED 的亮灭,电路原理图如下。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第4张图片
4个LED灯分别与 GPX2_7、 GPX1_0、 GPF3_4、 GPF3_5 相连,通过这些引脚的高低电平来控制LED 的亮灭。

因要输出电平控制LED,故相应端口(引脚)应设置为输出。按其控制格式分别对控制寄存器和数据寄存器进行设置。

根据三极管的特性,当这几个引脚输出高电平时,集电极和发射极导通, LED点亮;反之,LED熄灭。
因此:
(1)设置及点亮GPX1_0所对应的LED灯,其对应的操作为:

  • 设置其控制寄存器GPX1CON[0:3]为1(即输出)
    嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第5张图片
  • 向数据寄存器的对应位GPX1DAT[0]写入高电平
    在这里插入图片描述

(2)设置GPX2_7所对应的LED灯:

  • 设置其控制寄存器GPX2CON[28:31]为1
    嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第6张图片
  • 向数据寄存器的对应位GPX1DAT[7]写入高电平
    在这里插入图片描述

(3)设置GPF3_4、 GPF3_5所对应的LED灯:

  • 设置其控制寄存器GPF3CON[16:23]为1:
    嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第7张图片
  • 向数据寄存器的对应位GPF3DAT[4:5]写入高电平:
    在这里插入图片描述

四、 实验内容及注意事项

1、在PC机中搭建ARM开发环境;
2、通过开发环境编写控制LED灯的程序。

五、 实验组织运行

根据本实验指导书,学生自主训练为主。

六、 实验步骤

(一)开发环境搭建

Eclipse for ARM 是借用开源软件 Eclipse 的工程管理工具,嵌入 GNU 工具集,使之能够开发 ARM 公司 Cortex-A 系列的 CPU,这里使用 Eclipse for ARM作为开发软件。在开发箱中的配套光盘中,打开 FS-JTAG这个目录,可以看如图所示的光盘资料。 Eclipse for ARM 开发工具所在光盘路径: 华清远见\开发平台1\工具软件Windows\FS-JTAG。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第8张图片
1、win7/8 环境安装 FS-JTAG 工具

(1)安装 GCC 编译工具
双击安装“工具软件\Windows\FS-JTAG\Yagarto 工具包”目录下的文件:yagarto-bu-2.21_gcc-4.6.2-c-c++_nl-1.19.0_gdb-7.3.1_eabi_20111119.exe
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第9张图片
(2)安装 Yagarto 工具包

双击安装“\工具软件\Windows\FS-JTAG\Yagarto 工具包”目录下的文件:yagarto-tools-20100703-setup.exe
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第10张图片
(3)安装 FS-JTAG 调试软件
双击“\工具软件\Windows\FS-JTAG\FS_JTAG 安装包”下的 setup.exe 安装 FS-JTAG 工具。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第11张图片
(4)安装 FS-JTAG 驱动

将 FS-JTAG 通过 USB 线与 PC 连接,打开“设备管理器”。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第12张图片
右键点击选择“更新驱动”。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第13张图片
选择“浏览计算机以查询驱动程序软件®”:
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第14张图片
点击浏览选择“D:\华清远见-嵌入式实验箱\开发平台1\工具软件\Windows\FS-JTAG\DRIVER”目录。“包括子文件夹” 必须选择,点击“下一步”。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第15张图片
安装过程出现上图提示,点击“始终安装此驱动程序软件(I)”继续安装。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第16张图片
注意:此安装过程需要进行 3 次,直到设备管理器中没有叹号标记或未知设备。如下:
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第17张图片
(5) 安装 JRE

双 击 安 装 “工 具软 件 \Windows\FS-JTAG\JRE ” 目 录 下 的 文 件 :jre-6u7-windows-i586-p-s.exe。
注:如提示无法安装,可能是因为本机上已经安装有JRE,可跳过此步骤。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第18张图片
2、连接硬件平台
按下图所示,连接仿真器、 USB 转串口线(实验箱中连接串口2)、电源。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第19张图片
3、Putty 串口终端配置
运行“工具软件\Windows\串口调试工具\PUTTY.EXE”。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第20张图片
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第21张图片
关闭开发板电源,将拨码开关 SW1 调至 0110(EMMC 启动模式),然后打开电源。此时串口终端会显示:
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第22张图片
4、Eclipse for ARM 使用

Eclipse for ARM 工具路径: 工具软件\FS-JTAG\eclipse\eclipse-cpp-helios-SR1-win32.zip。解压文件后,运行 eclipse.exe 文件。(注意:在 Win7 以上的用户,使用管理员模式打开)

(1) 指定一个工程存放目录
Eclipse for ARM 是一个标准的窗口应用程序,可以单击程序按钮开始运行。 打开后必须先指定一个工程存放路径,如图所示。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第23张图片
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第24张图片
第一次打开会出现这个界面,然后点击“Workbench”进入工程界面。弹出 工作界面。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第25张图片
5、导入一个已有工程

拷贝“开发平台1\实验代码\1、ARM体系结构与接口技术\实验代码\04-led” 到 eclipse工作目录下。如: D:\eclipse_projects\FS4412 目录。
如图所示,在 Project Explorer 窗口中右击鼠标,选择“Import…”,如下图所示。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第26张图片
选择“Import…”后,出现如下图所示的窗口,选中“Existing Projects Into Workpace”然后点击“Next”

嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第27张图片
选择“Next”后出现如下窗口,点击“Browse…”  出现“浏览文件夹”窗口,在“浏览文件夹”窗口中选中实验“04-led”后点击“确定”

嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第28张图片
点击“确定”后出现如下所示窗口,直接点击“Finish”即可。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第29张图片
添加成功后可以在“Project Explorer”中看到“04-led-ram”工程成功导入。
在这里插入图片描述
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第30张图片
(二)调试工程

1、配置 FS-JTAG 调试工具
打开 FS-JTAG 软件,在 Target 选项中选择 exynos4412,通信速率设置 200kHz。单击 Connect 按钮后,该按钮会变为 Disconnect,如图所示,即表示已经连接目标板。由于当前开发板还没有运行程序,仿真器无法获取相关信息,所以显示错误报告,是正常现象。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第31张图片
2、配置调试工具
选中“Run” / “Debug Configuras…”
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第32张图片
出现如下所示窗口,在“Zylin Embedded debug (Native)”选项上右击鼠标,在点击“New”选项
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第33张图片
点击“New”选项后出现如下所示窗口
【main 选项卡】
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第34张图片
然后再点击“Main”选项栏中的“Browse”选项选择将要执行的程序,调试的程序格式为 xx.elf 的文件。找到 LED_GPIO 工程对应的目录,选中目录中的 led_gpio.elf 文件,然后选择“打开”,如下图所示。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第35张图片
在 Debugger 选项卡中的 Main 子选项卡中的 GDB debugger 的框中单击“Browse”按钮选择前面安装的 arm-none-eabi-gdb.exe (这里选择自己安装 gcc 编译工具的安装目录 C:\Program Files\yagarto\bin)。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第36张图片
在 GDB Command file 中选择自己工程目录下的 Exynos4412.init 文件,如下图。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第37张图片
在 Command 选项卡中输入如下内容,如图所示。
在这里插入图片描述
在 Command 选项中,如下图所示,在“Initialize’ commands”中添加 3 行命令
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第38张图片
添加完后点击如下图所示的“Apply”,调试选项配置完成。再点击“Debug”选项进入就可以进行调试了。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第39张图片
单击“Apply”按钮后,再单击“Debug”按钮开始调试运行,会出现调试主界面,如图所示。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第40张图片
注意:在进入 Debug 模式前,必须保证此时 FS-Jtag 为下图所示的状态,否则不能成功进入 Debug状态
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第41张图片
进入调试界面后,点击全速运行 的调试按钮,如果开发板上 led 灯开始闪烁,则表示整个开发环境搭建成功。程序源码见附录。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第42张图片
3、修改程序,将延时改为5秒(5000ms),重新编译装入程序,观察LED灯闪烁的变化。将修改部分及重新编译操作抓图如下。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第43张图片
4、提高:本实验箱的LED灯的实际电路连接如下图。请根据此电路图修改程序,实现4个LED灯均闪烁。
嵌入式系统开发与应用——ARM 开发环境搭建及GPIO控制LED实验_第44张图片
附录:

/*
 *@brief	This example describes how to use GPIO to drive LEDs
 *@date:	02. June. 2014
 *@author	[email protected]
 *@Contact 	Us: http://dev.hqyj.com
 *Copyright(C) 2014, Farsight
*/

#include "exynos_4412.h"


/**********************************************************************
 * @brief		mydelay_ms program body
 * @param[in]	int (ms)
 * @return 		None
 **********************************************************************/
void mydelay_ms(int ms)
{
	int i, j;
	while(ms--)
	{
		for (i = 0; i < 5; i++)
			for (j = 0; j < 514; j++);
	}
}

/*-------------------------MAIN FUNCTION------------------------------*/
/**********************************************************************
 * @brief		Main program body
 * @param[in]	None
 * @return 		int
 **********************************************************************/
int main(void)
{
	/*	 *Config  */
	GPX2.CON = (GPX2.CON & ~(0xf<<28))| 1<<28;		//GPX2_7:output, LED2
	GPX1.CON = (GPX1.CON & ~(0xf)) | 1;				//GPX1_0:output, LED3
	GPF3.CON = (GPX3.CON & ~(0xf<<16 | 0xf<<20)) | (1<<16 | 1<<20);
//GPF3_4:output, LED4
//GPF3_5:output, LED5

	while(1)
	{
		//Turn on LED2
		GPX2.DAT |= 0x1 << 7;   
		mydelay_ms(500);
		//Turn on LED3
		GPX1.DAT |= 0x1;
		//Turn off LED2
		GPX2.DAT &= ~(0x1<<7);
		mydelay_ms(500);

		//Turn on LED5
		GPF3.DAT |= (0x1 << 5);
		//Turn off LED3
		GPX1.DAT &= ~0x1;
		mydelay_ms(500);

		//Turn on LED4
		GPF3.DAT |= (0x1 << 4);
		//Turn off LED5
		GPF3.DAT &= ~(0x1 << 5);
		mydelay_ms(500);

		//Turn off LED4
		GPF3.DAT &= ~(0x1 << 4);
	}
	return 0;
}

你可能感兴趣的:(arm,嵌入式硬件,arm开发)