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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 你不得不知的Cortex-M3和M4微控制器使用秘訣

          你不得不知的Cortex-M3和M4微控制器使用秘訣

          作者: 時間:2014-08-21 來源:網(wǎng)絡 收藏

            多項秘訣造就巧妙解決方案

          本文引用地址:http://www.ex-cimer.com/article/262053.htm

            嵌入式設計的成敗經(jīng)常取決于如何在系統(tǒng)性能、能耗和解決方案成本之間找到適當?shù)钠胶?。許多情況下,開發(fā)人員可以采用Cortex-M處理器上的獨特特性來優(yōu)化產(chǎn)品成本或能源需求,同時維持、甚至提升它的性能。例如,Cortex-M內(nèi)核天生的串行I/O能力能夠用于節(jié)省能源、簡化開發(fā)、釋放外設以用于其它應用任務。

            除了傳統(tǒng)的串行調(diào)試(Serial Wire Debug)功能之外,基于 Cortex-M的還可以通過它的單引腳串行監(jiān)視器輸出(Serial Wire Viewer Output,SWO)3提供指令跟蹤接口,如圖2所示。這個接口可以直接把“printf格式的”調(diào)試信息傳遞給應用代碼。SWO允許調(diào)試信息直接在任何標準的IDE中瀏覽。此外,這些信息也可以用獨立的SWO監(jiān)視器(例如,Segger的J-Link SWO Viewer軟件4,或是Silicon Labs的energyAware Commander 4)進行瀏覽。由于SWO輸出內(nèi)建于內(nèi)核硬件本身,因此它是Cortex-M內(nèi)核與生俱來的優(yōu)點。SWO不占用的任何UART接口,這些接口它們可能早已被分配給了應用。

            

           

            圖2:專用 Cortex SWO接口節(jié)省I/O引腳并加速調(diào)試。

            基于SWO的調(diào)試還有一個重要的優(yōu)勢在于,它讓微控制器在進入最低的休眠模式時,保持調(diào)試連接有效,而在大多數(shù)情況下,傳統(tǒng)的調(diào)試連接這時是不能正常工作的。SWO的指令追蹤還可以用于跟蹤程序計數(shù)器,以幫忙IDE統(tǒng)計出程序各項功能所占用的時間。這些統(tǒng)計數(shù)字能夠與電流測量結(jié)合起來,幫助開發(fā)人員對設計功耗進行微調(diào)。

            基于Cortex-M的微控制器供應商正在開始重新認識這項優(yōu)點,而且有些廠商已經(jīng)為了這個目的而把功耗模式和電流測量硬件納入到本身的開發(fā)平臺。例如,Silicon Labs的EFM32 Gecko 入門級和開發(fā)級工具包都包含功耗測量輸出,并可搭配energyAware Profiler工具6中的程序代碼追蹤功能。圖3顯示了如何讓設計人員精確定位到哪個程序功能塊最耗費能源,并且能夠快速調(diào)試其它與能源有關(guān)的問題。

            

           

            圖3:軟硬件工具精確定位耗能最大的功能,無需示波器和萬用表,快速排除問題。

            智能休眠節(jié)省每一微瓦

             Cortex-M處理器的Sleep-on-Exit(中斷完成時直接進入休眠)是另一項“一箭雙雕”的功能,可同時節(jié)省CPU周期和能耗。這點在由中斷所驅(qū)動的應用中格外有用,因為處理器的大部分時間不是在執(zhí)行中斷處理,就是在中斷事件之間休眠。在進入中斷服務例程(ISR)時,MCU必須花費好幾個指令周期把當前線程狀態(tài)入棧,然后在退出中斷處理返回時恢復原有線程狀態(tài),即“出棧”。當應用需要處理器在退出ISR后直接進入休眠狀態(tài)時,傳統(tǒng)MCU仍然必須恢復原先存儲的狀態(tài)信息,然后線程代碼才能讓MCU進入休眠狀態(tài)。同樣地,當下次的中斷喚醒MCU時,它的狀態(tài)必須再次入棧。

            而當使能ARM Cortex-M微控制器上的Sleep-on-Exit功能后,MCU就會在中斷處理完成后直接進入休眠狀態(tài),而不用先返回到原有線程上(見圖4)。這會使處理器仍然保持在中斷狀態(tài),因為消除了喚醒再入棧過程,因而節(jié)省下許多寶貴的機器周期。消除入棧出棧過程既節(jié)省了時間也節(jié)省了能耗,否則電能就會被不必要的指令周期白白消耗,也包括哪些傳統(tǒng)MCU在休眠和喚醒之間管理堆棧的代碼。而且,當處理器被中止調(diào)試請求(Halt Debug Request)喚醒時,出棧過程將會自動進行。

            

           

            

           

            圖4:ARM Cortex-M的Sleep-on-Exit功能通過避免不必要的代碼執(zhí)行和減少出棧入棧操作降低功耗。(引自:《The Definitive Guide to the ARM 1》)

            ARM Cortex-M4運行更快、休眠功耗更低

            像許多MCU一樣,/4處理器通常能夠采用高時鐘速率的方法在中斷驅(qū)動的應用中節(jié)省能耗。如果處理器大部分時間處于休眠狀態(tài),這種看似違背直覺但普遍采用的節(jié)能策略就會很好,因為運行時間減少所節(jié)省的能耗遠遠大于稍高的操作電流。簡單來說,多花10%的電可以省掉20%的時間,總體來說是節(jié)能了。

            這種技術(shù)可以應用在任何Cortex-M系列的處理器上,而涉及密集運算任務的應用也能從Cortex-M4處理器的額外能力中受益。它的單周期DSP指令和可選的浮點加速器能大大減少諸如數(shù)字信號處理、過濾、分析或波形合成等功能所需要的執(zhí)行周期數(shù)。

            一些應用僅僅需要DSP處理能力。例如,有些安全系統(tǒng)采用一種以聲學分析來感測玻璃破損的裝置。玻璃破損時會發(fā)出一連串獨特的聲音和振動,并且在玻璃特有的固有頻率時達到最大,在這個例子中是13kHz。大多數(shù)采用傳感器接口的系統(tǒng)只有在所監(jiān)測的頻率被監(jiān)測到時,才喚醒處理器。但是當設計中使用帶DSP功能的Cortex-M4時就能額外節(jié)能,因為它在執(zhí)行實際的玻璃破損分析時比軟件解決方案更快。

            甚至,這些使用基于M4微控制器的應用可以更加節(jié)能,因為MCU中所包含的高級休眠模式和自治外設可以在CPU休眠時執(zhí)行許多日程任務。例如,以Cortex-M4為內(nèi)核的Wonder Gecko MCU7具有五種不同的低功耗模式,包括20nA的關(guān)機狀態(tài)和950nA的深度休眠模式(實時時鐘有效、RAM和寄存器內(nèi)容保持、使能掉電檢測)。

            上面提及的節(jié)能特性也能帶來其它優(yōu)勢。例如,在超音波/聲學水表之類的應用中,它們必須在小電池供電下運行多年,需要MCU盡可能長的保持在休眠狀態(tài)。除了有助于減少MCU喚醒時間之外,Cortex-4 DSP和浮點算術(shù)指令也能使用成熟的濾波功能從廉價聲學傳感器輸出中獲得所需的信息,從而避免采用昂貴的超聲波流量傳感器。在這個應用實例中,Wonder Gecko MCU的外設還能夠作為模擬狀態(tài)機提供額外的能量節(jié)省,它僅僅在需要時才喚醒Cortex-M4處理器。

            結(jié)論

            雖然并不完備,但這些林林總總的秘訣與妙方應該能讓各位產(chǎn)生好的思路,可以在下一次設計中充分利用Cortex-M系列中一些較不為人知的特性所帶來的好處

          單片機相關(guān)文章:單片機教程


          單片機相關(guān)文章:單片機視頻教程


          單片機相關(guān)文章:單片機工作原理



          上一頁 1 2 下一頁

          關(guān)鍵詞: ARM Cortex-M3 MCU

          評論


          相關(guān)推薦

          技術(shù)專區(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); })();