This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430F149:Timer_A 的 TAR 计数不连续

Guru**** 2553450 points
Other Parts Discussed in Thread: MSP430F149

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/594671/ccs-msp430f149-the-tar-of-timer_a-counts-discontinuously

器件型号:MSP430F149
主题中讨论的其他器件: MSP-FET430UIF

工具/软件:Code Composer Studio

MSP430F149 --> TAR 计数不连续

你(们)好、Technican

我想学习 Timer_A 的时间中断

我使用 MSP430F149、MSP-FET430UIF、Code Composer Studio 7.1.0.00016。 我有以下计划:

 

1  .cdecls C、list、 "msp430.h"

2  ;---------------------------------------------------

3            .def   重置                   ;导出程序入口点以使链接器知道它。

4            .text                           ;程序启动

5  ;--------------------------------------------------

6  重置     mov.w  #0A00h、SP              ;初始化 stackpointer

7  StopWDT   mov.w  #WDTPW+WDTHOLD、&WDTCTL ;停止 WDT

8  ;--------------------------------------------------

9  SetupBC   BIC.b  #XT2OFF、&BCSCTL1       ;XT2 =打开

10 SetupOsc  BIC.b  #OFIFG,&IFG1           ;清除 OSC 故障标志

11mv.w              #0FFh、R15              ;R15 =延迟

12 设置振荡器1 解码 w  R15                    ;确保启动的额外延迟

13            振    荡器1              ;

14            bit.b  #OFIFG、&IFG1           ;OSC 故障标志是否被置位?

15            jnz    SetupOsc               ;OSC 故障,再次清除标志

16            bs.b  #SELM_2+SELS、BCSCTL2   ;MCLK = SMCLK = XT2

17 ;------------------------------------------------

18 SetupP2   bis.b  #001h、&P2DIR           ;P2.0输出

19 SetupC0   mov.w  #CCIE、&CCTL0           ;CCR0中断被启用

20mv.w              #4000、&CCR0

21 SetupTA   mov.w  #tassel_2+MC_2、&TACTL  ;SMCLK、连续模式

22                bis.w  #GIE、SR                ;中断被启用

23 LOOP_NOP                                  ;用于调试器

24nop             

25nop             

26nop             

27nop             

28nop             

29            JMP     Loop

30 ;-------------------------------------------------

31 TA0_ISR                                                              ;切换 P2.0

32            异或 b  #001h、P2OUT           ;切换 P1.0

33            add.w  #4000、&CCR0            ;将偏移添加到 CCR0

34报告                                        

35 ;--------------------------------------------------------------

36; 中断矢量

37            .sect  ".reset"               ;MSP430复位矢量

38            .短 时间重置                  ;

39            .sect  ".int06"               ;Timer_A0矢量

40            .short TA0_ISR                ;

41            结束

 

           I debug (运行仿真)、单击 Step into。

21行:

           TACLT (十六进制):0x0000

           TACCTL0 (十六进制):0x0010

           TACCTL1 (十六进制):0x0000

           TACCTL2 (十六进制):0x0000

           TAR (十进制):0

           TACCR0 (十进制):4000

22行:

           TACLT (十六进制):0x0221

           TACCTL0 (十六进制):0x0011

           TACCTL1 (十六进制):0x0001

           TACCTL2 (十六进制):0x0001

           tar (十进制):23473

           TACCR0 (十进制):4000

在23行:

           TACTL、TACCTL0、TACCTL1、TACCTL2、TACCR0不变、 tar=13918。

依次单击“Step into”(进入)后,TAR 将更改:63827 --> 40808 --> 55441 --> 41685...

另一方面,每次重新启动 TAR 的值与以前的值不同。

 

结果、程序运行为通配。

我不理解 TAR 是如何工作的。 我想当 ID (除法器)位为00时

然后 TAR 将计数:0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6、... 65534 -> 65535 -> 0 -> 1 -> 0 ...

请向我解释。

非常感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    计时器根据其时钟定义的频率进行计数。 这比您可以观察到的速度快。

    在调试时、停止 CPU 也可能会停止时钟。 当您步进程序时、计时器计数的大小取决于步进之间运行的 CPU 周期数。

    要观察程序的实时行为、您必须让程序运行而不停止它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。

    tar 计数过快将很难对 eror 进行故障排除。
    此 Code Compose Studio 软件与我知道的 Microchip 的 MPLAB_IDE 软件或盛群半导体的 HT-IDE3000不同。
    在实际编程中、MCU 执行了很多操作。
    ROUND LOOP_NOT (行:23、24、25、26、27、 28、29)表示 MCU 的许多操作。
    当程序在无法观察到 TAR 的某个位置运行时、则找不到错误。
    在上面的程序中、我观察到该程序仍在第32、33、34行中运行、但在第24、25、26、27、28行中没有返回、 29.
    因此、使用 Code Compose Code 的调试器无法找到错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在第23行 TAR = 13918
    在第24行 TAR = 63827
    从第23行到第24行、只有指令 NOP、TAR = 63827-13918 = 49909。
    我使用 XT2IN 和 XT2OUT 之间连接的 XTAL 8MHz。
    从第23行到第24行执行指令 NOP 的时间= 1/8*49909us = 6238.625us。 这是荒谬的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但第23行和第24行中的代码实际上并不读取 TAR。 启动和停止 CPU 以及通过调试器读取 TAR 寄存器(和其他寄存器)也是其他操作、这可能需要为 taget 计时。