armLPC2103实验指导书_第1页
armLPC2103实验指导书_第2页
armLPC2103实验指导书_第3页
armLPC2103实验指导书_第4页
armLPC2103实验指导书_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 ARM嵌入式系统基础教程 实 验 指 导 书系统教研室沈阳工程学院信息系二00八年七月 目录 概论实验一:ADS 1.2集成开发环境及HJTAG-H仿真器应用实验二: 高速GPIO-LED灯闪烁控制实验实验三: 外部中断实验实验四: 定时器实验实验五: UART接口实验实验六: RTC实验实验七: PWM脉宽调制实验实验八: uC/OS-II实验实验一:ADS 1.2集成开发环境及HJTAG-H仿真器应用1实验目的掌握在ADS1.2开发环境里如何建立、编译连接工程、仿真调试及脱机运行的基本方法。2实验设备 硬件:PC机 一台 LPC2103教学实验开发平台 一套 软件:Windows98/X

2、P/2000系统,ADS1.2集成开发环境3实验内容使用HJTAG仿真器在ADS1.2集成开发环境里运行一个程序,来熟悉ADS1.2集成开发环境和使用仿真器,最终脱机运行。利用LPC2103在ADS1.2集成开发环境下的工程模板编写程序,程序的功能设计为控制LED1灯的闪烁。4实验预习要求仔细阅读LPC2103手册第3章H2103快速入门的说明5实验步骤(1)打开ADS(ARM_Developer Suite v.12->CodeWarrior for ARM Developer Suite)开发环境,使用ARM Executable Image for lpc2103模板建立工程Exa

3、mple,如图1.1所示。项目目录如图3.27所示。图1.1 使用LPC2103工程模板建立工程Example图1.2 ADS项目工程目录(2)在user组中的main.c文件中添加代码。(3)选用DebugInRAM生成目标,然后编译连接工程。 选择DebugInRAM生成目标时,编译连接的目标代码用于片内RAM调试。(4)将LPC2103教学实验开发平台上的JP4跳线短接。(5)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。 将计算机并口与HJTAG-H仿真器相连,然后再将HJTAG-H仿真器的JTAG接口连接到LPC2103目标板上,打开H-JTAG S

4、erver,检测到芯片内核信息后,打开Auto Download选项,如图1.3所示。此时会自动启动H-Flasher软件,选择目标芯片的型号,如图1.4所示,将当前的配置信息保存起来,建议将配置信息保存到安装路径下的Hconfig文件夹内,如图1.5所示。图1.3 启动H-JTAG Server图1.4 选择芯片型号图1.5 保存配置信息在H-JTAG Server中选择Auto Download项后,H-Flasher的只需设置芯片型号即可,至于烧写目标文件可以不设置。设置完成后,关闭H-JTAG Server和H-Flasher(注意:不能使用Exit项关闭)。启动AXD,打开【Opti

5、ons】->【Configure Target.】,弹出Choose Target窗口,如图1.6所示。点击“ADD”添加仿真器的驱动程序,在添加文件窗口选择如D:Program FilesH-JTAG目录下的H-JTAG.dll,点击“打开”即可。 图1.6 Choose Target窗口添加完HTAG-H驱动后,选择该驱动程序,如图1.7所示,然后点击OK,出现图1.7所示的界面。图1.7 H-JTAG检测到的CPU内核关闭AXD界面,回到ADS中,在正常情况下,点击Debug仿真后,PC指针会指向中断向量表的起始处,如图1.8所示。图1.8 进入AXD仿真调试界面如果工程文件的路径

6、中存在中文,直接进入AXD调试环境会出现错误,此时需要重新设置配置信息,如图1.9所示。因此,建议工程路径中不包含中文。(6)脱机运行调试时若选择使用DebugInFLASH生成目标,并进行调试后(使用HTAG-H仿真器),程序即烧写到片内Flash中。将HTAG-H和电源断开,重新上电,程序将脱机运行,将会看到LED闪烁。使用RelInFlash生成目标时,编译连接生成的目标代码会将芯片加密。此时不能再进行调试,除非使用ISP进行全片擦除,否则是不能再进行调试的。(7)可以全速运行程序,LED1灯亮一会,熄灭一会依次循环。6实验参考程序程序清单1 LED控制程序/*/#include &qu

7、ot;config.h"# define LED1 1 << 17 /* P0.17控制LED1 */* 函数名称:Delay* 函数功能:延时子程序* 入口参数: dly 延时参数,值越大,延时时间越长* 出口参数: 无* 返回值: 无*/void DelayNS (uint32 dly) uint32 i; for (; dly > 0; dly-) for(i = 0; i < 50000; i+); /* 函数名称:main* 函数功能:跳线JP4短接,LED1闪烁* 入口参数: 无* 出口参数: 无* 返回值: 无*/int main (void)

8、PINSEL1 = PINSEL1 & (0x03 << 2); /* 将P0.17设置为GPIO */IO1DIR = LED1; /* 设置LED控制口为输出 */ while (1) IO1SET = LED1; /* LED1熄灭 */Delay(50) IO1CLR = LED1; /* LED1点亮 */Delay(50) return 0;/*/7作业1、工程模板有哪些作用? 2、如何强行重新编译工程的所有文件? 实验二: 高速GPIO-LED灯闪烁控制实验1实验目的掌握LPC2103的ARM7微控制器的GPIO控制。2实验设备 硬件:PC机 一台 LPC21

9、03教学实验开发平台 一套 软件:Windows98/XP/2000系统,ADS1.2集成开发环境3实验内容选择高速GPIO,控制LED灯闪烁。需要短接JP4的P0.17、P0.18、P0.19、P0.20端口,输出控制LED1、LED2、LED3和LED4灯。4实验预习要求仔细阅读LPC2103教材第4章LPC2103功能部件详解的4.1节引脚连接模块和4.2节GPIO。5实验步骤(1)打开ADS(ARM_Developer Suite v.12->CodeWarrior for ARM Developer Suite)开发环境,使用ARM Executable Image for l

10、pc2103模板建立工程Enhance GPIO。(2)在user组中的main.c文件中添加代码。(3)选用DebugInRAM生成目标,然后编译连接工程。(4)将LPC2103教学实验开发平台上的JP4跳线短接。(5)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。(6)可以全速运行程序,LED1、LED3灯熄灭,LED2、LED4灯点亮一会,LED2、LED4灯熄灭,LED1、LED3灯点亮一会依次循环。6实验参考程序程序清单2 高速GPIO-LED灯闪烁控制程序/*/#include "config.h"#define LED1 1

11、<< 17 /* P0.17控制LED1 */#define LED2 1 << 18 /* P0.18控制LED2 */#define LED3 1 << 19 /* P0.19控制LED3 */#define LED4 1 << 20 /* P0.20控制LED4 */* 函数名称:Delay* 函数功能:延时子程序* 入口参数: dly 延时参数,值越大,延时时间越长* 出口参数: 无* 返回值: 无*/void DelayNS (uint32 dly) uint32 i; for (; dly > 0; dly-) for(i =

12、0; i < 50000; i+); /* 函数名称:main* 函数功能:跳线JP4短接,LED闪烁* 入口参数: 无* 出口参数: 无* 返回值: 无*/int main (void) PINSEL1 = PINSEL1 & (0xFF << 2); /* 将P0.17-P0.20设置为GPIO */ SCS = 0x01; /* 设定为高速GPIO模式 */ FIO0DIR = LED1 | LED2 | LED3 | LED4; /* 设置LED控制口为输出 */ FIO0SET = LED1 | LED2 | LED3 | LED4; /* LED1熄灭 *

13、/ while (1) FIO0SET = LED1 | LED3; /* LED1、LED3熄灭 */ FIO0CLR = LED2 | LED4; /* LED2、LED4点亮 */ DelayNS(50); /* 延时 */ FIO0CLR = LED1 | LED3; /* LED1、LED3点亮 */ FIO0SET = LED2 | LED4; /* LED2、LED4熄灭 */ DelayNS(50); /* 延时 */ return 0;/*/7作业1、为什么本实验的工程不需要设置链接地址?(LPC2103专用工程模版已集成了启动代码、编译选项和链接地址设置等)2、在实验程序中

14、,如何控制LED灯的闪烁速度?(DelayNS())3、要将以上几个I/O口作GPIO功能时,为什么要注意对PINSEL2的操作?在启动程序中哪里配置了PINSEL2?4、在实验程序中,“#define LED4 1<<31”这种表达式对于I/O操作有哪些方便的地方?5、如何避免“C2892E: signed constant overflow”警告(“#define LED4 1u<<31”,这里u表示无符号数值)实验三: 外部中断实验1实验目的掌握LPC2103的ARM7微控制器的中断控制的原理及应用。2实验设备 硬件:PC机 一台 LPC2103教学实验开发平台

15、一套 软件:Windows98/XP/2000系统,ADS1.2集成开发环境3实验内容选择外部中断0,控制LED灯闪烁。4实验预习要求仔细阅读LPC2103教材第4章LPC2103功能部件详解的4.9节中断控制器。5实验步骤(1)打开ADS(ARM_Developer Suite v.12->CodeWarrior for ARM Developer Suite)开发环境,使用ARM Executable Image for lpc2103模板建立工程Nvic(2)在user组中的main.c文件中添加代码。(3)选用DebugInRAM生成目标,然后编译连接工程。(4)将LPC2103

16、教学实验开发平台上的JP4跳线短接。(5)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。(6)可以全速运行程序,中断输入时观察LED灯亮灭。6实验参考程序#include "config.h"#define BEEPCON (uint32)0x01<<7) / P0.7引脚控制蜂鸣器,低电平蜂鸣#define BEEP_ON() IO0CLR=BEEPCON / P0.7引脚输出低电平,蜂鸣器蜂鸣#define BEEP_OFF() IO0SET=BEEPCON / P0.7引脚输出高电平,蜂鸣器不蜂鸣 /* 函数名称:Dela

17、y()* 功 能:软件延时* 入口参数:count 延时参数,值越大,延时越长* 出口参数:无*/void Delay(uint32 count) uint32 i; for(;count>0;count-) for(i=0;i<50000;i+);/* 函数名称:IRQ_Eint0()* 功 能:外部中断0服务程序* 入口参数:无* 出口参数:无*/void _irq IRQ_Eint0(void) IO0PIN=BEEPCON;EXTINT=0x01; / 清除EINT0中断标志 VICVectAddr=0; / 向量中断结束/* 函数名称:main()* 功 能:初始化外部中

18、断0,2为向量中断,低电平触发,然后等待中断。*/int main(void) PINSEL1&=(uint32)0x03<<0); / 将P0.16引脚选择为EINT0功能 PINSEL1|=0x00000001; IRQEnable(); / 使能IRQ中断 /* 外部中断0和2初始化(使用向量中断) */ VICIntSelect=0x00000000; / 设置所有中断分配为IRQ中断 VICVectCntl0=0x20 | 14; / 分配外部中断0到向量中断0 VICVectAddr0=(uint32)IRQ_Eint0; / 设置中断服务程序地址 EXTINT

19、=0x01; / 清除EINT0 VICIntEnable=(1<<14); / 使能EINT0 while(1); / 等待中断 return 0; 7作业1、为什么本实验的清除中断标志位和中断向量地址?(LPC2103专用工程模版已集成了启动代码、编译选项和链接地址设置等)2、在实验程序中, LED灯的闪烁的原理?3、中断向量地址的优先级是怎样设置的? 实验四: 定时器实验1实验目的掌握LPC2103的ARM7微控制器中定时器0/1的基本设置及应用。2实验设备 硬件:PC机 一台 LPC2103教学实验开发平台 一套 逻辑分析仪 一台 软件:Windows98/XP/2000系

20、统,ADS1.2集成开发环境3实验内容定时器1匹配输出PWM波形,波形的占空比设定如下:P0.19输出的波形占空比为50%,P0.20输出的占空比为25%4实验预习要求仔细阅读LPC2103教材第4章LPC2103功能部件详解的4.5节定时器0与定时器1。5实验步骤(1)打开ADS(ARM_Developer Suite v.12->CodeWarrior for ARM Developer Suite)开发环境,使用ARM Executable Image for lpc2103模板建立工程PWM_OUTPUT。(2)在user组中的main.c文件中添加代码。(3)选用DebugIn

21、RAM生成目标,然后编译连接工程。(4)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。(5)可以全速运行程序,用示波器采集的波形如图3.1所示。图3.1 PWM输出波形6实验参考程序程序清单3 定时器1PWM输出初始化/*/#include "config.h"/* 函数名称:Timer1Init* 函数功能:定时器1初始化* 入口参数: 无* 出口参数: 无* 返回值: 无*/void Timer1Init(void) T1TCR = 0x02; /* 定时器0复位 */ T1PR = 0; /* 不设时钟分频 */ PWM1CON =

22、0x0C; /* 使能PWM输出 */ T1MCR = 0x02; /* 设置T0MR0匹配后复位T0TC */ T1MR0 = Fpclk / 2000; /* 设置PWM输出的周期 */ T1MR2 = (Fpclk / 2000) / 2; /* 设置PWM1.2输出占空比为50 */ T1MR3 = (Fpclk / 2000) / 4) * 3; /* 设置PWM1.3输出占空比为25 */ T1TCR = 0x01; /* 启动定时器0 */* 函数名称:main* 函数功能:定时器1PWM输出* 入口参数: 无* 出口参数: 无* 返回值: 无*/int main (void)

23、PINSEL1 = (PINSEL1 & (0x03 << 6) | (0x02 << 6); /* 选择MAT1.2输出 */ PINSEL1 = (PINSEL1 & (0x03 << 8) | (0x02 << 8); /* 选择MAT1.3输出 */ Timer1Init(); /* 定时器1初始化 */ while(1); return 0;/*/7作业1、使用定时器0 和定时器1 定时中断控制LED(实现LED亮0.5 秒,熄灭0.5 秒),两个定时器均为1S 定时,定时器0 中断时控制LED亮,定时器1 中断时控制L

24、ED熄灭,请编写程序实现。(提示:定时器0 启动0.5S 后,再立即启动定时器1)2、当T1PR=0时,如何使用Fpclk宏设置T1MRO寄存器,实现1s或0.5s的定时。(Fpclk宏在项目的config.h文件中定义)实验五: UART接口实验1实验目的掌握UART0各个控制器的设置,并能使用UART0接收PC发过来的数据,并将数据送回PC进行显示。2实验设备 硬件:PC机 一台 LPC2103教学实验开发平台 一套 软件:Windows98/XP/2000系统,ADS1.2集成开发环境 3实验内容采用中断方式,通过UART0接收上位机发送的字符串,如“Hello LPC2103!”,然后

25、送回上位机终端的超级终端数据接收窗口进行显示。UART0设置为通讯波特率115200,8位数据位,1位停止位,无奇偶校验。UART0的通信实验需要短接JP6的P0.0和P0.1引脚。4实验预习要求(1)仔细阅读LPC2103教材第4章LPC2103功能部件详解的4.9节UART接口。(2)仔细阅读LPC2103教材第2章LPC2103硬件说明,尤其是串口部分的电路。5实验步骤(1)打开ADS(ARM_Developer Suite v.12->CodeWarrior for ARM Developer Suite)开发环境,使用ARM Executable Image for lpc21

26、03模板建立工程UART0 Interrupt Test。(2)在user组中的main.c文件中添加代码。(3)在Startup.s文件的InitStack子程序中,修改设置系统模式堆栈处的代码为“MSR CPSR_c,#0x5f”,即使能IRQ中断。(4)选用DebugInRAM生成目标,然后编译连接工程。(5)将LPC2103教学实验开发平台上的JP6跳线短接。(6)使用串口延长线把LPC2103教学实验开发平台的UART0接口与PC机的COM1连接。PC机运行超级终端软件,设置串口为COM1,波特率为115200,然后选择【设置】->【发送数据】,在弹出的发送数据窗口中点击“高级

27、”即可打开接收窗口。(7)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。(8)可以全速运行程序,采用中断方式,通过UART0接收上位机发送的字符串,如“Hello LPC2103!”,然后送回上位机超级终端数据接收窗口进行显示。程序运行结果如图4.1所示。需要注意的是必须连续发送8个字节数据。图4.1 UART实验运行结果6实验参考程序程序清单4 UART实验参考程序/*/#include "config.h"# define UART_BPS 115200 /* 串口通信波特率 */volatile uint8 uiGRcvNew; /*

28、 串口接收新数据的标志 */uint8 uiGRcvBuf30 = 0; /* 串口接收数据缓冲区 */uint32 uiGNum; /* 串口接收数据的个数 */* 函数名称:DelayNS* 函数功能:延时函数* 入口参数: uiDly 值越大,延时时间越长* 出口参数: 无* 返回值: 无*/void DelayNS (uint32 uiDly) uint32 i; for (; uiDly > 0; uiDly-) for(i = 0; i < 50000; i+); /* 函数名称: UART0_IRQ* 函数功能: 串口中断服务函数* 入口参数: 无* 出口参数: 无*

29、 返回值: 无*/void _irq UART0_IRQ (void) uiGNum = 0; while (U0IIR & 0x01) = 0) /* 判断是否有中断挂起 */ switch (U0IIR & 0x0E) /* 判断中断标志 */ case 0x04: /* 接收数据中断 */ uiGRcvNew = 1; /* 置接收新数据标志 */ for (uiGNum = 0; uiGNum < 8; uiGNum+) /* 连续接收8个字节 */ uiGRcvBufuiGNum = U0RBR; break; case 0x0C: /* 字符超时中断 */ u

30、iGRcvNew = 1; while (U0LSR & 0x01) = 0x01) /* 判断数据是否接收完毕 */ uiGRcvBufuiGNum = U0RBR; uiGNum+; break; default: break; VICVectAddr = 0x00; /* 函数名称:UARTInit* 函数功能:串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为115200* 入口参数: uiDly 值越大,延时时间越长* 出口参数: 无* 返回值: 无*/void UARTInit (void) uint16 uiFdiv; U0LCR = 0x83; /* 允许设

31、置波特率 */ uiFdiv = (Fpclk / 16) / UART_BPS; /* 设置波特率 */ U0DLM = uiFdiv / 256; U0DLL = uiFdiv % 256; U0LCR = 0x03; /* 锁定波特率 */* 函数名称: UART0SendByte* 函数功能:向串口发送子节数据,并等待数据发送完成,使用查询方式* 入口参数: uiDat 要发送的数据* 出口参数: 无* 返回值: 无*/void UART0SendByte (uint8 uiDat) U0THR = uiDat; /* 写入数据 */ while (U0LSR & 0x20)

32、= 0); /* 等待数据发送完毕 */* 函数名称: UART0SendStr* 函数功能: 向串口发送字符串* 入口参数: uiStr 要发送的字符串指针* uiNum 要发送的数据个数* 出口参数: 无* 返回值: 无*/void UART0SendStr(uint8 const *uiStr, uint32 uiNum) uint32 i; for (i = 0; i < uiNum; i+) /* 发送指定个字节数据 */ UART0SendByte (*uiStr+); /* 函数名称: main* 函数功能:跳线JP6短接,打开串口调试软件,串口0中断方式通信* 入口参数:

33、 无* 出口参数: 无* 返回值: 无*/int main (void) PINSEL0 = PINSEL0 & (0x0F); PINSEL0 = PINSEL0 | 0x05; /* 设置I/O连接到UART */ uiGRcvNew = 0; UARTInit (); /* 串口初始化 */ U0FCR = 0x81; /* 使能FIFO,设置8个字节触发点 */ U0IER = 0x01; /* 使能接收中断 */ IRQEnable (); VICIntSelect = 0x00000000; /* 设置所有中断为向量中断 */ VICVectCntl0 = 0x20 | 0

34、x06; /* 设置串口中断为最高优先级 */ VICVectAddr0 = (uint32)UART0_IRQ; /* 设置向量地址 */ VICIntEnable = 1 << 0x06; /* 使能串口中断 */ while (1) if (uiGRcvNew = 1) /* 判断是否有新数据 */ uiGRcvNew = 0; /* 清除标志 */ UART0SendStr (uiGRcvBuf, uiGNum); /* 向串口发送数据 */ return 0;/*/7作业1、UART中很多寄存器的地址时完全一致的,请写出相关的寄存器,那么它们是同一物理寄存器吗?2、程序代码中的“while(U0LSR&0x20)=0)”跟“while(U0LSR&0x40)=0)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论