定时器A TIMER A 新认识
现在的认识:
MSP430 5438 有3个时钟,分别是 TA0、TA1 和TB
了解了定时器A的用法:
定时器A可以分成几个独立的时间周期。这几个时钟周期共用一个计数器TA1R 或TA0R。
在头文件中可以查到:
TIMER0 含 TA0CCR0- TA0CCR4 五个
TIMER1 含 TA1CCR0- TA1CCR2 三个
TA0CCR0TA1CCR0 用于控制计数周期,也就是每当TA0RTA1R 计数到TA0CCR0TA1CCR0所设定的数值后就会清零。
如:
TA0CCR0 =8000; // CCR0必须最大,因为一计数到CCR0即立刻清0,用于
控制周期 每8000单位时间就触发一次,并TA0R从新
计数
TA0CCR1=4000; //每4000单位时间就触发一次
TA0CCR2=1000; //每1000单位时间就触发一次
/
/ Timer0 A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
UART3_SendStr_char("count to CCR0"); //计数到CCR0触发
}
// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
switch(__even_in_range(TA0IV,14))
{
case 0: break;
case 2: UART3_SendStr_char("count to CCR1"); //计数至CCR1触发
break;
case 4: UART3_SendStr_char("count to CCR2"); //计数至CCR2触发
break;
case 6: break; // CCR3 not used
case 8: break; // CCR4 not used
case 10: break; // CCR5 not used
case 12: break; // Reserved not used
case 14: break; // 溢出触发
default: break;
}
}
msp430的定时器A 划分几个独立时间间隔
TAIV:
#define TAIV_TACCR1 (0x0002)
#define TAIV_TACCR2 (0x0004)
#define TAIV_TAIFG (0x000A)
TIMERA1_VECTOR是一个中断向量,主要处理CCR1,CCR2,以及定时器A溢出的中断标志,而CCR1,CCR2,以及定时器A产生中断是的TAIV是不同的,分别是2,4,10
switch( TAIV ) { case 2: break; case 4: break; case 10: P3OUT ^= BIT4; break; }
这一句的意思是,判断是哪个产生中断的,以执行不懂的程序,当然,在里面没写有,但是当你自己去写的时候可自己加进去。
CCR0,CCR1,CCR2
分别是比较/捕获模块1,2,3的比较/捕获寄存器,一般CCR0用来控制周期。
至于具体怎么应用,这是很难解释的,解释了可能你还是不同。最好的办法就是一边写程序,一边查书。
6月2日 周四 晴 定时器A
现在的认识:
MSP430 5438 有3个时钟,分别是 TA0、TA1 和TB
了解了定时器A的用法:
定时器A可以分成几个独立的时间周期。这几个时钟周期共用一个计数器TA1R 或TA0R。
在头文件中可以查到:
#define TIMER1_A1_VECTOR (48 * 2u)
#define TIMER1_A0_VECTOR (49 * 2u)
#define TIMER0_A1_VECTOR (53 * 2u)
#define TIMER0_A0_VECTOR (54 * 2u)
TIMER0 含 TA0CCR0- TA0CCR4 五个
TIMER1 含 TA1CCR0- TA1CCR2 三个
TA0CCR0 对应中断向量 A0_VECTOR
TA0CCR1-4 对应中断向量 A1_VECTOR
//A0定时器,用于界面处理
TA0CCTL0 = CCIE; // CCR0 interrupt enabled
TA0CCTL1 = CCIE; // CCR1 interrupt enabled//时间周期1使能
TA0CCTL2 = CCIE; // CCR2 interrupt enabled//时间周期2使能
TA0CCTL3= CCIE; // CCR3 interrupt enabled//时间周期3使能
//TA0CCTL4= CCIE; // CCR3 interrupt enabled//时间周期3使能
TA0CCR0=256;//TA0R 计数到65535才清零。
TA0CCR1=4096; //1s
TA0CCR2=1024; //1/4
TA0CCR3=8192; //2s
TA0CTL = TASSEL_1+ID_3 + MC_2 + TACLR+ TAIE; // ACLK, 8分频,MC_2:连续模式, clear TAR
// Timer1 A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
// TA0CCR0 += 64;// Add Offset to CCR0
TA0CCR0 += 256;// 1/16s Add Offset to CCR0
if(ReadUART0_new>0)
ReadUART0_new--;
if(ReadUART1_new>0)
ReadUART1_new--;
}
// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
switch(__even_in_range(TA0IV,14))
{
case 0:
break;
case 2:
TA0CCR1 +=4096; //1s Add Offset to CCR1
SecondReach=1;
CountToMunite++;
SecondTimecount++;
if(waringstatus>0)
{
//buzzer();
// waringlight();
}
break; // CCR4 not used
case 4:
TA0CCR2+= 1024; // 1/2s Add Offset to CCR2
// buzzer();
// waringlight();
break;
case 6:
spark++;
TA0CCR3+=8192; // 2s Add Offset to CCR3
// buzzer();
// waringlight();
break;
case 8:
break; // CCR3 not used
case 10:
break; // CCR5 not used
case 12:
break; // Reserved not used
case 14:
上一篇:msp430的中断|中断优先级|中断嵌套
下一篇:【msp430】学习经验总结| 心得体会
推荐阅读最新更新时间:2024-10-27 01:41
- 热门资源推荐
- 热门放大器推荐
设计资源 培训 开发板 精华推荐
- 点评Vishay视频 疯狂抢楼赢礼进行时!
- 推荐有礼,分享有你!DSP学习季开学了,推荐你最喜欢的TI DSP资料!
- LPC8N04测评,激发你的NFC&物联网新创意!
- 【抢楼有奖】聊聊你和电容的恩怨情仇!
- 推陈出“芯“——TI 带你领略智能手机黑科技在线直播 预报名+看直播 好礼让你嗨翻全场!
- 艾睿电子线上研讨会:英特尔FPGA深度学习加速技术 7月30日上午10:00-11:30 期待您的莅临!
- 跟 TI工程师 立下你的金猪Flag!立Flag & 分享赢双重好礼!
- 阅读TI DLP ® 博文,带你走进不一样的视野!
- 走进TE物联网应用资料中心,免费下载行业趋势报告、技术干货,还有样品申请