各位大牛好,最近刚接触一点儿MSP单片机的定时器程序。以TimerA举例:
配置:
TA0CTL = TBSSEL_1 + MC_1 + TACLR; // 选择ACLK(不重要,选谁都有这个问题),选择Up mode,清计数器
TA0CCTL0 = CCIE;// 使能比较中断
之后,配置 TA0CCR0 = 16000,如果在中断函数里面不对TA0CCR0进行任何操作,中断函数只能够进入一次。
必须要在中断函数中写入 TA0CCR0 += 16000,中断函数才会定时、连续的进入。
但是看User's Guide上面写的Up mode是这样的啊:
写的是“When the timer value equals TAxCCR0, the timer immediately restarts counting from zero”.
感觉上应该是自动的啊?如果还需要不断的赋值,那和continue mode又有什么区别了?
鉴于能够干活,对定时精度要求也不是太高所以这个问题就放着了也没有细细研究,发上来也希望大牛们有兴趣指导一下
另外,我看过一个能够正常运转的例程,用的是TimerB,配置是这么写的:
TBCTL = TBSSEL_1 + MC_1 + TBCLR + TBIE ;// 在头文件里面有这样的定义:#define TBCTL TB0CTL
TBCCR0 = 64 ; // 在头文件里面有这样的定义:#define TBCCR0 TB0CCCR0
然后中断向量却写的是:
#pragma vector=TIMERB1_VECTOR
但是却能够正常的触发和进入中断
我不明白为什么配置了 0 编号的属性,却能进 1 编号的中断
以上
此帖出自
小平头技术问答
一周热门 更多>