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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MSP430FR5969學習心得

          MSP430FR5969學習心得

          作者: 時間:2016-11-21 來源:網(wǎng)絡 收藏
          1.MSP430開發(fā)環(huán)境建立
          1.安裝IAR dor msp430 軟件,軟件帶USB仿真器的驅動。
          2.插入USB仿真器,驅動選擇安裝目錄的/drivers/TIUSBFET
          3.建立一個工程,選擇"option"選項,設置
          a、選擇器件,在"General"項的"Target"標簽選擇目標器件
          b、選擇輸出仿真,在"Linker"項里的"Output"標簽,選擇輸出"Debug information for C-SPY",以輸出調試
          信息用于仿真。
          c、若選擇"Other",Output下拉框選擇"zax-m"即可以輸出hex文件用以燒錄,注意,此時仿真不了。
          d、選擇"Debugger"項的"Setup"標簽,"Driver"下拉框選擇"FET Debugger"
          e、選擇"FET Debugger"項的"Setup"標簽,"Connection"下拉框選擇"Texas Instrument USB-I"
          4.仿真器的接口,從左到右分別為 " GND,RST,TEST,VCC"
          2.IO口
          數(shù)字輸入/輸出端口有下列特性:
          □ 每個輸入/輸出位都可以獨立編程。
          □ 允許任意組合輸入、輸出。
          □ P1 和 P2 所有 8 個位都可以分別設置為中斷。
          □ 可以獨立操作輸入和輸出數(shù)據(jù)寄存器。
          □ 可以分別設置上拉或下拉電阻。
          在介紹這四個I/O口時提到了一個“上拉電阻”那么上拉電阻又是一個什么東東呢?他起什么作用呢?都說了是電阻那當然就是一個電阻啦,當作為輸入時,上拉電阻將其電位拉高,若輸入為低電平則可提供電流源;所以如果P0口如果作為輸入時,處在高阻抗狀態(tài),只有外接一個上拉電阻才能有效。
          (以下x為1表示P1,為2表示P2,如此類推)
          1.選擇引腳功能 -- PxSEL,PxSEL2
          PxSEL2 PxSEL 管腳功能
          0 0 用作IO口
          0 1 用作第一功能引腳
          1 0 保留,參考具體型號的手冊
          1 1 用作第二功能引腳
          設置引腳用作外設功能時,芯片不會自動設置該引腳輸入輸出方向,要根據(jù)該功能,用戶自己設置方向寄存器
          PxDIR。
          2.選擇引腳輸入/輸出方向 -- PxDIR
          Bit = 0: 輸入
          Bit = 1: 輸出
          3.選擇引腳是否使能上下拉電阻 -- PxREN
          Bit = 0: 不使能
          Bit = 1: 使能
          4.輸出寄存器 -- PxOUT
          Bit = 0: 輸出低電平或者下拉
          Bit = 1: 輸出高電平或者上拉
          5.管腳狀態(tài)寄存器 -- PxIN
          Bit = 0: 管腳當前為低
          Bit = 1: 管腳當前為高
          你說的“第二功能”應該是指外圍模塊功能吧,用模塊就選“第二功能”,不用模塊就選“第一功能”。 可通過設置PxSEL寄存器進行選擇,某位寫“0”為I/O;寫“1”為“第二功能”。 用到比較器(片內外圍模塊)時要設置為第二功能。 當然你如果是用片外的比較器,將其輸出的高低電平(1或0)送給MSP430,那就選“第一功能”。
          http://zhidao.baidu.com/question/172451580.html?an=0&si=3
          3.Base clock 模塊
          一、4個時鐘振蕩源
          1、LFXT1CLK:外部晶振或時鐘1 低頻時鐘源 低頻模式:32768Hz 高頻模式:(400KHz-16MHz)
          2、XT2CLK: 外部晶振或時鐘2 高頻時鐘源(400KHz-16MHz)
          3、DCOCLK: 內部數(shù)字RC振蕩器,復位值1.1MHz
          4、VLOCLK: 內部低功耗振蕩器 12KHz
          注:MSP430x20xx: LFXT1 不支持 HF 模式, XT2 不支持, ROSC 不支持.
          二、3個系統(tǒng)時鐘
          1、ACLK:輔助時鐘
          復位:LFXT1CLK的LF模式,內部電容6pF
          分頻:1/2/4/8
          時鐘源:LFXT1CLK/VLOCLK.
          用途:獨立外設,一般用于低速外設
          2、MCLK:主時鐘
          復位:DCOCLK,1.1MHz
          分頻:1/2/4/8
          時鐘源:LFXT1CLK/VLOCLK/XT2CLK/DCOCLK
          用途:CPU,系統(tǒng)
          3、SMCLK: 子系統(tǒng)時鐘
          復位:DCOCLK,1.1MHz
          分頻:1/2/4/8
          時鐘源:LFXT1CLK/VLOCLK/XT2CLK/DCOCLK
          用途:獨立外設,一般用于高速外設
          三、寄存器
          1、DCOCTL:DCO控制寄存器(讀寫)
          DCOx:定義8種頻率之一,可分段調節(jié)DCOCLK的頻率,相鄰兩種頻率相差10%。而頻率又注入直流發(fā)生器
          的電流定義。
          MODx: 位調節(jié)器選擇。這幾位決定在 32 個 DCOCLK 周期內插入高1段頻率 fDCO+1的次數(shù)。當
          DCOX=7,已為最高段頻率,此時不能用MODx作為頻率調整。
          2、BCSCTL1:基礎時鐘系統(tǒng)控制寄存器1
          XT2OFF:是否關閉XT2
          0:打開XT2 ,1:關閉XT2
          XTS: XT2模式選擇
          0:LF mode (低頻模式) ,1:HF mode (高頻模式)
          DIVA:ACLK的分頻選擇 0-3 對應 1/2/4/8 分頻
          RSELx: 選擇DCO中16種標稱的頻率,實際對應16個內部電阻
          0-15 對應的頻率 從 低到高,當 DCOR=1 時,表示選用外接電阻,所以RSELx無效
          3、BCSCTL2:基礎時鐘系統(tǒng)控制寄存器2
          SELMx:選擇MCLK的時鐘源
          0:DCOCLK
          1:DCOCLK
          2:當 XT2 振蕩器在片內時采用 XT2CLK。當 XT2 振蕩器不在片內時采用 LFXT1CLK 或 VLOCLK
          3:LFXT1CLK 或 VLOCLK
          DIVMx: MCLK的分頻選擇 0-3 對應 1/2/4/8 分頻
          SELS: 選擇SMCLK的時鐘源
          0:DCOCLK
          1:當 XT2 振蕩器存在時選用 XT2CLK,當 XT2 振蕩器不存在時采用 LFXT1CLK 或 VLOCLK
          DIVSx: SMCLK的分頻選擇 0-3 對應 1/2/4/8 分頻
          DCOR:0:DCOCLK使用內部電阻、 1:DCOCLK使用外接電阻
          4、BCSCTL3:基礎時鐘系統(tǒng)控制寄存器3
          XT2Sx:XT2范圍選擇
          0:0.4-1MHz 晶體或振蕩器
          1:1-3MHz 晶體或振蕩器
          2:3-16MHz 晶體或振蕩器
          3:0.4-16MHz外部數(shù)字時鐘源
          LFXT1Sx: 低頻時鐘選擇和 LFXT1 范圍選擇。當 XTS=0 時在 LFXT1 和 VLO之間選擇。當 XTS=1 時選
          擇 LFXT1 的頻率范圍。
          0:LFXT1上的 32768Hz 晶體
          1:保留
          2:VLOCLK(MSP430X21X1 器件上保留)
          3:外部數(shù)字時鐘信源
          XCAPx:振蕩器電容選擇。這些位選擇當 XTS=0 時用于 LFXT1 的有效電容。
          0:1pF
          1:6pF
          2:10pF
          3:12.5pF
          XT2OF:XT2振蕩器是否失效
          0:有效,正在工作
          1:無效,未正常工作
          LFXT1OF:LFXT1振蕩器是否失效
          0:有效,正在工作
          1:無效,未正常工作
          5、IE1:中斷使能寄存器 1
          OFIE:振蕩器失效中斷使能。該位使 OFIFG 中斷使能。由于 IE1 的其它位
          用于其它模塊,因此采用 BIS.B 或 BIC.B 指令來設置或清零該位比
          用 MOV.B 或 CLR.B 更合適。
          6、IFG1:中斷標志寄存器 1
          OFIFG:振蕩器失效中斷標志。由于 IFG1 的其它位用于其它模塊,因此
          采用BIS.B或BIC.B指令來設置或清零該位比用MOV.B或
          CLR.B 更合適。
          0:沒有未被響應的中斷
          1:有未被響應的中斷
          四、DCO頻率
          4種頻率經(jīng)校準精度為±1%

          4. 定時器TA
          一、時鐘源
          1、時鐘源:ACLK/SMCLK 外部TACLK/INCLK
          2、分頻:1/2/4/8 當 (注:TACLR 置位時,分頻器復位)
          二、計數(shù)模
          通過設置MCx可以設置定時器的計數(shù)模式
          1、停止模式:停止計數(shù)
          2、單調增模式:定時器循環(huán)地從0增加到TACCR0值
          周期 :TACCR0
          CCIFG :Timer計到TACCR0值時觸發(fā)
          TAIFG :Timer計到0時觸發(fā)
          3、連續(xù)模式:定時器循環(huán)從0連續(xù)增加到0xFFFF
          周期 :0x10000
          TAIFG :Timer計到0時觸發(fā)
          4、增減模式:定時器增計數(shù)到TACCR0 再從 TACCR0 減計數(shù)到 0
          周期 :TACCR0值的2倍
          CCIFG :Timer計到TACCR0值時觸發(fā)
          TAIFG :Timer計到0時觸發(fā)
          三、定時器A TACCRx 比較模式 (用于輸出和產(chǎn)生定時中斷)
          1、設置:CAP=0選擇比較
          2、輸出信號:比較模式用于選擇 PWM 輸出信號或在特定的時間間隔中斷。當 TAR 計數(shù)
          到 TACCRx 的值時:
          a、中斷標志 CCIFG=1;
          b、內部信號 EQUx=1;
          c、EQUx 根據(jù)輸出模式來影響輸出信號
          d、輸入信號 CCI 鎖存到 SCCI
          每個捕獲比較模塊包含一個輸出單元。輸出單元用于產(chǎn)生如 PWM 這樣的信號。每個輸出單元可以根據(jù)
          EQU0 和 EQUx 產(chǎn)生 8 種模式的信號。
          3、中斷
          TimerA 有 2 個中斷向量:
          a、TACCR0 CCIFG 的 TACCR0 中斷向量
          b、所有其他 CCIFG 和 TAIFG 的 TAIV 中斷向量
          在捕獲模式下,當一個定時器的值捕獲到相應的 TACCRx 寄存器時,CCIFG 標志置位。
          在比較模式下,如果 TAR 計數(shù)到相應的 TACCRx 值時,CCIFG 標志置位。軟件可以清除或置
          位任何一個 CCIFG 標志。當響應的 CCIE 和 GIE 置位時, CCIFG 標志就會產(chǎn)生一個中斷。
          c、TACCR0 CCIFG標志擁有定時器 A 的最高中斷優(yōu)先級,并有一個專用的中斷向量,
          當進入 TACCR0 中斷后,TACCR0 CCIFG 標志自動復位。
          d、TACCR1 CCIFG, TACCR2 CCIFG,和 TAIFG 標志共用一個中斷向量。中斷向量寄存器 TAIV
          用于確定它們中的哪個要求響應中斷。最高優(yōu)先級的中斷在 TAIV 寄存器中產(chǎn)生一個數(shù)字(見
          寄存器說明),這個數(shù)字是規(guī)定的數(shù)字,可以在程序中識別并自動進入相應的子程序。禁止定時
          器 A 中斷不會影響 TAIV 的值。
          對 TAIV 的讀寫會自動復位最高優(yōu)先級的掛起中斷標志。如果另一個中斷標志置位,在結
          束原先的中斷響應后會,該中斷響應立即發(fā)生。例如,當中斷服務子程序訪問 TAIV 時,如果
          TACCR1 和 TACCR2 CCIFG 標志位置位,TACCR1 CCIFG 自動復位。在中斷服務子程序的 RETI
          命令執(zhí)行后,TACCR2 CCIFG 標志會產(chǎn)生另一個中斷。
          四、TimerA的捕獲模式
          1、設置:CAP=1選擇捕獲, CCISx位設置捕獲的信號源,CMx位選擇捕獲的沿,上升,下降,或上升下降都
          捕獲。
          2、如果一個第二次捕獲在第一次捕獲的值被讀取之前發(fā)生,捕獲比較寄存器就會產(chǎn)生一個溢出邏輯,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:增模式,定時器計數(shù)到TACCR0;
          2:連續(xù)模式,定時器計數(shù)到0xFFFF;3:增減模式,0->TACCR0->0
          TACLR:定時器清零位。該位置位會復位 TAR,時鐘分頻和計數(shù)方向。TACLR位會自動復位并讀出值為0
          TAIE: TA 中斷允許。該位允許 TAIFG 中斷請求
          0:中斷禁止;1:中斷允許
          TAIFG:TA中斷標記
          0:無中斷掛起;1:中斷掛起
          2、TAR:TimerA計數(shù)寄存器
          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,6 和 7 下 EQUx= EQU0,因此這些模式對 TACCR0 無效
          0:OUT位的值;1:置位;2:翻轉/復位;3:置位/復位
          4:翻轉;5:復位;6:翻轉/置位;7:復位/置位
          CCIE:捕獲比較中斷允許位,該位允許相應的 CCIFG 標志中斷請求
          0:中斷禁止;1:中斷允許
          CCI:捕獲比較輸入。所選擇的輸入信號可以通過該位讀取
          OUT:對于輸出模式 0,該位直接控制輸出狀態(tài)
          0:輸出低電平;1:輸出高電平
          COV:捕獲溢出位。該位表示一個捕獲溢出發(fā)生。COV 必須由軟件復位。
          0:沒有捕獲溢出發(fā)生;1:有捕獲溢出發(fā)生
          CCIFG:捕獲比較中斷標志位
          0:沒有中斷掛起;1:有中斷掛起
          4、TAIV:TimerA中斷向量寄存器
          寄存器的值:
          0:無中斷掛起;
          2:捕獲比較1 TACCR1 CCIFG;
          4:捕獲比較2 TACCR2 CCIFG;
          0xA:定時器溢出 TAIFG
          5.MSP430中斷嵌套機制
          (1)430默認的是關閉中斷嵌套的,除非你在一個中斷程序中再次開總中斷EINT。

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

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

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

          (5)對于單源中斷,只要響應中斷,系統(tǒng)硬件自動清中斷標志位,對于TA/TB定時器的比較/捕獲中斷,只要訪問TAIV/TBIV,標志位倍被自動清除;對于多源中斷要手動清標志位,比如P1/P2口中斷,要手工清除相應的標志,如果在這種中斷用“EINT();”開中斷,而在打開中斷前沒有清標志,就會有相同的中斷不斷嵌入,而導致堆棧溢出引起復位,所以在這類中斷必須先清標志現(xiàn)打開中斷開關。
          6.關于MSP430中斷機制--我的理解
          因DC的邀請寫一個有關中斷的東東,我也接觸430不久只能以自己的心得體會更大家分享,若有紕漏懇請見諒。MSP430用戶手冊上有的中斷介紹我就不贅述了,大家可以看User Guider.我講的主要是書上沒有的,或者是點的不透的。希望對大家有用。

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

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

          3.看門狗復位
          看門狗有2種工作模式:定時器 ,看門狗
          定時器工作模式下WDTIFG在響應中斷服務程序有標志位自動復位,而在看門狗模式下,該標志位只能軟件清零。但是怎么判斷復位是由于WDT工作在看門狗模式下的定時溢出引起的,還是看門狗寫密鑰錯誤引起的呢?………………………………
          答案是沒有方法,至少我沒見過有什么方法,也沒見過周邊的人有什么方法。若有人知道方法謝謝分享。
          4.經(jīng)常有人會問這個語句的MOV.B#LPM0,0(SP)的作用。假如你在進入中斷函數(shù)之前,430是在LPM0下待機,若要求執(zhí)行完中斷函數(shù)之后進入LPM3待機,在中斷函數(shù)里寫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個字節(jié)也就是FLASH的最后一段,430的FLASH有大有小,但是最后地址肯定是FFFFH(大FLASH超過64K的除外)所以它們的起始地址是不一樣的,而一般IAR默認編譯都是把程序放在FLASH開始的位置(不包括信息段)。
          有個值得弄清楚的問題是:什么是中斷向量?中斷向量實際就是保存中斷函數(shù)入口地址的存儲單元空間。就像FFFEH+FFFFH這2個字節(jié)是復位中斷向量,那么它存儲的就是主函數(shù)在FLASH內的起始地址,假如主函數(shù)保存在以0x1100為起始地址的FLASH塊內,那么你會發(fā)現(xiàn)FFFFH 內保存的是0x11, FFFE內保存的是0x00.其他什么TimerA,ADC12,所有的都一樣。只是你每次寫的程序長短不一,中斷函數(shù)放的位置不一樣。IAR編譯器都會給你定好,然后在你用JTAG燒寫程序的時候,把這個地址,燒寫到相應的中斷向量。因為中斷函數(shù)所處地址可以由用戶自定義,也可以讓IAR自動編譯,所以這個地址除了源代碼開發(fā)人員知道,其他人是不知道的,BSL就是應用這32個字節(jié)的中斷向量內的內容的特殊性設置的密碼。但是有幾個東西在430是不變的,就是觸發(fā)中斷的條件滿足后,它到哪個地方去尋址中斷服務函數(shù)的入口地址,是TI 在做430時就固化好,定死的。比方說上電復位的時候,它知道去FFFE,FFFF單元找地址,而不去FFE0,FFE2找地址,這個映射關系是430固化不變的。可有的時候你就是需要改變“中斷向量”,這怎么辦?430FLASH程序自升級里有時就會碰到這個問題,方法是在430原來默認的中斷向量表內做一個跳轉操作,同樣以上電復位為例:
          ORG0x2345
          PowerReset: mov.w&0xFCFE,PC
          …………………………


          關鍵詞: MSP430FR5969學習心

          評論


          技術專區(qū)

          關閉
          看屁屁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); })();