主题中讨论的其他器件: 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 ...
请向我解释。
非常感谢