本帖最后由 西芷何稻 于 2014-2-22 15:52 编辑
浅浅学过51,现在因为要做东西,学习MSP430,一边学一遍提高51. 我还是把所有疑问都写在一个帖子上来,菜鸟好多疑问。
【2014.2.21】【已解决】 学完了向导和实验手册的定时和中断部分,对定时器有了一个初步的认识。现在我找来TI的官方例程,继续学习定时器。现在遇到疑问。不理解下面的swith函数,2,4,10如何确定?自己找了资料,在仔细的看了看user guide, 明白了
中断优先级 中断源 缩写 TAIV的内容
最高 捕获/比较器1 CCIFG1 2
捕获/比较器2 CCIFG2 4
……
捕获/比较器x CCIFGx
最低 定时器溢出 TAIFG1 10
没有中断将挂起
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1DIR |= 0x01; // P1.0 output
TACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, contmode, interrupt
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
/*对于每一个定时器来说,它有两个中断,TIMERA0_VECTOR 和TIMERA1_VECTOR 。
* 这两个中断何时被触发呢?在MSP430中,TIMERA0_VECTOR在TACCR0寄存器溢出时被触发;
* 而TIMERA1_VECTOR 在三个时候都可以被触发(TACCR1 CCIFG、TACCR2 CCIFG,TAIFG
* 只要这三个寄存器中的任何一个被置位了,TIMERA1_VECTOR 中断就会被触发)。
*/
// Timer_A3 Interrupt Vector (TA0IV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A(void)
{
switch( TA0IV )
{
case 2: break; // CCR1 not used
case 4: break; // CCR2 not used
case 10: P1OUT ^= 0x01; // overflow
break;
}
}
复制代码
2014.2.21 【中断怎么才结束】【已解决】:原因:自己另外用51模仿了差不多的程序,发现自己想多了。程序是一直跑的。麻烦解决一下我的疑问。tks
下面是学习向导和实验手册的Lab5程序,我的理解是,BIT0(红灯)一开始就闪烁,然后Timer0的 计数器加到12000,就调用中断,红灯停止闪烁,(BIT6)绿灯闪烁。
但是板子上的情况是红灯闪烁两下,然后绿灯闪烁,然后红灯闪两下,然后绿灯闪烁,但是每次绿灯闪烁的次数不同。我不明白为什么会这样。 或者说我不是很明白 这个程序的中断怎么跑。 另外“Since the ACLK (VLO) is running at 12 kHz, the value needs to be 12000 cycles.”我不是很明白。
ps:CCS的字体怎么调整?