打印

MSP430使用指南- Timer定时器模块

[复制链接]
楼主: 无法去污粉
手机看帖
扫描二维码
随时随地手机跟帖
21
无法去污粉|  楼主 | 2023-10-19 15:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
中断方式,寄存器,输入捕捉,输出比较(PWM),例程。

下面按照这种方法来进行讲解(比较乱,但是我认为这种方式比较合理,先搞清楚定时器原理及模式,在进一步细看寄存器,中断实现方式,在面向使用去了解输入捕捉和输出比较,最后进行例程的学习)。

Timer_A定时器的中断
在细看完上面的讲解后,你可能会有个印象,Timer_A模块有两种中断:TAxIFG和TAxCCRx中断,那么中断向量如何呢?(中断向量是中断的入口)

如果拆开看有8个中断:TAxIFG,CCR0IFG-CCR6IFG,每个都分配一个中断向量? 太浪费了吧! 因此MSP430只分配了两个中断向量:

TAxCCR0自己单独一个中断向量,名字叫做:TIMER0_A0 (TimerA0),这个不需要记,去看工程下的cmd文件即可。

使用特权

评论回复
22
无法去污粉|  楼主 | 2023-10-19 15:50 | 只看该作者
剩下的TAxIFG和TAxCCRx共同享用一个中断向量:TIMER0_A1 (TimerA0),因此你会发现每个定时器仅有两个中断向量,也就够使用了,那么如何用呢?

对于CCR0中断:
// Timer0_A0 interrupt service routine
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer0_A0_ISR (void)
{
  P1OUT ^= BIT0;
}

使用特权

评论回复
23
无法去污粉|  楼主 | 2023-10-19 15:50 | 只看该作者
对于其他中断,进入中断后需要进行中断类型判断:
// Timer0_A1 Interrupt Vector (TAIV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
  switch(__even_in_range(TA0IV, TA0IV_TAIFG))
  {
    case TA0IV_NONE:   break;               // No interrupt
    case TA0IV_TACCR1: break;               // CCR1 not used
    case TA0IV_TACCR2: break;               // CCR2 not used
    case TA0IV_TACCR3: break;               // reserved
    case TA0IV_TACCR4: break;               // reserved
    case TA0IV_TACCR5: break;               // reserved
    case TA0IV_TACCR6: break;               // reserved
    case TA0IV_TAIFG:                       // overflow
      P1OUT ^= BIT0;
      break;
    default: break;
  }
}

使用特权

评论回复
24
无法去污粉|  楼主 | 2023-10-19 15:51 | 只看该作者
注意:并不是所有的Timer_A都有6个CCR寄存器,具体有几个看每个芯片的datasheet。

Timer_A寄存器
先看一下总共有多少寄存器:18个寄存器,但是只有六类寄存器,其他都是相同的。

使用特权

评论回复
25
无法去污粉|  楼主 | 2023-10-19 15:52 | 只看该作者
TAxCTL寄存器

使用特权

评论回复
26
无法去污粉|  楼主 | 2023-10-19 15:52 | 只看该作者
TASSEL :  时钟源选择,如上图所示,有四种时钟源。
ID : 时钟源分频,对选中的时钟源进行分频后再输入Timer用于计数。
MC : 定时器模式选择,设定上述所讲的四种模式。
TACLR : 计数器清零位,写1会清除当前计数值,会自动复位。
TAIE : Timer_A中断使能位。
TAIFG : Timer_A中断标志位,即使中断不使能,当产生中断信号时,标志位也会置位。

使用特权

评论回复
27
无法去污粉|  楼主 | 2023-10-19 15:53 | 只看该作者
TAxR寄存器

使用特权

评论回复
28
无法去污粉|  楼主 | 2023-10-19 15:53 | 只看该作者
TAxR : 计数器当前计数的值,可以进行读写操作。

使用特权

评论回复
29
无法去污粉|  楼主 | 2023-10-19 15:54 | 只看该作者
TAxCCTLn寄存器

使用特权

评论回复
30
无法去污粉|  楼主 | 2023-10-19 15:54 | 只看该作者

使用特权

评论回复
31
无法去污粉|  楼主 | 2023-10-19 15:54 | 只看该作者
CM : 捕捉边沿类型,这个用于捕捉外部的信号,可以选择上升沿,下降沿,上升/下降沿。
CCIS :  捕捉输入通道选择,可以选择成A, B, GND, VCC,每个通道对应的GPIO口不同,具体看datasheet。
SCS : 同步捕捉还是异步捕捉,是否将输入信号与时钟信号进行同步,看结构图可以看到内部就是使用了一个与门,可以实现时钟信号与输入信号的同步,这个根据客户需要进行选择,一般来说两种模式都可以,具体看客户使用场景,在学习是注意一下有这个点即可,当遇到问题时,如果可能是时序问题的话,查看一下这个。
SCCI : 同步输入信号加载紧EQU失能位选择,就是给EQU多一个输入源CCI。
CAP : 输入捕捉模式还是输出比较模式选择。
OUTMOD : 输出模式类型,总共有7中模式,也就是再不同中断情况下进行不同的操作,可能是置位,也可能是复位,或者反转等,很多模式都可以输出PWM波,用户自己看就可以。

使用特权

评论回复
32
无法去污粉|  楼主 | 2023-10-19 15:54 | 只看该作者
给出一个再Up模式下不同模式的波形图:

模式1(001) :   CCR1中断时直接置位。

模式2(010)  :     CCR1中断时反转,CCR0中断时复位。

模式3(011)  :     CCR1中断时置位,CCR0中断时复位。

模式4(100)  :     CCR1中断时反转。

模式5(101)  :     CCR1中断时复位。

模式6 (110):      CCR1中断时反转,CCR0中断时置位。

模式7 (111):      CCR1中断时复位,CCR0中断时置位。

使用特权

评论回复
33
无法去污粉|  楼主 | 2023-10-19 15:55 | 只看该作者

使用特权

评论回复
34
无法去污粉|  楼主 | 2023-10-19 15:55 | 只看该作者
CCIE : 输入捕捉或输出比较使能。
CCI : 只读寄存器,可以读取被选中通道的点评状态。
OUT : 输出比较模式时初始输出状态。当OUTMOD=000时,就直接一致输出这个状态。
COV : 输入捕捉overflow产生,即溢出了,当输入的数大于0xFFFF时会溢出,这一位必须软件复位。注意,在计算输入捕捉到的脉冲数量时,需要检测这一位,否则会出现溢出情况导致捕捉到的脉冲是负数或者差一个0xFFFF。
CCIFG : 输入捕捉/输出比较中断标志位。

使用特权

评论回复
35
无法去污粉|  楼主 | 2023-10-19 15:56 | 只看该作者
TAxCCRn寄存器

使用特权

评论回复
36
无法去污粉|  楼主 | 2023-10-19 15:56 | 只看该作者
TAxCCRn : 输出比较时使设定值,输入捕捉时是当收到捕捉信号时定时器的值。

使用特权

评论回复
37
无法去污粉|  楼主 | 2023-10-19 15:56 | 只看该作者
TAxIV寄存器

使用特权

评论回复
38
无法去污粉|  楼主 | 2023-10-19 15:57 | 只看该作者
TAIV : 只读寄存器,中断类型标志位,用来识别是哪个中断源引起的中断(因为除了TAxCCR0,其他中断源共享一个中断向量)

使用特权

评论回复
39
无法去污粉|  楼主 | 2023-10-19 15:57 | 只看该作者
TAxEX0寄存器

使用特权

评论回复
40
无法去污粉|  楼主 | 2023-10-19 15:57 | 只看该作者
TAxIDEX : 输入时钟分频寄存器,和TAxCTL寄存器中ID位效果一致,用来对所选的时钟进行分频后再输入给Timer_A。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则