版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学号姓名内容(50%)格式(20%)答辩(30%)总成绩评语: 指导教师: 年 月 日 定时器(小组成员)2012(年级)2014年 12 月 3 日13摘 要本文主要讲述了LPC1788片上定时/计数器、系统节拍定时器、实时时钟和看门狗定时器的程序设计实例。分别对定时/计数器不同的匹配通道进行设置,更加深刻理解定时计数器的用法,以及不同的定时计数器的设置方法;学习了在头文件LPC177x_8x.h中对看门狗寄存器的宏定义;并且依次改变系统节拍定时器、实时时钟和看门狗定时器的定时频率,通过触发中断的方式实现LED灯的翻转。关键词:定时器;定时/计数器;系统节拍定时器;实时时钟;看门狗;喂狗;中
2、断;目 录1. 定时/计数器031.1 匹配1实现定时中断31.1.1 工程代码31.1.2 实例结果的分析与讨论41.2 匹配2实现定时中断41.2.1 工程代码41.2.2 实例结果的分析与讨论51.3 匹配3实现定时中断51.3.1 工程代码51.3.2 实例结果的分析与讨论52. 定时/计数器13实现定时中断62.1 定时/计数器162.1.1 工程代码62.1.2 实例结果的分析与讨论72.2 定时/计数器272.2.1 工程代码72.2.2 实例结果的分析与讨论82.3 定时/计数器382.3.1 工程代码82.3.2 实例结果的分析与讨论93. 头文件LPC177x_8x.h93
3、.1 看门狗寄存器的宏定义94. 改变定时频率104.1 系统节拍定时器104.1.1 工程代码104.1.2 实例结果的分析与讨论114.2 RTC实时时钟114.2.1 工程代码114.2.2 实例结果分析与讨论124.3 看门狗定时器134.3.1 工程代码134.3.2 实例结果分析与讨论145. 结论14参考文献151. 定时/计数器0LPC1788具有4个通用的定时/计数器,此节将分别讲述定时/计数器0在不同匹配寄存器的工作方式下实现定时中断的功能。实例功能:该实例的主要功能是对定时/计数器0进行初始化,打开定时/计数器0的NVIC中断,配置预分频寄存器PR和匹配寄存器T0MR1/
4、T0MR2/T0MR3的值分别为10000-1和1000,当PCLK为10MHz,则定时/计数器0没1秒产生一次匹配。当开启定时/计数器和使能中断,每秒都会触发中断,从而执行中断服务函数,实现LED灯D11状态翻转。软硬件环境:实例是在keil MDK集成开发环境下编写的,硬件是基于LPC1788学习板内部的通用定时/计数器0及其匹配输出。工程创建过程:基于课本工程实例ZLX03进行修改,只需修改文件timer0.c,配置成不同的匹配通道。流程图如图1: LED初始化 Main函数入口定时器0中断到来定时计数器0初始化 用户按键初始化LED灯D11闪烁无限循环体LED灯D9不断闪烁图11.1
5、匹配1实现定时中断1.1.1 工程代码#include "includes.h"void Timer0Init(void)NVIC_DisableIRQ(TIMER0_IRQn);LPC_TIM0->CTCR=0;/定时器工作在定时模式下LPC_TIM0->IR=(1uL<<1);/中断寄存器IR配置匹配通道LPC_TIM0->MCR=(1uL<<3)|(1uL<<4);/匹配控制寄存器MCRLPC_TIM0->PR=10000-1;LPC_TIM0->MR1=1000;LPC_TIM0->TCR=(1
6、uL<<0);/启动定时计数器 NVIC_EnableIRQ(TIMER0_IRQn);/使能中断void TIMER0_IRQHander(void)if(LPC_TIM0->IR&(1uL<<1)=(1uL<<1)/判断是否为匹配1触发中断LPC_TIM0->IR=1uL<<1;/清除匹配1中断标志位LEDBlink(3);NVIC_ClearPendingIRQ(TIMER0_IRQn);/清除定时计数器0的中断标志位1.1.2 实例结果的分析与讨论本次实例通过配置定时/计数器0匹配通道1,并设置相应的寄存器,实现每秒产
7、生一次匹配中断,执行中断服务函数,实现D11的翻转。并且在中断服务函数中必须清除匹配通道1的中断标志位以及定时/计数器0的中断标志位。否则会不断的触发该中断。1.2 匹配2实现定时中断1.2.1 工程代码#include "includes.h"void Timer0Init(void)NVIC_DisableIRQ(TIMER0_IRQn);LPC_TIM0->CTCR=0;/定时器工作在定时模式下LPC_TIM0->IR=(1uL<<2);/中断寄存器IR配置匹配通道LPC_TIM0->MCR=(1uL<<6)|(1uL<
8、<7);/匹配控制寄存器MCRLPC_TIM0->PR=10000-1;LPC_TIM0->MR2=1000;LPC_TIM0->TCR=(1uL<<0);/启动定时计数器 NVIC_EnableIRQ(TIMER0_IRQn);/使能中断void TIMER0_IRQHander(void)if(LPC_TIM0->IR&(1uL<<2)=(1uL<<2)/判断是否为匹配2触发中断LPC_TIM0->IR=1uL<<2;/清除匹配2中断标志位LEDBlink(3);NVIC_ClearPendingI
9、RQ(TIMER0_IRQn);/清除定时计数器0的中断标志位1.2.2 实例结果的分析与讨论本次实例通过配置定时/计数器0匹配通道2,并设置相应的寄存器,实现每秒产生一次匹配中断,执行中断服务函数,实现D11的翻转。并且在中断服务函数中必须清除匹配通道2的中断标志位以及定时/计数器0的中断标志位。否则会不断的触发该中断。1.3 匹配3实现定时中断1.3.1 工程代码#include "includes.h"void Timer0Init(void)NVIC_DisableIRQ(TIMER0_IRQn);LPC_TIM0->CTCR=0;/定时器工作在定时模式下LP
10、C_TIM0->IR=(1uL<<3);/中断寄存器IR配置匹配通道3LPC_TIM0->MCR=(1uL<<9)|(1uL<<10);/匹配控制寄存器MCRLPC_TIM0->PR=10000-1;LPC_TIM0->MR3=1000;LPC_TIM0->TCR=(1uL<<0);/启动定时计数器 NVIC_EnableIRQ(TIMER0_IRQn);/使能中断void TIMER0_IRQHander(void)if(LPC_TIM0->IR&(1uL<<3)=(1uL<<
11、3)/判断是否为匹配1触发中断LPC_TIM0->IR=1uL<<3;/清除匹配1中断标志位LEDBlink(3);NVIC_ClearPendingIRQ(TIMER0_IRQn);/清除定时计数器0的中断标志位1.3.2 实例结果的分析与讨论本次实例通过配置定时/计数器0匹配通道3,并设置相应的寄存器,实现每秒产生一次匹配中断,执行中断服务函数,实现D11的翻转。并且在中断服务函数中必须清除匹配通道3的中断标志位以及定时/计数器0的中断标志位。否则会不断的触发该中断。2. 定时/计数器13实现定时中断实例功能:该实例的主要功能是对定时/计数器13进行初始化,打开定时/计数
12、器13的NVIC中断,配置预分频寄存器PR和匹配寄存器T1MR0/T2MR0/T3MR0的值分别为10000-1和1000,当PCLK为10MHz,则定时/计数器13没1秒产生一次匹配。当开启定时/计数器和使能中断,每秒都会触发中断,从而执行中断服务函数,实现LED灯D11状态翻转。软硬件环境:实例是在keil MDK集成开发环境下编写的,硬件是基于LPC1788学习板内部的通用定时/计数器13及其匹配输出。工程创建过程:基于课本工程实例ZLX03进行修改,添加相应文件timer1.c、timer2.c、timer3.c、timer1.h、timer2.h、timer3.h,配置匹配通道0。流
13、程图如图2: LED初始化 Main函数入口定时器13中断到来定时计数器13初始化 用户按键初始化LED灯D11闪烁无限循环体LED灯D9不断闪烁图22.1 定时/计数器12.1.1 工程代码#include "includes.h"void Timer1Init(void)NVIC_DisableIRQ(TIMER1_IRQn);LPC_TIM1->CTCR=0;/定时器工作在定时模式下LPC_TIM1->IR=(1uL<<0);/中断寄存器IR配置通道0LPC_TIM1->MCR=(1uL<<0)|(1uL<<1);
14、/匹配控制寄存器MCRLPC_TIM1->PR=10000-1;LPC_TIM1->MR0=1000;LPC_TIM1->TCR=(1uL<<0);/启动定时计数器 NVIC_EnableIRQ(TIMER1_IRQn);void TIMER1_IRQHander(void)if(LPC_TIM1->IR&(1uL<<0)=(1uL<<0)LPC_TIM1->IR=1uL<<0;LEDBlink(3);NVIC_ClearPendingIRQ(TIMER1_IRQn);2.1.2 实例结果的分析与讨论本次实例
15、通过配置定时/计数器1匹配通道0,并设置相应的寄存器,实现每秒产生一次匹配中断,执行中断服务函数,实现D11的翻转。并且在中断服务函数中必须清除匹配通道0的中断标志位以及定时/计数器1的中断标志位。否则会不断的触发该中断。2.2 定时/计数器22.2.1 工程代码#include "includes.h"void Timer2Init(void)NVIC_DisableIRQ(TIMER2_IRQn);LPC_TIM2->CTCR=0;/定时器工作在定时模式下LPC_TIM2->IR=(1uL<<0);/中断寄存器IR配置通道0LPC_TIM2-&g
16、t;MCR=(1uL<<0)|(1uL<<1);/匹配控制寄存器MCRLPC_TIM2->PR=10000-1;LPC_TIM2->MR0=1000;LPC_TIM2->TCR=(1uL<<0);/启动定时计数器 NVIC_EnableIRQ(TIMER2_IRQn);void TIMER2_IRQHander(void)if(LPC_TIM2->IR&(1uL<<0)=(1uL<<0)LPC_TIM2->IR=1uL<<0;LEDBlink(3);NVIC_ClearPendingI
17、RQ(TIMER2_IRQn);2.2.2 实例结果的分析与讨论本次实例通过配置定时/计数器2匹配通道0,并设置相应的寄存器,实现每秒产生一次匹配中断,执行中断服务函数,实现D11的翻转。并且在中断服务函数中必须清除匹配通道0的中断标志位以及定时/计数器2的中断标志位。否则会不断的触发该中断。2.3 定时/计数器32.3.1 工程代码#include "includes.h"void Timer3Init(void)NVIC_DisableIRQ(TIMER3_IRQn);LPC_TIM3->CTCR=0;/定时器工作在定时模式下LPC_TIM3->IR=(1u
18、L<<0);/中断寄存器IR配置通道0LPC_TIM3->MCR=(1uL<<0)|(1uL<<1);/匹配控制寄存器MCRLPC_TIM3->PR=10000-1;LPC_TIM3->MR0=1000;LPC_TIM3->TCR=(1uL<<0);/启动定时计数器 NVIC_EnableIRQ(TIMER3_IRQn);void TIMER3_IRQHander(void)if(LPC_TIM3->IR&(1uL<<0)=(1uL<<0)LPC_TIM3->IR=1uL<
19、<0;LEDBlink(3);NVIC_ClearPendingIRQ(TIMER3_IRQn);2.3.2 实例结果的分析与讨论本次实例通过配置定时/计数器3匹配通道0,并设置相应的寄存器,实现每秒产生一次匹配中断,执行中断服务函数,实现D11的翻转。并且在中断服务函数中必须清除匹配通道0的中断标志位以及定时/计数器3的中断标志位。否则会不断的触发该中断。3. 头文件LPC177x_8x.h该文件中首先定义了各种中断对应的中断数,之后是Cortex-M3处理器以及外设配置寄存器的定义,一大串的自定义结构体;再之后是外围存储器地址映射,一大串宏定义,定义了外设的基地址以及首地址为对应基地
20、址的该类型的指针声明。3.1 看门狗寄存器的宏定义下列代码为头文件LPC177x_8x.h中与看门狗寄存器有关的代码。看门狗定时器中断数的定义:WDT_IRQn = 0, /*!< Watchdog Timer Interrupt */下面这段代码自定义了结构体类型LPC_WDT_TypeDef,该结构体成员按照对应的地址顺序排列:typedef struct _IO uint8_t MOD; uint8_t RESERVED03; _IO uint32_t TC; _O uint8_t FEED; uint8_t RESERVED13; _I uint32_t TV; uint32_t
21、 RESERVED2; _IO uint32_t WARNINT; _IO uint32_t WINDOW; LPC_WDT_TypeDef;以下代码确定了WDT寄存器的基地址,就等于0x40000000,并且定义了一个以WDT寄存器基地址为首地址的结构体 LPC_WDT_TypeDef类型的指针:#define LPC_APB0_BASE (0x40000000UL)#define LPC_WDT_BASE (LPC_APB0_BASE + 0x00000)#define LPC_WDT (LPC_WDT_TypeDef *) LPC_WDT_BASE )4. 改变定时频率实例功能:改变定时
22、器的定时频率,观察实验现象,从而更加深入的了解与定时器相关的寄存器的设置方法及其作用。软硬件环境:实例是在keil MDK集成开发环境下编写的,硬件是基于LPC1788学习板的系统节拍定时器、RTC实时时钟和看门狗定时器。工程创建过程:基于课本工程实例ZLX04进行修改,在systick.c文件中进行系统节拍定时器的频率设置SysTick->LOAD=600000-1;该语句将定时频率设计为200Hz(即定时周期为5ms);基于课本工程实例ZLX05进行修改,在rtc.c文件中进行实时时钟的定时频率设置LPC_RTC->CIIR|=(1uL<<1);该语句将之前的秒中断
23、设置成了分中断;基于课本工程实例ZLX06进行修改,LPC_WDT->TC=250000+500-1;该语句重新设置了WDTC寄存器的值,没减数250000(即每隔2秒)产生一次看门狗中断。流程图如图3: LED初始化 Main函数入口系统节拍定时器初始化、或者RTC实时时钟初始化、再或者看门狗定时器初始化定时器中断到来 用户按键初始化LED灯D9闪烁无限循环体图34.1 系统节拍定时器4.1.1 工程代码/Filename:systick.c#include "includes.h"void SysTickInit(void)SysTick->CTRL=(1u
24、L<<1)|(1uL<<2);/开放系统节拍定时器中断,并且选择系统时钟为时钟源(系统时钟为120MHz)SysTick->VAL=0;/清除STCURR的值及STCTRL的COUNTFLAG标志SysTick->LOAD=600000-1;/定时频率为200Hz,即定时周期为5msSysTick->CTRL|=1;/启动系统节拍定时器void SysTick_Handler(void)static Int32U i=0;i+;if(i=400)/2秒LED灯翻转一次。i=0;LEDBlink(1);4.1.2 实例结果的分析与讨论通过对系统节拍定时器
25、4个寄存器STCTRL、STRELOAD、STCURR和STCALIB的设置,成功实现系统节拍定时器每隔5ms触发一次中断,变量i加1,每2秒执行一次LED灯D9的翻转语句,更加熟练的掌握了系统节拍定时器的相应设置方法。4.2 RTC实时时钟4.2.1 工程代码/Filename:rtc.c#include "includes.h"void RTCInit(void)NVIC_DisableIRQ(RTC_IRQn);LPC_RTC->CCR|=(1uL<<4);/关闭实时时钟并清零校正计数器LPC_RTC->ILR=(1uL<<0)|(
26、1uL<<1);/清除计数和报警的中断标志LPC_RTC->AMR=0xFF;/屏蔽报警功能LPC_RTC->CIIR=0;/关闭实时时钟的全部定时中断LPC_RTC->CALIBRATION=0;/关闭实时时钟的校时功能LPC_RTC->YEAR=2014;LPC_RTC->MONTH=10;LPC_RTC->DOM=1;LPC_RTC->HOUR=0;LPC_RTC->MIN=0;LPC_RTC->SEC=0;LPC_RTC->CCR|=(1uL<<1);/复位实时时钟LPC_RTC->CCR&
27、;=(1uL<<1);LPC_RTC->CIIR|=(1uL<<1);/分计数值加1将产生中断LPC_RTC->CCR|=(1uL<<0);/启动实时时钟NVIC_EnableIRQ(RTC_IRQn);void RTC_IRQHandler(void)Int32U state;state=LPC_RTC->ILR;if(state&(1uL<<0)=(1uL<<0)/定时中断LEDBlink(1u);LPC_RTC->ILR=state;if(state&(1uL<<1)=(1uL
28、<<1)/报警中断/your code hereLPC_RTC->ILR=state;NVIC_ClearPendingIRQ(RTC_IRQn);4.2.2 实例结果分析与讨论通过对RTC实时时钟寄存器的设置,实现分累加触发中断,每分钟LED灯翻转。在配置寄存器的过程中发现RTC实时时钟结构很复杂,需要设置的参数很多,具有报警和定时两类中断,此例中屏蔽了报警的功能,也不是很了解其作用,需要以后进一步熟悉。4.3 看门狗定时器4.3.1 工程代码/Filename:wdog.c#include "includes.h"void WDogInit(void)NVIC_DisableIRQ(W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论