新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > msp430的定時器A 劃分幾個獨立時間間隔

        msp430的定時器A 劃分幾個獨立時間間隔

        作者: 時間:2016-11-25 來源:網絡 收藏
        TAIV:
        #define TAIV_TACCR1 (0x0002)
        #define TAIV_TACCR2 (0x0004)
        #define TAIV_TAIFG (0x000A)
        TIMERA1_VECTOR是一個中斷向量,主要處理CCR1,CCR2,以及定時器A溢出的中斷標志,而CCR1,CCR2,以及定時器A產生中斷是的TAIV是不同的,分別是2,4,10
        switch( TAIV ) { case 2: break; case 4: break; case 10: P3OUT ^= BIT4; break; }
        這一句的意思是,判斷是哪個產生中斷的,以執行不懂的程序,當然,在里面沒寫有,但是當你自己去寫的時候可自己加進去。
        CCR0,CCR1,CCR2
        分別是比較/捕獲模塊1,2,3的比較/捕獲寄存器,一般CCR0用來控制周期。
        至于具體怎么應用,這是很難解釋的,解釋了可能你還是不同。最好的辦法就是一邊寫程序,一邊查書。
        6月2日 周四 晴 定時器A
        現在的認識:
        MSP430 5438 有3個時鐘,分別是 TA0、TA1 和TB
        了解了定時器A的用法:
        定時器A可以分成幾個獨立的時間周期。這幾個時鐘周期共用一個計數器TA1R 或TA0R。
        在頭文件中可以查到:
        #define TIMER1_A1_VECTOR (48 * 2u)
        #define TIMER1_A0_VECTOR (49 * 2u)
        #define TIMER0_A1_VECTOR (53 * 2u)
        #define TIMER0_A0_VECTOR (54 * 2u)
        TIMER0 含 TA0CCR0- TA0CCR4 五個
        TIMER1 含 TA1CCR0- TA1CCR2 三個
        TA0CCR0 對應中斷向量 A0_VECTOR
        TA0CCR1-4 對應中斷向量 A1_VECTOR
        //A0定時器,用于界面處理
        TA0CCTL0 = CCIE; // CCR0 interrupt enabled
        TA0CCTL1 = CCIE; // CCR1 interrupt enabled//時間周期1使能
        TA0CCTL2 = CCIE; // CCR2 interrupt enabled//時間周期2使能
        TA0CCTL3= CCIE; // CCR3 interrupt enabled//時間周期3使能
        //TA0CCTL4= CCIE; // CCR3 interrupt enabled//時間周期3使能
        TA0CCR0=256;//TA0R 計數到65535才清零。
        TA0CCR1=4096; //1s
        TA0CCR2=1024; //1/4
        TA0CCR3=8192; //2s
        TA0CTL = TASSEL_1+ID_3 + MC_2 + TACLR+ TAIE; // ACLK, 8分頻,MC_2:連續模式, clear TAR
        // Timer1 A0 interrupt service routine
        #pragma vector=TIMER0_A0_VECTOR
        __interrupt void Timer_A0 (void)
        {
        // TA0CCR0 += 64;// Add Offset to CCR0
        TA0CCR0 += 256;// 1/16s Add Offset to CCR0
        if(ReadUART0_new>0)
        ReadUART0_new--;
        if(ReadUART1_new>0)
        ReadUART1_new--;
        }
        // Timer_A3 Interrupt Vector (TAIV) handler
        #pragma vector=TIMER0_A1_VECTOR
        __interrupt void TIMER0_A1_ISR(void)
        {
        switch(__even_in_range(TA0IV,14))
        {
        case 0:
        break;
        case 2:
        TA0CCR1 +=4096; //1s Add Offset to CCR1
        SecondReach=1;
        CountToMunite++;
        SecondTimecount++;
        if(waringstatus>0)
        {
        //buzzer();
        // waringlight();
        }
        break; // CCR4 not used
        case 4:
        TA0CCR2+= 1024; // 1/2s Add Offset to CCR2
        // buzzer();
        // waringlight();
        break;
        case 6:
        spark++;
        TA0CCR3+=8192; // 2s Add Offset to CCR3
        // buzzer();
        // waringlight();
        break;
        case 8:
        break; // CCR3 not used
        case 10:
        break; // CCR5 not used
        case 12:
        break; // Reserved not used
        case 14: // overflow
        break;
        default:
        break;
        }
        }

        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 三穗县| 城固县| 万载县| 法库县| 建水县| 敦化市| 新竹县| 得荣县| 丘北县| 乌海市| 自治县| 高邑县| 清流县| 民权县| 广饶县| 准格尔旗| 当阳市| 江安县| 德钦县| 广水市| 洪湖市| 巴东县| 乐清市| 和林格尔县| 白玉县| 泰顺县| 读书| 崇阳县| 清徐县| 铜川市| 蒙阴县| 卓资县| 永川市| 瑞金市| 镶黄旗| 新野县| 金川县| 巴中市| 大关县| 措美县| 乃东县|