2013年2月26日 星期二

[STM32F3 教學] 中斷介紹




其實有些人對於ARM這個名詞,一直覺得是省電的代名詞,不過聽說之前ARM因為在MCU這個市場初期,因為中斷管理不像一般MCU那麼厲害,後來才出了Cortex這個系列來PK MCU這塊嵌入式市場,不過ARM cortex 系列除了省電,到底還有什麼地方厲害呢? 其實就是他的中斷處理打破了以往的做法,讓MCU在處理中斷的程序簡化了許多,其實就是可以快速且有效的管理中斷源。有興趣的人,可以參考這一篇ARM的介紹「http://www.embedded-world.eu/fileadmin/user_upload/pdf/arm_entwicklerkonferenz_2011/Session_1/01%20-%20Cortex-M%20architecture.pdf




不過因為筆者是寫系統的工程師,並不是設計IC的工程師,就只簡單的帶過幾個比較厲害的地方,所以在此就不多加介紹了,筆者只是覺得ARM cortex系列的中斷,真的做得是非常的厲害。















從上圖你看出Cortex 在處理中斷的pushpop的厲害之處了嗎? 其實就是讓pushpop的次數變少,這樣就可以有效的處理中斷了,至於Cortex到底怎麼辦到這件事的,會不會有什麼問題? 這些問題筆者到是不擔心,畢竟人家敢拿東西出來賣,就是有十足的把握,況且,這些還都是硬體行為!!!



我們要開始介紹ST的中斷向量了, 因為STSPEC真的寫得非常得多元,真的讓初學者很難適應,他的中斷的介紹寫在programming
manual
裡。而 reference manual 裡面竟然沒有多加介紹,這地方筆者真的是希望ST可以把這一部分加入,讓找資料比較容易;避免造成找SPEC 時的麻煩,更別說每本都有數百頁之多。




ST的中斷向量分成一般的IRQNMI(non-masked interrupt) NMI就是我們沒有辦法透過程式的方式控制,也就是我們只能操作IRQ,而中斷優先權數值愈低,中斷優先權愈高





程式方式,中斷向量是寫在startup.s裡,而程式中,中斷副程式和一般的程式其實並沒有差別,不像以往要特別和compiler宣告這是「IRQ」或是要操作「#paragma」,所以在寫中斷副程式的時候要多加注意,不然一不小心就被compiler識為一般的副程式。不過interrupt的副程式到底叫什麼名字呢?以STM 32F 3 discovery 所附的範例程式,路徑就會是..\\Libraries\CMSIS\Device\ST\STM 32F 30x\Source\Templates\arm 裡面的「startup_stm 32f 30x.s」, 裡面定義的table 就會是中斷副程式,這樣compiler會自己找出相對應的中斷副程式,另外,ST在命令中斷副程式時,會以IRQHadler 為命令方式,以避免搞混。







下一章預告:USART



沒有留言:

張貼留言