armlpc2103实验指导书XX1022.doc_第1页
armlpc2103实验指导书XX1022.doc_第2页
armlpc2103实验指导书XX1022.doc_第3页
armlpc2103实验指导书XX1022.doc_第4页
armlpc2103实验指导书XX1022.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

armlpc2103实验指导书XX1022 M ARM嵌入式系统基础教程实验指导书系统教研室沈阳工程学院信息系二00八年七月目录概论实验一:ADS1.2集成开发环境及HJTAG-H仿真器应用实验二:概论实验一:ADS1.2集成开发环境及HJTAG-H仿真器应用实验二:高速GPIO-LED灯闪烁控制实验实验三:高速GPIO-LED灯闪烁控制实验实验三:外部中断实验实验四:定时器实验实验五:UART接口实验实验六:RTC实验实验七:PWM脉宽调制实验实验八:实验实验八:uC/OS-II实验实验一:ADS1.2集成开发环境及HJTAG-H仿真器应用1实验目的掌握在ADS1.2开发环境里如何建立、编译连接工程、仿真调试及脱机运行的基本方法。 2实验设备硬件PC机一台LPC2103教学实验开发平台一套软件Windows98/XP/2000系统,ADS1.2集成开发环境3实验内容使用HJTAG仿真器在ADS1.2集成开发环境里运行一个程序,来熟悉ADS1.2集成开发环境和使用仿真器,最终脱机运行。 利用LPC2103在ADS1.2集成开发环境下的工程模板编写程序,程序的功能设计为控制LED1灯的闪烁。 4实验预习要求仔细阅读LPC2103手册第3章H2103快速入门的说明5实验步骤 (1)打开ADS(ARM_Developer Suitev.12-CodeWarrior forARM Developer Suite)开发环境,使用ARM ExecutableImage forlpc2103模板建立工程Example,如图1.1所示。 项目目录如图3.27所示。 图1.1使用LPC2103工程模板建立工程Example图1.2ADS项目工程目录 (2)在user组中的main.c文件中添加代码。 (3)选用DebugInRAM生成目标,然后编译连接工程。 选择DebugInRAM生成目标时,编译连接的目标代码用于片内RAM调试。 (4)将LPC2103教学实验开发平台上的JP4跳线短接。 (5)选择【Project】-【Debug】,启动AXD进行JTAG仿真调试。 将计算机并口与HJTAG-H仿真器相连,然后再将HJTAG-H仿真器的JTAG接口连接到LPC2103目标板上,打开H-JTAG Server,检测到芯片内核信息后,打开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,打开【Options】-【Configure Target.】,弹出Choose Target窗口,如图1.6所示。 点击“ADD”添加仿真器的驱动程序,在添加文件窗口选择如D:Program FilesH-JTAG目录下的H-JTAG.dll,点击“打开”即可。 图1.6Choose Target窗口添加完HTAG-H驱动后,选择该驱动程序,如图1.7所示,然后点击OK,出现图1.7所示的界面。 图1.7H-JTAG检测到的CPU内核关闭AXD界面,回到ADS中,在正常情况下,点击Debug仿真后,PC指针会指向中断向量表的起始处,如图1.8所示。 图1.8进入AXD仿真调试界面如果工程文件的路径中存在中文,直接进入AXD调试环境会出现错误,此时需要重新设置配置信息,如图1.9所示。 因此,建议工程路径中不包含中文。 (6)脱机运行调试时若选择使用DebugInFLASH生成目标,并进行调试后(使用HTAG-H仿真器),程序即烧写到片内Flash中。 将HTAG-H和电源断开,重新上电,程序将脱机运行,将会看到LED闪烁。 使用RelInFlash生成目标时,编译连接生成的目标代码会将芯片加密。 此时不能再进行调试,除非使用ISP进行全片擦除,否则是不能再进行调试的。 (7)可以全速运行程序,LED1灯亮一会,熄灭一会依次循环。 6实验参考程序程序清单1LED控制程序/*/#includeconfig.h#define LED110;dly-)for(i=0;i50000;i+);/*函数名称main*函数功能跳线JP4短接,LED1闪烁*入口参数无*出口参数无*返回值无*/int main(void)PINSEL1=PINSEL1&(0x03CodeWarrior forARM Developer Suite)开发环境,使用ARM ExecutableImage forlpc2103模板建立工程Enhance GPIO。 (2)在user组中的main.c文件中添加代码。 (3)选用DebugInRAM生成目标,然后编译连接工程。 (4)将LPC2103教学实验开发平台上的JP4跳线短接。 (5)选择【Project】-【Debug】,启动AXD进行JTAG仿真调试。 (6)可以全速运行程序,LED 1、LED3灯熄灭,LED 2、LED4灯点亮一会,LED 2、LED4灯熄灭,LED 1、LED3灯点亮一会依次循环。 6实验参考程序程序清单2高速GPIO-LED灯闪烁控制程序/*/#includeconfig.h#define LED1117/*P0.17控制LED1*/#define LED2118/*P0.18控制LED2*/#define LED3119/*P0.19控制LED3*/#define LED410;dly-)for(i=0;i50000;i+);/*函数名称main*函数功能跳线JP4短接,LED闪烁*入口参数无*出口参数无*返回值无*/int main(void)PINSEL1=PINSEL1&(0xFF2);/*将P0.17-P0.20设置为GPIO*/SCS=0x01;/*设定为高速GPIO模式*/FIO0DIR=LED1|LED2|LED3|LED4;/*设置LED控制口为输出*/FIO0SET=LED1|LED2|LED3|LED4;/*LED1熄灭*/while (1)FIO0SET=LED1|LED3;/*LED 1、LED3熄灭*/FIO0CLR=LED2|LED4;/*LED 2、LED4点亮*/DelayNS (50);/*延时*/FIO0CLR=LED1|LED3;/*LED 1、LED3点亮*/FIO0SET=LED2|LED4;/*LED 2、LED4熄灭*/DelayNS (50);/*延时*/return0;/*/7作业 1、为什么本实验的工程不需要设置?(LPC2103专用工程模版已集成了启动代码、编译选项和设置等) 2、在实验程序中,如何控制LED灯的闪烁速度?(DelayNS()) 3、要将以上几个I/O口作GPIO功能时,为什么要注意对PINSEL2的操作?在启动程序中哪里配置了PINSEL2? 4、在实验程序中,“#define LED4131”这种表达式对于I/O操作有哪些方便的地方? 5、如何避免“C2892E:signed constantoverflow”警告(“#define LED41uCodeWarrior forARM Developer Suite)开发环境,使用ARM ExecutableImage forlpc2103模板建立工程Nvic (2)在user组中的main.c文件中添加代码。 (3)选用DebugInRAM生成目标,然后编译连接工程。 (4)将LPC2103教学实验开发平台上的JP4跳线短接。 (5)选择【Project】-【Debug】,启动AXD进行JTAG仿真调试。 (6)可以全速运行程序,中断输入时观察LED灯亮灭。 6实验参考程序#includeconfig.h#define BEEPCON(uint32)0x010;count-)for(i=0;i50000;i+);/*函数名称IRQ_Eint0()*功能外部中断0服务程序*入口参数无*出口参数无*/void_irq IRQ_Eint0(void)IO0PIN=BEEPCON;EXTINT=0x01;/清除EINT0中断标志VICVectAddr=0;/向量中断结束/*函数名称main()*功能初始化外部中断0,2为向量中断,低电平触发,然后等待中断。 */int main(void)PINSEL1&=(uint32)0x030);/将P0.16引脚选择为EINT0功能PINSEL1|=0x00000001;IRQEnable();/使能IRQ中断/*外部中断0和2初始化(使用向量中断)*/VICIntSelect=0x00000000;/设置所有中断分配为IRQ中断VICVectCntl0=0x20|14;/分配外部中断0到向量中断0VICVectAddr0=(uint32)IRQ_Eint0;/设置中断服务程序地址EXTINT=0x01;/清除EINT0VICIntEnable=(1CodeWarrior forARM Developer Suite)开发环境,使用ARM ExecutableImage forlpc2103模板建立工程PWM_OUTPUT。 (2)在user组中的main.c文件中添加代码。 (3)选用DebugInRAM生成目标,然后编译连接工程。 (4)选择【Project】-【Debug】,启动AXD进行JTAG仿真调试。 (5)可以全速运行程序,用示波器采集的波形如图3.1所示。 图3.1PWM输出波形6实验参考程序程序清单3定时器1PWM输出初始化/*/#includeconfig.h/*函数名称Timer1Init*函数功能定时器1初始化*入口参数无*出口参数无*返回值无*/void Timer1Init(void)T1TCR=0x02;/*定时器0复位*/T1PR=0;/*不设时钟分频*/PWM1CON=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)PINSEL1=(PINSEL1&(0x036)|(0x026);/*选择MAT1.2输出*/PINSEL1=(PINSEL1&(0x038)|(0x02CodeWarrior forARM DeveloperSuite)开发环境,使用ARM ExecutableImage forlpc2103模板建立工程UART0Interrupt Test。 (2)在user组中的main.c文件中添加代码。 (3)在Startup.s文件的InitStack子程序中,修改设置系统模式堆栈处的代码为“MSR CPSR_c,#0x5f”,即使能IRQ中断。 (4)选用DebugInRAM生成目标,然后编译连接工程。 (5)将LPC2103教学实验开发平台上的JP6跳线短接。 (6)使用串口延长线把LPC2103教学实验开发平台的UART0接口与PC机的1连接。 PC机运行超级终端软件,设置串口为1,波特率为115200,然后选择【设置】-【发送数据】,在弹出的发送数据窗口中点击“高级”即可打开接收窗口。 (7)选择【Project】-【Debug】,启动AXD进行JTAG仿真调试。 (8)可以全速运行程序,采用中断方式,通过UART0接收上位机发送的字符串,如“Hello LPC2103!”,然后送回上位机超级终端数据接收窗口进行显示。 程序运行结果如图4.1所示。 需要注意的是必须连续发送8个字节数据。 图4.1UART实验运行结果6实验参考程序程序清单4UART实验参考程序/*/#includeconfig.h#define UART_BPS115200/*串口通信波特率*/volatile uint8uiGRcvNew;/*串口接收新数据的标志*/uint8uiGRcvBuf30=0;/*串口接收数据缓冲区*/uint32uiGNum;/*串口接收数据的个数*/*函数名称DelayNS*函数功能延时函数*入口参数uiDly值越大,延时时间越长*出口参数无*返回值无*/void DelayNS(uint32uiDly)uint32i;for(;uiDly0;uiDly-)for(i=0;i50000;i+);/*函数名称UART0_IRQ*函数功能串口中断服务函数*入口参数无*出口参数无*返回值无*/void_irq UART0_IRQ(void)uiGNum=0;while(U0IIR&0x01)=0)/*判断是否有中断挂起*/switch(U0IIR&0x0E)/*判断中断标志*/case0x04:/*接收数据中断*/uiGRcvNew=1;/*置接收新数据标志*/for(uiGNum=0;uiGNumCodeWarrior forARM DeveloperSuite)开发环境,使用ARM ExecutableImage forlpc2103模板建立工程UART0Interrupt Test。 (2)在user组中的main.c文件中添加代码。 (3)选用DebugInRAM生成目标,然后编译连接工程。 (4)将LPC2103教学实验开发平台上的JP6跳线短接。 (5)使用串口延长线把LPC2103教学实验开发平台的UART0接口与PC机的1连接。 PC机运行超级终端软件,设置串口为1,波特率为115200,然后选择【功能】-【万年历】,打开仿真万年历窗口。 (6)选择【Project】-【Debug】,启动AXD进行JTAG仿真调试。 (7)可以全速运行程序,PC机上的超级终端软件不断的显示RTC的时间值,如图5.1所示。 图5.1万年历6实验参考程序程序清单5RTC实验参考程序/*/#includeconfig.h/*定义串口模式设置的数据结构*/typedef structUartModeuint8datab;/*字长度5/6/7/8*/uint8stopb;/*停止位1/2*/uint8parity;/*奇偶校验*/UARTMODE;#define UART_BPS9600/*串口通信波特率*/*函数名称UARTInit*函数功能串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为9600*入口参数uiDly值越大,延时时间越长*出口参数无*返回值无*/void UARTInit(void)uint16uiFdiv;PINSEL0=(PINSEL0&0xFFFFFFF0)|0x00000005;/*串口引脚设置*/U0LCR=0x83;/*允许设置波特率*/uiFdiv=(Fpclk/16)/UART_BPS;/*设置波特率*/U0DLM=uiFdiv/256;U0DLL=uiFdiv%256;U0LCR=0x03;/*锁定波特率*/U0FCR=0x01;/*FIFO使能*/*函数名称UART0SendByte*函数功能向串口发送子节数据,并等待数据发送完成,使用查询方式*入口参数uiDat要发送的数据*出口参数无*返回值无*/void UART0SendByte(uint8uiDat)U0THR=uiDat;/*写入数据*/while(U0LSR&0x40)=0);/*等待数据发送完毕*/*函数名称PC_DispChar*函数功能向PC机发送显示字符*入口参数x显示字符的横坐标*y显示字符的纵坐标*chr显示的字符,不能为ff*color显示的状态,包括前景色、背景色、闪烁位。 *与DOS字符显示一样03,前景色,46,背景色,7,闪烁位*出口参数无*返回值无*/void PCDispChar(uint8uiX,uint8uiChr)UART0SendByte(0xFF);/*起始字符*/UART0SendByte(0x81);UART0SendByte(uiX);UART0SendByte(uiChr);UART0SendByte(0x00);uint8const uiSHOWTABLE10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/*函数名称SendTimeRtc*函数功能将RTC时间值发送到串口显示*入口参数uiDat要发送的数据*出口参数无*返回值无*/void SendTimeRtc(void)uint32uiDatas;uint32uiTimes;uint32bak;uiTimes=CTIME0;/*读取完整的时钟寄存器*/uiDatas=CTIME1;bak=(uiDatas16)&0xfff;/*获取年*/PCDispChar(0,uiSHOWTABLEbak/1000);bak=bak%1000;PCDispChar(1,uiSHOWTABLEbak/100);bak=bak%100;PCDispChar(2,uiSHOWTABLEbak/10);PCDispChar(3,uiSHOWTABLEbak%10);bak=(uiDatas8)&0x0f;/*获取月*/PCDispChar(4,uiSHOWTABLEbak/10);PCDispChar(5,uiSHOWTABLEbak%10);bak=uiDatas&0x1f;/*获取日*/PCDispChar(6,uiSHOWTABLEbak/10);PCDispChar(7,uiSHOWTABLEbak%10);bak=(uiTimes24)&0x07;/*获取星期*/PCDispChar(8,uiSHOWTABLEbak);bak=(uiTimes16)&0x1f;/*获取小时*/PCDispChar(9,uiSHOWTABLEbak/10);PCDispChar(10,uiSHOWTABLEbak%10);bak=(uiTimes8)&0x3f;/*获取分钟*/PCDispChar(11,uiSHOWTABLEbak/10);PCDispChar(12,uiSHOWTABLEbak%10);bak=uiTimes&0x3f;/*获取秒钟*/PCDispChar(13,uiSHOWTABLEbak/10);PCDispChar(14,uiSHOWTABLEbak%10);/*函数名称RTCInit*函数功能初始化实时时钟*入口参数无*出口参数无*返回值无*/void RTCInit(void)PREINT=Fpclk/32768-1;/*设置基准时钟分频器*/PREFRAC=Fpclk-(Fpclk/32768)*32768;CCR=0x00;/*禁止时间计数器*/YEAR=xx;MONTH=04;DOM=07;DOW=4;HOUR=15;MIN=52;SEC=59;CIIR=0x01;/*设置秒值的增量产生1次中断*/CCR=0x01;/*启动RTC*/*函数名称main*函数功能主函数,通过串口发送到PC机显示当前RTC时间*入口参数无*出口参数无*返回值无*/int main(void)UARTMODE uart0_set;uart0_set.datab=8;uart0_set.stopb=1;uart0_set.parity=0;UARTInit();/*串口初始化*/RTCInit();/*RTC初始化*/while (1)while(0=(ILR&0x01);/*等待RTC增量中断*/ILR=0x01;/*清除中断标志*/SendTimeRtc();/*发送到串口显示*/return0;/*/7作业 1、UART中很多寄存器的地址时完全一致的,请写出相关的寄存器,那么它们是同一物理寄存器吗? 2、程序代码中的“while(U0LSR&0x20)=0)”跟“while(U0LSR&0x40)=0)”,有什么区别,程序运行的结果是否相同? 3、本程序中用到了接收中断和超时中断,如果用户发送字节数发生变化,需要在哪里做修改?(GuiDataBuf数据缓冲区) 4、为什么必须连续发送8字节数据?(注意硬件FIFO接收方式) 5、如果出现字符超时中断,应该怎样读取所接收到的数据?(通过U0LSR寄存器的RDR位判断是否还有未读取的数据) 6、如果需要每接收到一个字节数据就产生接收

温馨提示

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

评论

0/150

提交评论