<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > msp430 學(xué)習(xí)經(jīng)驗(yàn)總結(jié)

          msp430 學(xué)習(xí)經(jīng)驗(yàn)總結(jié)

          作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏


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

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

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

          五、寄存器
          1、TACTL:TimerA控制寄存器
          學(xué)習(xí)經(jīng)驗(yàn)總結(jié)" />
          TASSELx:TA時(shí)鐘源選擇
          0:TACLK;1:ACLK;2:SMCLK;3:INCLK
          IDx:輸入分頻,分時(shí)鐘源分頻再輸入TimerA
          0/1/2/3:1/2/4/8分頻
          MCx:模式控制
          0:停止定時(shí)器;1:增模式,定時(shí)器計(jì)數(shù)到TACCR0;
          2:連續(xù)模式,定時(shí)器計(jì)數(shù)到0xFFFF;3:增減模式,0->TACCR0->0
          TACLR:定時(shí)器清零位。該位置位會(huì)復(fù)位TAR,時(shí)鐘分頻和計(jì)數(shù)方向。TACLR位會(huì)自動(dòng)復(fù)位并讀出值為0
          TAIE:TA中斷允許。該位允許TAIFG中斷請(qǐng)求
          0:中斷禁止;1:中斷允許
          TAIFG:TA中斷標(biāo)記
          0:無(wú)中斷掛起;1:中斷掛起

          2、TAR:TimerA計(jì)數(shù)寄存器
          學(xué)習(xí)經(jīng)驗(yàn)總結(jié)" />

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

          4、TAIV:TimerA中斷向量寄存器
          學(xué)習(xí)經(jīng)驗(yàn)總結(jié)" />
          寄存器的值:
          0:無(wú)中斷掛起;
          2:捕獲比較1TACCR1CCIFG;
          4:捕獲比較2TACCR2CCIFG;
          0xA:定時(shí)器溢出TAIFG

          5.MSP430中斷嵌套機(jī)制


          (1)430默認(rèn)的是關(guān)閉中斷嵌套的,除非你在一個(gè)中斷程序中再次開(kāi)總中斷EINT。

          (2)當(dāng)進(jìn)入中斷程序時(shí),只要不在中斷中再次開(kāi)中斷,剛總中斷是關(guān)閉的,此時(shí)來(lái)中斷不管是比當(dāng)前中斷的優(yōu)先級(jí)高還是低都不執(zhí)行。

          (3)若在中斷A中開(kāi)了總中斷,剛可以響應(yīng)后來(lái)的中斷B(不管B的優(yōu)先級(jí)比A高還是低),B執(zhí)行完現(xiàn)繼續(xù)執(zhí)行。注意:進(jìn)入中斷B生總中斷同樣也會(huì)關(guān)閉,如果B中斷程序執(zhí)行時(shí)需響應(yīng)中斷C,則此時(shí)也要開(kāi)總中斷,若不需響應(yīng)中斷,則不用開(kāi)中斷,B執(zhí)行完后中跳出中斷程序進(jìn)入A程序時(shí),總中斷會(huì)自動(dòng)打開(kāi)。

          (4)若在中斷中開(kāi)了總中斷,后來(lái)的中斷同時(shí)有多個(gè),則會(huì)按優(yōu)先級(jí)來(lái)執(zhí)行,即中斷優(yōu)先級(jí)只有在多個(gè)中斷同時(shí)到來(lái)才起做用!中斷服務(wù)不執(zhí)行搶先原則。

          (5)對(duì)于單源中斷,只要響應(yīng)中斷,系統(tǒng)硬件自動(dòng)清中斷標(biāo)志位,對(duì)于TA/TB定時(shí)器的比較/捕獲中斷,只要訪問(wèn)TAIV/TBIV,標(biāo)志位倍被自動(dòng)清除;對(duì)于多源中斷要手動(dòng)清標(biāo)志位,比如P1/P2口中斷,要手工清除相應(yīng)的標(biāo)志,如果在這種中斷用“EINT();”開(kāi)中斷,而在打開(kāi)中斷前沒(méi)有清標(biāo)志,就會(huì)有相同的中斷不斷嵌入,而導(dǎo)致堆棧溢出引起復(fù)位,所以在這類(lèi)中斷必須先清標(biāo)志現(xiàn)打開(kāi)中斷開(kāi)關(guān)。

          6.關(guān)于MSP430中斷機(jī)制--我的理解

          因DC的邀請(qǐng)寫(xiě)一個(gè)有關(guān)中斷的東東,我也接觸430不久只能以自己的心得體會(huì)更大家分享,若有紕漏懇請(qǐng)見(jiàn)諒。MSP430用戶(hù)手冊(cè)上有的中斷介紹我就不贅述了,大家可以看UserGuider.我講的主要是書(shū)上沒(méi)有的,或者是點(diǎn)的不透的。希望對(duì)大家有用。

          1.中斷嵌套,優(yōu)先級(jí)
          430總中斷的控制位是狀態(tài)寄存器內(nèi)的GIE位(該位在SR寄存器內(nèi)),該位在復(fù)位狀態(tài)下,所有的可屏蔽中斷都不會(huì)發(fā)生響應(yīng)??善帘沃袛嘤址譃閱沃袛嘣春投嘀袛嘣吹?。單中斷源的一般響應(yīng)了中斷服務(wù)程序中斷標(biāo)志位就自動(dòng)清零,而多中斷源的則要求查詢(xún)某個(gè)寄存器后中斷標(biāo)志位才會(huì)清零。由于大多數(shù)人接觸的第一款單片機(jī)通常是51,51單片機(jī)CPU在響應(yīng)低優(yōu)先級(jí)的中斷程序過(guò)程中若有更高優(yōu)先級(jí)的中斷發(fā)生,單片機(jī)就會(huì)去執(zhí)行高優(yōu)先級(jí),這個(gè)過(guò)程已經(jīng)產(chǎn)生了中斷嵌套。而430單片機(jī)則不同,如果在響應(yīng)低優(yōu)先級(jí)中斷服務(wù)程序的時(shí)候,即使來(lái)了更高優(yōu)先級(jí)的中斷服務(wù)請(qǐng)求,430也會(huì)置之不理,直至低優(yōu)先級(jí)中斷服務(wù)程序執(zhí)行完畢,才會(huì)去響應(yīng)高優(yōu)先級(jí)中斷。這是因?yàn)?30在響應(yīng)中斷程序的時(shí)候,總中斷GIE是復(fù)位狀態(tài)的,如果要產(chǎn)生類(lèi)似51的中斷嵌套,只能在中斷函數(shù)內(nèi)再次置位GIE位。

          2.定時(shí)器TA
          TimerA有2個(gè)中斷向量。TIMERA0,TIMERA1
          TIMERA0只針對(duì)CCR0的計(jì)數(shù)溢出
          TIMERA1再查詢(xún)TAIV后可知道是CCR1,還是CCR2,亦或TAIFG引起的,至于TAIFG是什么情況下置位的,則要看TA工作的模式
          具體看用戶(hù)手冊(cè)。還有一點(diǎn)TA本身有PWM輸出功能,無(wú)須借用中斷功能。在這個(gè)問(wèn)題上經(jīng)常出現(xiàn)應(yīng)用彎路的是如何結(jié)合TA和AD實(shí)行定時(shí)采樣的問(wèn)題,很多人都是在TA中斷里打開(kāi)AD這樣來(lái)做。這是不適宜的,因?yàn)?30的ADC10,ADC12(SD16不熟悉,沒(méi)發(fā)言權(quán))模塊均有脈沖采樣模式和擴(kuò)展采樣模式。只要選擇AD是由TA觸發(fā)采樣,然后把TA設(shè)置成PWM輸出模式,當(dāng)然輸出PWM波的都是特殊功能腳,但是在這里它是不需要輸出的,所以引腳設(shè)置不必理會(huì)。值得關(guān)心的就是PWM的頻率,也就是你AD的采樣率。

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

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


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();