當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]   本文主要介紹TIMSP430微控制器軟件編程設(shè)計(jì)中的實(shí)踐經(jīng)驗(yàn)和應(yīng)用技巧?! 〉谝徊糠种v述基于中斷的標(biāo)準(zhǔn)程序流程模式,適用于大多數(shù)的產(chǎn)品應(yīng)用編程;另外一部分講述MSP430微控制器編程人員在開發(fā)產(chǎn)品時(shí)

  本文主要介紹TIMSP430微控制器軟件編程設(shè)計(jì)中的實(shí)踐經(jīng)驗(yàn)和應(yīng)用技巧。

  第一部分講述基于中斷的標(biāo)準(zhǔn)程序流程模式,適用于大多數(shù)的產(chǎn)品應(yīng)用編程;另外一部分講述MSP430微控制器編程人員在開發(fā)產(chǎn)品時(shí)需要注意的一些關(guān)鍵問題、重要方法與注意事項(xiàng),如:程序初始化流程,晶振初始化時(shí)的注意事項(xiàng)等,利用這些方法可以極大程度地減少產(chǎn)品的開發(fā)周期和提高產(chǎn)品的穩(wěn)定性。

  1.MSP430微控制器標(biāo)準(zhǔn)軟件設(shè)計(jì)流程MSP430微控制器軟件設(shè)計(jì)的標(biāo)準(zhǔn)流程均可參考圖1。該標(biāo)準(zhǔn)的軟件流程可將系統(tǒng)整體功耗降至最低。


圖1

  圖1所描述的軟件流程代碼是基于中斷程序的,平時(shí)MCU處于睡眠狀態(tài),直到有中斷產(chǎn)生時(shí)MCU被喚醒,最大程度降低系統(tǒng)功耗,優(yōu)化電源效率。

  理解圖1所示的中斷服務(wù)子程序(1SRs)流程,能更好的掌握MSP430微控制器處理低功耗的模式。MSP430微控制器的低功耗模式由狀態(tài)寄存器SR的控制位控制,在執(zhí)行中斷服務(wù)子程序之前,狀態(tài)寄存器SR的低功耗模式控制位可以被優(yōu)先壓棧。當(dāng)中斷服務(wù)子程序返回時(shí),主程序調(diào)用中斷之前的低功耗模式控制位,從而進(jìn)入中斷之前的低功耗模式狀態(tài)。當(dāng)然,如果我們?cè)贗SR中斷服務(wù)子程序返回前修改了保存在SR中的低功耗模式控制位,那么ISR中斷子程序執(zhí)行完之后,主程序流程可以轉(zhuǎn)到另一個(gè)不同的低功耗工作模式。

  中斷喚醒機(jī)制作為MSP430微控制器內(nèi)部低功耗模式的一部分,允許系統(tǒng)快速喚醒,響應(yīng)中斷事件。例如,當(dāng)一中斷事件發(fā)生之前MSP430微控制器處于低功耗LPM0模式,MCU在執(zhí)行中斷服務(wù)子程序之前首先向堆棧保存SR中的低功耗模式控制位值然后清除SR值,清除SR值使MCU從LPMO模式進(jìn)入到執(zhí)行中斷活動(dòng)模式狀態(tài)。在ISR中斷服務(wù)子程序中,軟件設(shè)計(jì)者可以寫一條語(yǔ)句清除SR中的低功耗模式控制位,當(dāng)中斷程序完成后,MCU從堆棧中重新裝載調(diào)用各自寄存器的狀態(tài)值。如果沒有修改SR的低功耗模式控制位,退出中斷后系統(tǒng)仍然返回進(jìn)入LPM0低功耗模式,若此時(shí)已修改SR控制位,當(dāng)從ISR中斷程序退出后,系統(tǒng)會(huì)工作于活動(dòng)模式時(shí),并且按進(jìn)入中斷之前的PC指針?biāo)傅牡刂防^續(xù)執(zhí)行程序。

  由于可以在fSR中斷服務(wù)子程序中改變低功耗模式,所以設(shè)計(jì)者可以選擇在ISR程序中執(zhí)行全部任務(wù),也可以選擇在ISR喚醒MCU后在主程序中處理任務(wù)。

  在ISR程序中處理時(shí)確保能立即響應(yīng)中斷事件,中斷事件發(fā)生時(shí)即能立刻處理中斷任務(wù),但是,在處理一個(gè)中斷事件時(shí),其它中斷將不能被載入,直到該中斷任務(wù)完成,而這樣長(zhǎng)時(shí)間的中斷將會(huì)降低系統(tǒng)的響應(yīng)靈敏,所以設(shè)計(jì)者須根據(jù)不同系統(tǒng)要求選擇最佳處理方式。

  圖1所示的流程圖中主程序需處理兩個(gè)中斷事件,這兩個(gè)中斷事件所要處理的任務(wù)是在主循環(huán)中處理的。ISRs執(zhí)行兩個(gè)不同的事件任務(wù)。第一個(gè)中斷,ISRs改變了保存在堆棧中SR的值,可以使系統(tǒng)退出中斷后進(jìn)入活動(dòng)工作模式,中斷事件是在主程序中被執(zhí)行,中斷事件可以是一任意應(yīng)用事件,例如定時(shí)器、按鍵處理、AD轉(zhuǎn)換等。第二個(gè)中斷,在ISR中斷服務(wù)子程序設(shè)置一標(biāo)志位,在主程序檢測(cè)該標(biāo)志位來判斷是否執(zhí)行相應(yīng)的任務(wù)。如果需處理的中斷事件能在較短的時(shí)間內(nèi)迅速完成,這樣就能夠在中斷服務(wù)子程序中直接執(zhí)行,無需進(jìn)入主程序處理,此時(shí)ISR中斷服務(wù)子程序沒必要設(shè)置標(biāo)志位或改變SR低功耗控制位退出睡眠模式,退出ISR中斷服務(wù)子程序后MCU仍然返回到睡眠模式。該流程可以根據(jù)系統(tǒng)應(yīng)用的復(fù)雜性來定,例如,只有一個(gè)中斷事一件可喚醒主程序時(shí),則無需設(shè)置系統(tǒng)標(biāo)志位,此時(shí),通過中斷喚醒主程序,然后主程序進(jìn)行相應(yīng)的任務(wù)操作,最后MCU重新進(jìn)入睡眠模式。

  圖1中所提到的睡眠模式LPMn是系統(tǒng)所要用到的睡眠低功耗模式,每種應(yīng)用所涉及的模式可能會(huì)有所不同,實(shí)際的睡眠模式由整個(gè)系統(tǒng)所用到的模塊(如定時(shí)器、AD、串口等)決定,取決于系統(tǒng)模塊在相應(yīng)的睡眠模式下可否被中斷喚醒。例如由MCU的定時(shí)器負(fù)責(zé)喚醒CPU,且該定時(shí)器時(shí)鐘為ACLK時(shí),則ACLK必須保持活動(dòng)模式,則MCU可以工作在LPM3模式;但是如果定時(shí)器時(shí)鐘為DCO時(shí),則MCU必須工作在LPMO。

  2方案設(shè)計(jì)技巧2.1看門狗和晶振的配置在任何一款MSP430微控制器中,看門狗默認(rèn)開啟32ms復(fù)位,所以程序初始化第一步應(yīng)先進(jìn)行看門狗WDT的配置。如果在初始化中不快速處理WDT的話,則看門狗可能很快溢出造成芯片程序復(fù)位。為避免CPU進(jìn)入復(fù)位死循環(huán),所以看門狗需在程序最開始配置,通過設(shè)置時(shí)間、設(shè)置控制位或者關(guān)閉看門狗。

  MSP430F4xx或MSP430F2xx微控制器中,使用LFXT1低頻率晶振時(shí),代碼運(yùn)行之前需通過FLL_CTL0寄存器配置晶振相應(yīng)的負(fù)載電容,否則晶振可能會(huì)運(yùn)行不正常,該技巧在許多TI的MSP430微控制器應(yīng)用實(shí)例代碼中均可見。

  2.2使用TI的標(biāo)準(zhǔn)頭文件

  TJ為每一款MSP430微控制器均提供~標(biāo)準(zhǔn)頭文件,文件中包含相應(yīng)芯片型號(hào)中的所有寄存器和位常數(shù)定義信息,使用文件中定義的信息能極大地提高程序的可讀性,同時(shí)增加系統(tǒng)可移植性,使其它設(shè)計(jì)者能快速掌握該程序的設(shè)計(jì)。TI的每~個(gè)應(yīng)用方案和代碼實(shí)例都可以應(yīng)用這些頭文件。

  2.3運(yùn)用內(nèi)部函數(shù)處理低功耗模式和其它函數(shù)

MSP430微控制器利用C語(yǔ)言開發(fā)軟件時(shí),可以直接調(diào)用編譯器包含的幾個(gè)內(nèi)部函數(shù)。有時(shí)一些關(guān)鍵事件的處理唯一方法就是使用內(nèi)部函數(shù),利用內(nèi)部函數(shù)會(huì)很大程度地提高任務(wù)處理的效率。

  使用內(nèi)部函數(shù)最普通的例子就是進(jìn)入與退出低功耗模式,通常用C語(yǔ)言時(shí)必須對(duì)CPU寄存器中的某些位進(jìn)行操作,例如在IAR編譯環(huán)境中如果需要進(jìn)入LPM3模式,則即可直接使用內(nèi)部函數(shù):

  BISSR(LPM3_bits+GIE)。

  其它內(nèi)部函數(shù)有時(shí)也具有優(yōu)化功能,例如MSP430微控制器轉(zhuǎn)換BCD碼的內(nèi)部指令函數(shù),如果沒有這些指令組合,則需要一長(zhǎng)串C語(yǔ)言代碼完成,且編輯器不能直接將代碼轉(zhuǎn)換成MSP430微控制器識(shí)別的BCD數(shù)學(xué)指令。使用內(nèi)部函數(shù)使得利用C語(yǔ)言編程的人員最大程度地優(yōu)化了程序代碼,也降低了系統(tǒng)功耗。

  MSP430微控制器的開發(fā)環(huán)境編譯器包含一系列功能函數(shù),開發(fā)設(shè)計(jì)時(shí)需注意最新版本。

  2.4晶振失效的處理函數(shù)

  MSP430微控制器具有檢查時(shí)鐘是否失效的功能。所有的微控制器系列提供內(nèi)部DCO和高頻頻晶振的失效檢測(cè)功能,MSP430F4xx和MSP430F2xx系列具有全部時(shí)鐘失效檢測(cè)的功能,如:外部32768Hz低頻時(shí)鐘與高頻時(shí)鐘失效檢測(cè)。

  具體細(xì)節(jié)可參考用戶手冊(cè)。

  本文主要考慮兩種會(huì)出現(xiàn)晶振失效的情況以及考慮是否需要做出相應(yīng)的處理。

  (1)在每一次MCU上電時(shí)晶振穩(wěn)定的過程。在這個(gè)過程中會(huì)造成晶振的失效,特別對(duì)于低頻晶振初始化,時(shí)鐘穩(wěn)定需要一定時(shí)間,經(jīng)常是幾千毫秒。

  (2)在程序運(yùn)行過程中出現(xiàn)晶振失效,比如某種導(dǎo)體將晶振管腳短路,因此需要一些特殊的方法處理,當(dāng)晶振失效時(shí),DC0時(shí)鐘模塊將繼續(xù)支持CPU的工作。

  如果時(shí)鐘源ACLK、SMCLK或者晶振未穩(wěn)定時(shí),任何使用這些時(shí)鐘的外圍設(shè)備都將受到影響,唯一方法即是通過軟件進(jìn)行檢測(cè)與處理。當(dāng)一些對(duì)時(shí)間敏感的外圍(如定時(shí)器)以低頻晶振為時(shí)鐘源,若晶振未振蕩穩(wěn)定時(shí),將導(dǎo)致初始化失敗,同時(shí)若程序代碼未等到晶振穩(wěn)定就開始工作,則外設(shè)輸出的結(jié)果是不可預(yù)知的。

  如果由LFXT1、LT×T2提供系統(tǒng)的MCLK時(shí)鐘源,晶振失效了,則MCLK時(shí)鐘源會(huì)自動(dòng)切換到內(nèi)部DCO時(shí)鐘模塊,由內(nèi)部的DCO做為MCLK時(shí)鐘源。

  處理晶振初始化的一個(gè)簡(jiǎn)單方法就是可以不停重復(fù)清零、等待檢測(cè)默認(rèn)的晶振失效標(biāo)志位,直到晶振失效標(biāo)志不在置位,可參考用戶手冊(cè)。如MSP430F:2xx系列,LF×T1的低頻晶振并不能檢測(cè)晶振是否失敗,此時(shí)可調(diào)用一延時(shí)程序以保證有足夠的初始化穩(wěn)定時(shí)間。這種方法在一般程序正常操作過程中并不能捕獲到晶振是否失效,但可以通過設(shè)置OFIE位在NMI中斷服務(wù)子程序中處理。

  2.5逐漸增加MCLK頻率

  大多數(shù)MSP430微控制器的MCLK可以配置為8MHz,MSP430F2xx可以達(dá)到16MHz,系統(tǒng)要求VCC電壓值隨著頻率的升高相應(yīng)有所增加。程序運(yùn)行時(shí),若設(shè)定MCLK頻率所需的VCC電壓比真正提供給微控制器的電壓值高,則運(yùn)行過程中將發(fā)生不可預(yù)知的問題。

  即使MCU實(shí)際工作VCC值比工作頻率需要的實(shí)際工作電壓高出很多,但VCC上升到穩(wěn)定狀態(tài)是需要一定時(shí)間的,所以我們要在工作頻率升高之前確保芯片電壓已經(jīng)能夠支持晶振正常工作。

  如果MCU具備SVS(電壓檢測(cè)模塊)模塊,則SVS可以提醒系統(tǒng)的VCC電壓達(dá)到所需的電壓值;若MCU不具備SVS模塊,但是含有可利用的ADC模塊,則ADC模塊可以采樣VCC電壓,從而判斷在提升頻率之前芯片電壓值是否能滿足高頻工作要求。

  2.6使用初始化函數(shù)

通常在C編譯器編寫代碼時(shí),程序會(huì)自動(dòng)初始化所有定義的存儲(chǔ)器,并且將代碼值插入到main()主程序中。如果定義的存儲(chǔ)器很多(大量變量),則將導(dǎo)致看門狗的溢出問題。當(dāng)初始化許多變量時(shí),占用的時(shí)間相應(yīng)就會(huì)很長(zhǎng),以至于在執(zhí)行main()主程序第一條語(yǔ)句之前看門狗已經(jīng)溢出,那么將導(dǎo)致死循環(huán)的產(chǎn)生

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉