作者:BerenCamlost
本文针对于MSP430单片机原理与应用课程,请在复习时使用。
参考资料:
- PPT
- MSP430F6638用户手册
- 实验教程
本章最新更新日期:2018.12.22
第五章 Timer_A0寄存器
5.1 TA0CTL
BITS | Field | Description | 默认 |
---|---|---|---|
9-8 | TASSEL | Timer_A0时钟源选择 | TAxCLK |
5-4 | MC | 计数模式选择,注意复习三种计数模式 | 停止计数 |
2 | TACLR | 清零计数器 | |
1 | TAIE | TA中断使能 | 0 |
0 | TAIFG | TA中断标志位 | 0 |
- 【注意】Timer_A0有两种中断,一种是TAIFG,一种是TAxCCR0 CCIFG
5.2 TA0R
TA0的16位计数器,这个没啥好说的
我起啦,一枪秒啦,有什么好说的
5.3 TA0CCTLn(n=0~6)
bits | field | Description |
---|---|---|
15-14 | CM | 捕获模式选择 |
13-12 | CCIS | These bits select the TAxCCR0 input signal(不想翻译) |
8 | CAP | 选择捕获或者比较模式(0:捕获,1:比较) |
7-5 | OUTMOD | 输出模式 |
4 | CCIE | 捕获比较中断的使能 |
2 | OUT | 如果OUTMOD选择的是OUT模式,这个可以设置输出高还是低 |
0 | CCIFG | 捕获比较中断标志位 |
5.4 TA0CCRn
这个就是存放比较寄存器的值,可以用来设置周期和占空比
5.5 TA0IV
- TAIV中断的中断矢量寄存器,当除TA0CCR0之外的中断标志位置位时,这里面的值就会改变,不同的值对应了不同的中断,可以在终端服务函数中查看这个寄存器的值来确定是哪一个中断到来。
- 注意这个中断服务函数的中断矢量(TIMER0_A1_VECTOR)和本征函数(__even_in_range(TA0IV,14))的运用。
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
switch(__even_in_range(TA0IV,14))// __even_in_range()本征函数,用于多源中断的查询。
{
//优先级从高到低,已经被硬件规定好了
case 0: break; // No interrupt
case 2: break; // TAxCCR1 CCIFG
case 4: break; // TAxCCR2 CCIFG
case 6: break; // TAxCCR3 CCIFG
case 8: break; // TAxCCR4 CCIFG
case 10: break; // TAxCCR5 CCIFG
case 12: break; // TAxCCR6 CCIFG
case 14: break; // TAxCTL TAIFG
default: break;
}
}