您的当前位置:首页正文

ARM综合实验

2024-08-17 来源:小奈知识网


重庆交通大学信息科学与工程学院

综合性设计性实验报告

专 业 班 级 : 电子信息工程2008级2班

学 生 姓 名 : 高 申 学号:08200204

实验项目名称: GPIO输入输出实验

实验项目性质: 设计性

实验所属课程: ARM嵌入式系统基础教程

实验室(中心): 现代电子实验中心

指 导 教 师 : 闫 果

实验完成时间: 2011 年 6 月 17 日

教师评阅意见:

签名: 年 月 日 实验成绩:

一、实验目的

1、巩固并加深学生对《ARM嵌入式系统基础教程》理论知识的理解; 2、培养学生编写ARM程序的能力;

3、进一步熟悉和应用ADS 1.2集成开发环境及ARMulator软件仿真;

4、进一步熟悉LPC2000系列ARM7微控制器的GPIO控制及使用GPIO的输入模式读取开关信号

二、实验内容及要求

以GPIO的输出控制实验和GPIO输入实验为基础,读取P0.20口上的电平值,然后将读到的值通过GPIO输出,控制蜂鸣器和8个LED流水灯显示,要求有自己的流水灯点亮方式和扬声器鸣叫方式。

三、实验原理

P0.20口设置为输入模式时,口线内部无上拉电阻,当与按键或跳线器连接使用时需要外接上拉电阻,防止口线悬空,如图①所示。

图① 按键连接电路

1

如图②所示,短接MagicARM2200-S教学实验开发平台上LED跳线JP5。

图② LED连接电路

四、实验设备及软件

●硬件:PC机

一台 一套

MagicARM2200-S教学实验开发平台

●软件:Windows98/XP/2000系统,ADS 1.2集成开发环境

五、实验过程及原始记录

(1)启动 ADS 1.2,使用 ARM Executable Image for MagicARM2200 工程模板建 一个工程 gaoshen。

(2)在 user 组中的 main.c 中编写主程序代码。 (3)选用 DebugInExram 生成目标,然后编译链接工程。

(4)选择【Project】->【Debug】,启动 AXD 进行 JTAG 仿真调试。

(5)单步运行程序,通过 LED1~LED8 的显示以及扬声器判断结果是否正确。 (6)全速运行程序,观察 LED1~LED8 的显示和扬声器的鸣叫。

实验代码为: #include \"config.h\"

#define LEDCON 0x00ff0000 //P1.16~P1.23引脚控制LED1~LED8 #define BEEPCON 1<<7 // P0.7 引脚控制B1,低电平蜂鸣 #define KEY 1<<20 // 定义按键

const uint32 DISP_TAB1[8] = {0xff80ffff,0xff01ffff,0xff40ffff,0xff02ffff,

2

0xff20ffff,0xff04ffff,0xff10ffff,0xff08ffff}; const uint32 DISP_TAB2[8] = {0xff01ffff,0xff02ffff,0xff04ffff,0xff08ffff, 0xff10ffff,0xff20ffff,0xff40ffff,0xff80ffff}; void DelayNS(uint32 dly) //延时函数 {

uint32 i; for(;dly>0;dly--) {

for(i=0;i<5000;i++) { ; } } }

int main(void) //主函数 {

Uint8 i; uint32 t = 10;

PINSEL0 = 0x00000000; // 设置管脚连接GPIO

IO0DIR = BEEPCON; // 设置B1 控制口为输出,其它I/O 为输入 PINSEL1 = 0x00000000; // 设置管脚连接GPIO IO1DIR = LEDCON; //配置LED控制I/O方向 while(1) {

if( (IO0PIN&KEY)!=0 ) //按键没有按下 {

IO0SET = BEEPCON; //扬声器不叫 IO1SET = 0xffffffff; //LED全灭 }

Else //按键按下 {

for(i=0;i<8;i++) {

3

IO1CLR = DISP_TAB1[i]; //输出LED显示方式1数据 IO0CLR = BEEPCON; //扬声器叫 DelayNS(t); //延时 IO1SET = 0xffffffff; // LED全灭 IO0SET = BEEPCON; //扬声器不叫 DelayNS(t); //延时 t += 10; //增加延时时间 } t = 10; for(i=0;i<8;i++) {

IO1CLR = DISP_TAB2[i]; IO0CLR = BEEPCON; DelayNS(t); IO1SET = 0xffffffff; IO0SET = BEEPCON; DelayNS(t); t += 10; } t = 10; for(i=0;i<3;i++) {

IO1CLR = 0xffffffff; IO0CLR = BEEPCON; DelayNS(50); IO1SET = 0xffffffff; IO0SET = BEEPCON; DelayNS(50); } } } return(0); }

4

//输出LED显示方式2数据 //扬声器叫 //延时 // LED全灭 //扬声器不叫 //LED全亮 //扬声器叫 //延时 //LED全灭 //扬声器不叫 //延时 六、实验结果及分析

实验结果为:当按下按键后,LED灯按照1、8、2、7、3、6、4、5的顺序逐个点亮,同时扬声器鸣叫,延时时间逐渐变长;然后LED灯按照1、2、3、4、5、6、7、8的顺序逐个点亮,同时扬声器鸣叫,延时时间逐渐变长;最后8个LED灯同时闪烁三次,扬声器也鸣叫三次。

实验结果与程序中的设计完全一致,实现了按键控制LED流水灯和扬声器的功能,扬声器鸣叫时间有变化,本次实验设计成功。

七、实验体会

本次实验要求我们通过自己的设计实现简单的GPIO输入输出控制功能,刚看到这个题目的时候,感觉这和单片机设计没什么区别,真正去做的时候还是遇到了一些小困难,因为我们对ARM编程的实践操作太少,对ARM的很多指令和编程方式还不熟悉。通过查阅资料、与同学讨论以及自己的尝试,最后终于了解了实验的原理,设计出了自己的方案。

这次实验比较简单,本质上和我们学过的单片机是一样的,我们只需要熟悉ARM的指令和操作方式,再结合以前的编程思想,就可以很容易的实现要求了。

不过设计过程中,我还是发现了自己的一些缺点,由于轻视简单的问题,以至于我忽略了有些细节,造成了功能上的欠缺,演示之后才发现。这教育我做任何事都要一丝不苟,严谨对待,细节往往能够是决定成败。同时我们看到自己设计的成果,心里挺开心的,也加深了对该学科的兴趣,动手实践对学习是有很大帮助的。

5

因篇幅问题不能全部显示,请点此查看更多更全内容