新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > msp430 學習經驗總結

        msp430 學習經驗總結

        作者: 時間:2016-11-25 來源:網絡 收藏


        三、定時器ATACCRx比較模式(用于輸出和產生定時中斷)
        1、設置:CAP=0選擇比較
        2、輸出信號:比較模式用于選擇PWM輸出信號或在特定的時間間隔中斷。當TAR計數
        TACCRx的值時:
        a、中斷標志CCIFG=1;
        b、內部信號EQUx=1;
        c、EQUx根據輸出模式來影響輸出信號
        d、輸入信號CCI鎖存到SCCI
        每個捕獲比較模塊包含一個輸出單元。輸出單元用于產生如PWM這樣的信號。每個輸出單元可以根據
        EQU0EQUx產生8種模式的信號。

        3、中斷
        TimerA2個中斷向量:
        a、TACCR0CCIFGTACCR0中斷向量
        b、所有其他CCIFGTAIFGTAIV中斷向量
        在捕獲模式下,當一個定時器的值捕獲到相應的TACCRx寄存器時,CCIFG標志置位。
        在比較模式下,如果TAR計數到相應的TACCRx值時,CCIFG標志置位。軟件可以清除或置
        位任何一個CCIFG標志。當響應的CCIEGIE置位時,CCIFG標志就會產生一個中斷。
        c、TACCR0CCIFG標志擁有定時器A的最高中斷優先級,并有一個專用的中斷向量,
        當進入TACCR0中斷后,TACCR0CCIFG標志自動復位。
        d、TACCR1CCIFG,TACCR2CCIFG,TAIFG標志共用一個中斷向量。中斷向量寄存器TAIV
        用于確定它們中的哪個要求響應中斷。最高優先級的中斷在TAIV寄存器中產生一個數字(見
        寄存器說明),這個數字是規定的數字,可以在程序中識別并自動進入相應的子程序。禁止定時
        A中斷不會影響TAIV的值。
        TAIV的讀寫會自動復位最高優先級的掛起中斷標志。如果另一個中斷標志置位,在結
        束原先的中斷響應后會,該中斷響應立即發生。例如,當中斷服務子程序訪問TAIV時,如果
        TACCR1TACCR2CCIFG標志位置位,TACCR1CCIFG自動復位。在中斷服務子程序的RETI
        命令執行后,TACCR2CCIFG標志會產生另一個中斷。

        四、TimerA的捕獲模式
        1、設置:CAP=1選擇捕獲,CCISx位設置捕獲的信號源,CMx位選擇捕獲的沿,上升,下降,或上升下降都
        捕獲。
        2、如果一個第二次捕獲在第一次捕獲的值被讀取之前發生,捕獲比較寄存器就會產生一個溢出邏輯,COV
        位在此時置位,如圖8-11,COV位必須軟件清除。

        五、寄存器
        1、TACTL:TimerA控制寄存器
        學習經驗總結" />
        TASSELx:TA時鐘源選擇
        0:TACLK;1:ACLK;2:SMCLK;3:INCLK
        IDx:輸入分頻,分時鐘源分頻再輸入TimerA
        0/1/2/3:1/2/4/8分頻
        MCx:模式控制
        0:停止定時器;1:增模式,定時器計數到TACCR0;
        2:連續模式,定時器計數到0xFFFF;3:增減模式,0->TACCR0->0
        TACLR:定時器清零位。該位置位會復位TAR,時鐘分頻和計數方向。TACLR位會自動復位并讀出值為0
        TAIE:TA中斷允許。該位允許TAIFG中斷請求
        0:中斷禁止;1:中斷允許
        TAIFG:TA中斷標記
        0:無中斷掛起;1:中斷掛起

        2、TAR:TimerA計數寄存器
        學習經驗總結" />

        3、TACCTLx:捕獲比較控制寄存器
        學習經驗總結" />
        CMx:捕獲模式
        0:不捕獲;1:上升沿捕獲;2:下降沿捕獲;3:上升和下降沿都捕獲
        CCISx:捕獲比較選擇,該位選擇TACCRx的輸入信號
        0:CCIxA;1:CCIxB;2:GND;3:VCC
        SCS:同步捕獲源,該位用于將捕獲通信和時鐘同步
        0:異步捕獲;1:同步捕獲
        SCCI:同步的捕獲/比較輸入,所選擇的CCI輸入信號由EQUx信號鎖存,并可通過該位讀取
        CAP:捕獲模式
        0:比較模式;1:捕獲模式
        OUTMODx:輸出模式位。由于在模式2,3,67EQUx=EQU0,因此這些模式對TACCR0無效
        0:OUT位的值;1:置位;2:翻轉/復位;3:置位/復位
        4:翻轉;5:復位;6:翻轉/置位;7:復位/置位
        CCIE:捕獲比較中斷允許位,該位允許相應的CCIFG標志中斷請求
        0:中斷禁止;1:中斷允許
        CCI:捕獲比較輸入。所選擇的輸入信號可以通過該位讀取
        OUT:對于輸出模式0,該位直接控制輸出狀態
        0:輸出低電平;1:輸出高電平
        COV:捕獲溢出位。該位表示一個捕獲溢出發生。COV必須由軟件復位。
        0:沒有捕獲溢出發生;1:有捕獲溢出發生
        CCIFG:捕獲比較中斷標志位
        0:沒有中斷掛起;1:有中斷掛起

        4、TAIV:TimerA中斷向量寄存器
        學習經驗總結" />
        寄存器的值:
        0:無中斷掛起;
        2:捕獲比較1TACCR1CCIFG;
        4:捕獲比較2TACCR2CCIFG;
        0xA:定時器溢出TAIFG

        5.MSP430中斷嵌套機制


        (1)430默認的是關閉中斷嵌套的,除非你在一個中斷程序中再次開總中斷EINT。

        (2)當進入中斷程序時,只要不在中斷中再次開中斷,剛總中斷是關閉的,此時來中斷不管是比當前中斷的優先級高還是低都不執行。

        (3)若在中斷A中開了總中斷,剛可以響應后來的中斷B(不管B的優先級比A高還是低),B執行完現繼續執行。注意:進入中斷B生總中斷同樣也會關閉,如果B中斷程序執行時需響應中斷C,則此時也要開總中斷,若不需響應中斷,則不用開中斷,B執行完后中跳出中斷程序進入A程序時,總中斷會自動打開。

        (4)若在中斷中開了總中斷,后來的中斷同時有多個,則會按優先級來執行,即中斷優先級只有在多個中斷同時到來才起做用!中斷服務不執行搶先原則。

        (5)對于單源中斷,只要響應中斷,系統硬件自動清中斷標志位,對于TA/TB定時器的比較/捕獲中斷,只要訪問TAIV/TBIV,標志位倍被自動清除;對于多源中斷要手動清標志位,比如P1/P2口中斷,要手工清除相應的標志,如果在這種中斷用“EINT();”開中斷,而在打開中斷前沒有清標志,就會有相同的中斷不斷嵌入,而導致堆棧溢出引起復位,所以在這類中斷必須先清標志現打開中斷開關。

        6.關于MSP430中斷機制--我的理解

        因DC的邀請寫一個有關中斷的東東,我也接觸430不久只能以自己的心得體會更大家分享,若有紕漏懇請見諒。MSP430用戶手冊上有的中斷介紹我就不贅述了,大家可以看UserGuider.我講的主要是書上沒有的,或者是點的不透的。希望對大家有用。

        1.中斷嵌套,優先級
        430總中斷的控制位是狀態寄存器內的GIE位(該位在SR寄存器內),該位在復位狀態下,所有的可屏蔽中斷都不會發生響應。可屏蔽中斷又分為單中斷源和多中斷源的。單中斷源的一般響應了中斷服務程序中斷標志位就自動清零,而多中斷源的則要求查詢某個寄存器后中斷標志位才會清零。由于大多數人接觸的第一款單片機通常是51,51單片機CPU在響應低優先級的中斷程序過程中若有更高優先級的中斷發生,單片機就會去執行高優先級,這個過程已經產生了中斷嵌套。而430單片機則不同,如果在響應低優先級中斷服務程序的時候,即使來了更高優先級的中斷服務請求,430也會置之不理,直至低優先級中斷服務程序執行完畢,才會去響應高優先級中斷。這是因為430在響應中斷程序的時候,總中斷GIE是復位狀態的,如果要產生類似51的中斷嵌套,只能在中斷函數內再次置位GIE位。

        2.定時器TA
        TimerA有2個中斷向量。TIMERA0,TIMERA1
        TIMERA0只針對CCR0的計數溢出
        TIMERA1再查詢TAIV后可知道是CCR1,還是CCR2,亦或TAIFG引起的,至于TAIFG是什么情況下置位的,則要看TA工作的模式
        具體看用戶手冊。還有一點TA本身有PWM輸出功能,無須借用中斷功能。在這個問題上經常出現應用彎路的是如何結合TA和AD實行定時采樣的問題,很多人都是在TA中斷里打開AD這樣來做。這是不適宜的,因為430的ADC10,ADC12(SD16不熟悉,沒發言權)模塊均有脈沖采樣模式和擴展采樣模式。只要選擇AD是由TA觸發采樣,然后把TA設置成PWM輸出模式,當然輸出PWM波的都是特殊功能腳,但是在這里它是不需要輸出的,所以引腳設置不必理會。值得關心的就是PWM的頻率,也就是你AD的采樣率。

        3.看門狗復位
        看門狗有2種工作模式:定時器,看門狗
        定時器工作模式下WDTIFG在響應中斷服務程序有標志位自動復位,而在看門狗模式下,該標志位只能軟件清零。但是怎么判斷復位是由于WDT工作在看門狗模式下的定時溢出引起的,還是看門狗寫密鑰錯誤引起的呢?………………………………
        答案是沒有方法,至少我沒見過有什么方法,也沒見過周邊的人有什么方法。若有人知道方法謝謝分享。
        4.經常有人會問這個語句的MOV.B#LPM0,0(SP)的作用。假如你在進入中斷函數之前,430是在LPM0下待機,若要求執行完中斷函數之后進入LPM3待機,在中斷函數里寫MOV.B#LPM3,SR是無效的。因為在進入中斷時430會把PC,SR壓棧,(SR內保存著低功耗模式的設置)即使你寫了MOV.B#LPM3,SR,在退出中斷出棧時SR會被重新設置成低功耗0,要達到這樣的目的,只能更改堆棧內SR的設置:MOV.B#LPM0,0(SP)。

        5中斷向量:
        430的中斷向量是FFE0H—FFFFH,一共32個字節也就是FLASH的最后一段,430的FLASH有大有小,但是最后地址肯定是FFFFH(大FLASH超過64K的除外)所以它們的起始地址是不一樣的,而一般IAR默認編譯都是把程序放在FLASH開始的位置(不包括信息段)。
        有個值得弄清楚的問題是:什么是中斷向量?中斷向量實際就是保存中斷函數入口地址的存儲單元空間。就像FFFEH+FFFFH這2個字節是復位中斷向量,那么它存儲的就是主函數在FLASH內的起始地址,假如主函數保存在以0x1100為起始地址的FLASH塊內,那么你會發現FFFFH內保存的是0x11,FFFE內保存的是0x00.其他什么TimerA,ADC12,所有的都一樣。只是你每次寫的程序長短不一,中斷函數放的位置不一樣。IAR編譯器都會給你定好,然后在你用JTAG燒寫程序的時候,把這個地址,燒寫到相應的中斷向量。因為中斷函數所處地址可以由用戶自定義,也可以讓IAR自動編譯,所以這個地址除了源代碼開發人員知道,其他人是不知道的,BSL就是應用這32個字節的中斷向量內的內容的特殊性設置的密碼。但是有幾個東西在430是不變的,就是觸發中斷的條件滿足后,它到哪個地方去尋址中斷服務函數的入口地址,是TI在做430時就固化好,定死的。比方說上電復位的時候,它知道去FFFE,FFFF單元找地址,而不去FFE0,FFE2找地址,這個映射關系是430固化不變的。可有的時候你就是需要改變“中斷向量”,這怎么辦?430FLASH程序自升級里有時就會碰到這個問題,方法是在430原來默認的中斷向量表內做一個跳轉操作,同樣以上電復位為例:
        ORG0x2345
        PowerReset:mov.w&0xFCFE,PC
        …………………………
        …………………………
        ORG0xFFFE
        DWPowerReset
        這樣的話0xFCFE就相當是0xFFFE的映射了。這個在430程序自升級的TI應用報告里就有。


        上一頁 1 2 下一頁

        關鍵詞: msp430學習經

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 财经| 大英县| 阳朔县| 安阳县| 彝良县| 郑州市| 黄大仙区| 平陆县| 杨浦区| 黔江区| 宁晋县| 上杭县| 庆云县| 佛山市| 临安市| 雅安市| 佛冈县| 太湖县| 历史| 宜良县| 兰溪市| 明水县| 边坝县| 邵武市| 和政县| 海安县| 长顺县| 尚义县| 高安市| 南郑县| 徐汇区| 邹城市| 凤翔县| 丰台区| 阜阳市| 象山县| 兴城市| 肇州县| 嵊泗县| 溧水县| 民和|