1昆明理工大学嵌入式系统设计报告指导老师许江淳设计者肖智斌专业班级2013级计算机技术学号2013704126时间2014年7月LED灯显示2一.设计目的1.熟悉arm开发板基本组成电路并熟悉arm芯片特性。了解ADS1.2软件使用,并会用该软件编译调试开发板。2.了解H—JTAG软件原理。二.器材PC机一台,周立功开发板一块。注意:对LPC2103管脚的寄存器进行配置时,应该对照芯片说明手册,按照索引,找到相关寄存器,对其进行配置。三.设计原理EasyARM2103开发板提供了4个绿色发光二极管用作显示,电路如图1.1所示。显示电路采用了灌电流的方式来驱动发光二极管,由于微控制器LPC2103I/O口提供的灌电流大于其拉电流,采用此驱动方式可以保证二极管发光的亮度。图1.1LED电路原理四.设计内容及步骤1.下面以GPIO的测试程序为例,熟悉EasyJTAG-H软件的使用方法,程序功能设计为控制单路LED闪烁,硬件电路如图1.1所示。2.打开示例工程。示例工程路径:配套光盘内容-光盘内容v1.00-3.EasyARM2103安装手册-GPIOTest,将此文件夹复制到其它目录下打开,要求存放目录必须无中文路径。打开文件夹后,建议用户先删掉“GPIO_Test_Data”文件夹,然后双击打开“GPIOTest.mcp”文件,即打开示例工程。3.点击“user”文件夹,打开main.c文件,见到示例代码。4.选择低速GPIO,控制LED灯闪烁,示例程序如程序清单所示。此示例操作需要短接JP4的P0.17,输出控制LED1。5.编译连接工程。项目目标栏处选择DebugInFlash模式,然后编译连接工程。36.仿真调试。将计算机并口与EasyJTAG-H仿真器相连,然后再将EasyJTAG-H仿真器的JTAG接口连接到EasyARM2103目标板上,打开H-JTAG,检测到芯片内核信息后,选择AutoDownload选项,此时会自动启动H-Flasher软件,选择目标芯片的型号,将当前的配置信息保存起来,建议将配置信息保存到安装路径下的Hconfig文件夹内。7.设置完成后,关闭H-JTAGServer和H-Flasher(注意:不能使用Exit项关闭)。启动AXD,打开【Options】-【ConfigureTarget...】,弹出ChooseTarget窗口,点击“ADD”添加仿真器的驱动程序,在添加文件窗口选择如D:\ProgramFiles\H-JTAG目录下的H-JTAG.dll,点击“打开”即可。8.在AXD环境点击运行,即可看到led亮。附加:编写程序实现四个LED灯循环闪烁的功能。五.程序及结果1.一个led灯亮的源代码如下:#includeconfig.h#defineLED1117/*P0.17控制LED1*//**************************************************************Functionname:DelayNS**Descriptions:延时函数**inputparameters:uiDly值越大,延时时间越长**outputparameters:无**Returnedvalue:无************************************************************/voidDelayNS(uint32uiDly){uint32i;for(;uiDly0;uiDly--){for(i=0;i50000;i++);}}/**************************************************************Functionname:main**Descriptions:跳线JP4短接,LED1闪烁**inputparameters:无**outputparameters:无**Returnedvalue:无************************************************************/intmain(void){PINSEL1=PINSEL1&(~(0x032));/*将P0.17设置为GPIO*/IO0DIR=LED1;/*设置LED控制口为输出*/IO0SET=LED1;/*LED1熄灭*/while(1){IO0SET=LED1;/*LED1熄灭*/DelayNS(50);/*延时*/4IO0CLR=LED1;/*LED1点亮*/DelayNS(50);/*延时*/}return0;}/********************EndOfFile*********************/运行程序后,可以看到第一个LED灯亮。2.四个LED灯循环闪烁的源代码如下:#includeconfig.h#defineLED1117/*P0.17控制LED1*/#defineLED2118/*P0.18控制LED2*/#defineLED3119/*P0.19控制LED3*/#defineLED4120/*P0.20控制LED4*/voidDelayNS(uint32uiDly){uint32i;for(;uiDly0;uiDly--){for(i=0;i50000;i++);}}intmain(void){PINSEL1=PINSEL1&(~(0x032));/*将P0.17设置为GPIO*/PINSEL1=PINSEL1&0x0FFFFFFE7;/*将P0.18设置为GPIO*/PINSEL1=PINSEL1&0x0FFFFFF9F;/*将P0.19设置为GPIO*/PINSEL1=PINSEL1&0x0FFFFFE7F;/*将P0.20设置为GPIO*/while(1){IO0DIR=LED1;IO0SET=LED1;/*LED1熄灭*/DelayNS(50);/*延时*/IO0CLR=LED1;/*LED1点亮*/DelayNS(50);IO0DIR=LED2;/*LED2熄灭、延时、点亮、延时*/IO0SET=LED2;DelayNS(50);IO0CLR=LED2;DelayNS(50);IO0DIR=LED3;/*LED3熄灭、延时、点亮、延时*/IO0SET=LED3;DelayNS(50);IO0CLR=LED3;DelayNS(50);IO0DIR=LED4;/*LED4熄灭、延时、点亮、延时*/5IO0SET=LED4;DelayNS(50);IO0CLR=LED4;DelayNS(50);}return0;}/**************EndOfFile***************/运行程序后,可看到四个LED一个接一个的亮,实现了跑马灯的功能。中断6一.设计目的1.熟悉arm开发板中断原理。并产生中断。2.了解快速中断和普通中断。编写嵌套中断实验。二.器材PC机一台,周立功开发板一块三.设计原理同设计一四.设计内容及步骤参照设计一中步骤1-8。附加:1.编写程序实现三个按钮分别控制三个LED灯亮灭的功能。2.自行编写一段实现中断嵌套的程序,阐明嵌套过程。五.程序及结果1.一个按钮控制一个LED灯亮灭的源代码#includeconfig.h#defineLED117/*****************************************************************Functionname:Eint0IRQ**Descriptions:外部中断0服务程序**inputparameters:无**ouputparameters:无**Returnedvalue:无***************************************************************/void__irqEint0IRQ(void)/*进入中断取反LED*/{if((IO0PIN&(117))==0){IO0SET=117;/*熄灭发光二极管*/}else{IO0CLR=117;/*点亮发光二极管*/}while((IO0PIN&(116))==0);/*等待按键松开*/EXTINT=0x01;/*清中断标志*/VICVectAddr=0x00;/*通知VIC中断处理结束*/}/*****************************************************************Functionname:main**Descriptions:P0.16低电平触发外部中断主函数**inputparameters:无**ouputparameters:无**Returnedvalue:无**************************************************************/intmain(void){PINSEL1=PINSEL1&(~0x03);7PINSEL1=PINSEL1|0x01;/*设置P0.16为外部中断0管脚*/INSEL1=PINSEL1&(~(0x032));/*设置P0.17为GPIO功能*/IO0DIR=LED;/*设置P0.17为输出*/IO0SET=LED;/*设置输出为高电平*/IRQEnable();/*IRQ中断使能*/EXTMODE=0x00;/*设置外部中断为低电平触发*/EXTPOLAR=0x00;VICIntSelect=014;/*选择EINT0为IRQ中断*/VICVectCntl0=0x20|14;/*将外部中断0分配给向量中断0*/VICVectAddr0=(uint32)Eint0IRQ;/*设置中断服务程序地址*/VICIntEnable=114;/*使能EINT0中断*/EXTINT=0x01;/*清除EINT0中断标志*/while(1);return0;}运行程序后,按下按钮,LED灯亮;再按一次,灯灭;再按一次,灯亮;再按一次,灯灭;如此循环。2.三个按钮分别控制三个LED灯亮灭的源代码#includeconfig.h#defineLED1117#defineLED2118#defineLED3119void__irqEint0IRQ(void)/*进入中断取反LED*/{if((IO0PIN&(117))==0){IO0SET=117;}/*熄灭发光二极管*/else{IO0CLR=117;}/*点亮发光二极管*/while((EXTINT&0x01)!=0){EXTINT=0x01;}/*按键松开清中断标志*/VICVectAddr=0x00;/*通知VIC中断处理结束*/}void__irqEint1IRQ(void)/*进入中断取反LED*/{if((IO0PIN&(118))==0){IO0SET=118;}/*熄灭发光二极管*/else{IO0CLR=118;}/*点亮发光二极管*/while((EXTINT&0x02)!=0){EXTINT=0x02;}/*按键松开清中断标志*/VICVectAddr=0x00;/*通知VIC中断处理结束*/}void__irqEint2IRQ(void)/*进入中断取反LED*/{if((IO0PIN&(119))==0){IO0SET=119;}/*熄灭发光二极管*/else{IO0CLR=119;}/*点亮发光二极管*/while((EXTINT&0x04)!=0){EXTINT=0x04;}/*按键松开清中断标志*/VICVectAddr=0x00;/*通知VIC中断处理结束*/}intmain(void){PINSEL1=PINSEL1&(~0x03);PINSEL1=PINSEL1|0x01;/*设置P0.16为外部中断0管脚*/8PINSEL0=PINSEL0&