一 、实验目的:
1、掌握定时器初始化的步骤;
2、掌握定时器控制寄存器(TCR)的含义和使用;
3、掌握定时器工作原理,学习定时器中断的设计方法,掌握1S间隔的定时器的处理。 4、熟悉ARM的中断原理,并产生中断。
二、实验设备:
1. 硬件 PC机
2. 软件 ADS1.2、PROTUES
三、实验内容及原理:
实验内容:本实验要求编写一个简单的定时器中断程序,设置一定的周期控制(1S)与某一个引脚(P0.0)相连的LED指示灯。当定时器中断产生时可以观察到LED周期性闪烁。
实验原理:定时器控制(中断方式)。
采用11.0592MHz晶振,使用PLL部件,cclk=Fosc*4=11.0592MHz*4=442368MHz,外围时钟使用复位默认的Fpclk=fcclk/4=44.2368MHz/4=11.0592MHz,定时器0进行100分频(即PR=99,MR0=110592),实现1S定时控制LED点亮或熄灭。另外,使用VIC的向量IRQ功能。首先设置定时器为向量IRQ中断,分配优先级并使能向量,然后设置相关向量地址寄存器VICVectAddr0及中断使能,在中断服务程序里完成LED的亮灭,在处理完毕后写向量地址寄存器为0,通知VIC中断处理结束。
四、实验步骤
1、在PROTUES里搭建好硬件电路平台,处理器采用LPC2106,如下图所示。
U11112XTAL1XTAL2P0.0/TxD0/PWM1P0.1/RxD0/PWM3P0.2/SCL/CAP0.0P0.3/SDA/MAT0.0P0.4/SCK/CAP0.1P0.5/MISO/MAT0.1P0.6/MOSI/CAP0.2P0.7/SSEL/PWM2P0.8/TxD1/PWM4P0.9/RxD1/PWM6P0.10/RTS1/CAP1.0P0.11/CTS1/CAP1.1P0.12/DSR1/MAT1.0P0.13/DTR1/MAT1.1P0.14/DCD1/EINT1P0.15/RI1/EINT2P0.16/EINT0/MAT0.2P0.17/CAP1.2/TRSTP0.18/CAP1.3/TMSP0.19/MAT1.2/TCKP0.20/MAT1.3/TDIP0.21/PWM5/TDOP0.22/TRACECLKP0.23/PIPESTAT0P0.24/PIPESTAT1P0.25/PIPESTAT2P0.26/TRACESYNCP0.27/TRACEPKT0/TRSTP0.28/TRACEPKT0/TMSP0.29/TRACEPKT2/TCKP0.30/TRACEPKT3/TDIP0.31/EXTIN0/TDO13141821222324282930353637414445464748123323334383989101516D1LED-YELLOW27DBGSEL26+3v6RTCKRST4017+1.8vV3V3V18VSSVSSVSSVSSLPC210654331197 2、打开ADS1.2的CodeWarrior编译环境,新建一个工程(ARM Executable Image)工程,工程名为Time0。在新建一个文件Time0.c,添加到工程里。
3、在工程空白处右击,添加工程所需的文件(config.h, target.h, LPC2106.h, Startup.s, IRQ.s, target.c)。如下图所示。
4、编写Time0.c,实现定时器1s定时,LED灯闪烁。
5、配置DebugRel Settings , 打开Target Settings ,设置如下图所示。
6、设置ARM Linker,在Output 下选择Scatterec,添加可映射文件mem.scf.在Equivalent Command Line 下修改入口地址:-entry 0x00000000.设置效果如下图所示。
7、配置ARM fromELF 输出格式Output format为Intel 32 bit Hex. Output file name为Time0.hex.如下图所示。
8、配置完成后,点击OK.
9、在PROTUES里下载Time0.hex(路径为:E:\ime0\ime0_Data\\DebugRel\\Time0.hex) 10、运行观察LED灯闪烁的效果。
五、实验参考程序
Time0Init()定时器初始化流程图
设置T0的分频值和MR0的值 匹配通道0中断并使能 启动定时器并复位 选择定时器中断为IRQ 分配定时器向量IRQ最高优先设置中断复位程序的地址 T0使能
IRQ_Time0中断服务子程序
判断LED灯亮灭 若亮置灭 若灭置亮 清除中断标志 通知VIC中断处理结束
Main()主程序流程
开始 设置PINSEL0为输入输出功能 设置 IODIR方向 调用Time0Init函数 等待中断 结束
六、实验结果
定时器控制(中断方式)实验结果:每隔1秒LED取反一次。
七、实验结论
学习定时器中断的设计方法,掌握长时间间隔的定时器的处理。在一定程度上掌握了VIC的基本操作,当设置IRQ/FIQ中断,若是IRQ中断则可以设置为向量中断并分配中断优先级,否则为向量IRQ。然后可以设置中断允许,以及向量中断对应地址或非向量中断默认地址。当有中断后,若是IRQ中断,则可以读取向量地址寄存器,然后跳转到相应代码。当要退出中断时,对向量地址寄存器写0,通知VIC中断结束。当发生中断时,处理器将会切断处理器模式,同时相关的寄存器也将会映射。
因篇幅问题不能全部显示,请点此查看更多更全内容