这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » LM3S811学习笔记(TIMER)

共3条 1/1 1 跳转至

LM3S811学习笔记(TIMER)

高工
2012-11-04 17:28:56     打赏
实验内容:配置定时器0为两个16为模式 TIMERA为16位PWM输出模式。TIMERB为16位定时模式,超时中断,中断中闪烁LED

实验目的:熟悉定时器的配置

通用定时器模块(GPTM) 包含3个GPTM 模块(定时器0, 定时器1和定时器2)。每个GPTM模块包含两个16位的定时器/计数器(称作TimerA和TimerB),用户可以将它们配置成独立运行的定时器或事件计数器,或将它们配置成1个32位定时器或一个32位实时时钟(RTC)。定时器也可用于触发模数(ADC) 转换。由于所有通用定时器的触发信号在到达ADC模块前一起进行或操作,因而只需使用一个定时器来触发ADC事件。
注意: 定时器2是一个内部定时器,只能用来产生内部中断或触发ADC时间。
对定时器API 来说,提供的2 个定时器称为TimerA 和TimerB。当配置用作一个32 位或16 位的定时器时,定时器可设置成作为一个单次触发的定时器或一个连续的定时器来运行。
如果配置用作一个单次触发的定时器,定时器的值到达零时将停止计数。
如果配置用作一个连续的定时器,定时器的值到达零时将从重装值开始继续计数。
当定时器配置用作一个32 位的定时器时,它也可以用作一个RTC。如果这样,定时器就希望由一个32kHz 的外部时钟来驱动,这个时钟被分频来产生1 秒的时钟节拍。在16 位的模式中,定时器也可以配置用于事件捕获或脉宽调制器(PWM)发生器。
当配置用于事件捕获时,定时器用作一个计数器。定时器可以配置成计数两个事件之间的时间或计数事件本身。被计数的事件类型可以配置成上升沿、下降沿或者上升和下降沿。当定时器配置用作一个PWM 发生器时,用来捕获事件的输入线变成了输出线,定时器被用来驱动一个边沿对准的脉冲到这条线上。
定时器模块还提供了控制其它功能参数,例如输出翻转、输出触发和终止过程中的定时器行为的能力。除此之外,还提供了中断源和事件的控制。用产生中断来指示一个事件的捕获或特定数量事件的捕获。当定时器递减计数到零或RTC 匹配某个特定值时也可以产生中断。
#include "main.h"
void GpioLedBlink(void) //PE0闪烁
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); GPIODirModeSet(GPIO_PORTE_BASE,GPIO_PIN_0,GPIO_DIR_MODE_OUT); GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0,0x01);
Delay();
GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0,~0x01);
Delay();
}
////定时器0 32位模式溢出中断
//void Timer_Init(void)
//{
// SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); /* 使能定时器0模块 */
// TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER); /* 配置为32位周期计数模式 */ // TimerLoadSet(TIMER0_BASE, TIMER_A, 50000000*4); //设置定时时间
// TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); //设置为溢出中断
// IntEnable(INT_TIMER0A); /* 使能定时器0中断
*/
// TimerEnable(TIMER0_BASE, TIMER_A); /* 使能定时器0 */
//}
void Timer_Init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);//使能定时器0模块(定时器1模块。。) SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); //TIMER0A(PD4) 16位PWM输出,TIMER0B(PC5) 16位周期定时器
TimerConfigure(TIMER0_BASE,TIMER_CFG_16_BIT_PAIR | TIMER_CFG_A_PWM); TimerConfigure(TIMER0_BASE,TIMER_CFG_16_BIT_PAIR | TIMER_CFG_B_PERIODIC); GPIOPinTypeTimer(GPIO_PORTD_BASE, GPIO_PIN_4);//PD4用于T0A的PWM输出 TimerControlLevel(TIMER0_BASE,TIMER_A,~TRUE);//定时器PWM输出高电平有效 TimerLoadSet(TIMER0_BASE,TIMER_BOTH,32767/2);//定时器装载值 TimerMatchSet(TIMER0_BASE,TIMER_A,16383/2);//定时器匹配值,在捕获计数模式中决定何时中端处理器 在PWM模式中决定输出信号占空比 TimerPrescaleSet(TIMER0_BASE,TIMER_BOTH,0);//输入时钟预分频值,只在16位模式中工作 TimerIntEnable(TIMER0_BASE,TIMER_CAPA_MATCH);//捕获A匹配中断 TimerIntEnable(TIMER0_BASE,TIMER_TIMB_TIMEOUT);//timer0B,超时中断使能 IntEnable(INT_TIMER0B);//使能T0中断,不知是否与上一句重复 TimerEnable(TIMER0_BASE,TIMER_BOTH);//使能定时器0
}
void Timer0B_ISR(void)
{
TimerIntClear(TIMER0_BASE,TIMER_TIMB_TIMEOUT);//T0B溢出中断
GpioLedBlink();
}
//用于32位溢出中断
//void Timer0A_ISR(void)
//{
// TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);
// GpioLedBlink();
//}
void main(void)
{
Bsp_Init();
SysCtlClockSet( SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ );
Timer_Init();
while(1) { }
}



关键词: LM3S811     学习     笔记     TIMER     配置     定时    

高工
2013-01-04 17:01:19     打赏
2楼
改!立马改!这个是初期的帖子了,当时是直接粘贴过来的,所以。。。

高工
2013-01-24 11:34:15     打赏
3楼
乱的我自己都不想看了,抽看再整理一下,是该形成一种风格了,还请老大多多指点

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]