ARM是Advanced RISC Machines的縮�,它是一�微處理器行業(yè)知名企業(yè),該企業(yè)�(shè)計了大量高性能、廉價、耗能低的RISC(精簡指令集�處理��
采用RISC架構(gòu)的ARM處理器一般具有如下特點:
1.體積�、低功�、低成本、高性能�
2.支持Thumb(16�)/ARM�32位)雙指令集�
3.大量使用寄存�,指令執(zhí)行速度更快�
4.大多�(shù)�(shù)�(jù)操作都在寄存器中完成�
5.尋址方式靈活簡單,執(zhí)行效率高�
6.指令長度固定�
選用EP7312處理�,主要是它具有高速ARM720T核心、豐富的外設(shè)接口與啟動ROM的設(shè)置。EP7312可配置為外部的ROM啟動的外啟動方式或從片上ROM啟動的內(nèi)啟動方式�
在外啟動方式�,ARM從外部程序存儲器(一般是Flash存儲器)取指令執(zhí)行相�(yīng)的應(yīng)�;在�(nèi)啟動方式�,ARM運行片上啟動ROM中固化的一�128B啟動程序,完成器件初始化,配置串�1�9600bps速率接收2048B用戶程序存儲于片�(nèi)SRAM�,然后跳�(zhuǎn)到片�(nèi)SRAM起始處開始執(zhí)行剛下載�2KB用戶程序,這為進一步的�(diào)�、代碼下�、外啟動Flash存儲器編程提供途徑,非常適用于嵌入式系�(tǒng)的實驗與開發(fā)�
EP7312有強大的系統(tǒng)擴展能力,表1、表2中所示分別是�(nèi)、外啟動方式下的地址空間分配�
�1 �(nèi)啟動方式地址空間分配
�2 外啟動方式地址空間分配
ARM處理器支�7種運行模�,如表所��
� ARM處理器運行模�
說明:ARM處理器的運行模式可以通過軟件改變,也可以通過外部中斷或異常處理改��
大多�(shù)的應(yīng)用程序運行在用戶模式�,當(dāng)處理器運行在用戶模式下時,某些被保護的系�(tǒng)資源是不能被訪問的�
除用戶模式User以外,其余的6種模式稱之為非用戶模式或特權(quán)模式(PrivilegedModes�;其中除去用戶模式和系統(tǒng)模式以外�5種模式又稱為異常模式(ExceptionModes�,常用于處理中斷或異常,以及需要訪問受保護的系�(tǒng)資源等情況�
由于各種新型微處理器的出�(xiàn)和應(yīng)用的不斷深化,嵌入式系統(tǒng)在后PC時代得到了空前的�(fā)�。隨著時間的推移和技�(shù)的進步,在工業(yè)控制和新興的手持式應(yīng)用等�(lǐng)�,用戶體驗成為產(chǎn)品成功的�(guān)鍵因素之一,越來越多的�(chǎn)品需要良好的用戶界面、互�(lián)功能以及較強的數(shù)�(jù)處理能力,這對嵌入式處理器硬件、軟�、教�(xué)等提出了新的要求�
1 嵌入式處理器與硬�
在處理器方面,目前大量的中、低端嵌入式�(yīng)�,主要使�8/16位單片機。在國內(nèi),由于歷史的原因,主要是以MCS51核為主的許多不同型號單片機,主要廠商有Atmel、Philips、Winbond、宏晶等。還有一些近幾年�(fā)展較快的新型單片�,如PIC、AVR、MSP430系列等。這些單片機各有特�,但從目前的�(fā)展角度來�,單片機針對特定�(yīng)用領(lǐng)域的個性化�(fā)展愈�(fā)明顯,典型的例子就是TI公司的MSP430系列16位單片機、ST公司的STM8L系列8位單片機和STM32L系列32位超低功耗單片機�
在嵌入式中的高端�(yīng)用領(lǐng)域,像工�(yè)控制、POS機、網(wǎng)�(luò)�(shè)�、圖像處�、手機、PDA�,目前主要使用ARM、MIPS、PowerPC、DSP�16~64位處理器,以32位處理器為主。各種類型的處理器都有其一定的�(yīng)用針對性。例�,DSP對數(shù)字信號處理技�(shù)中用到的常用運算、算法做了優(yōu)化設(shè)�,主要用于實時信號處理領(lǐng)域,如實時音視頻處理、電機控制等。MIPS處理器性能很好,但功耗較大,適合于有交流電源供電的固定應(yīng)�,如固定的網(wǎng)�(luò)�(shè)�、機頂盒等。ARM處理器性能�,功耗低,適合于用電池供電的便攜、手持式�(shè)�。由于近幾年便攜、手持式嵌入式應(yīng)用的高速發(fā)展,ARM處理器的增長速度和市場占有率也快速提�,成為目�32位應(yīng)用中的主力產(chǎn)品�
由于嵌入式應(yīng)用系�(tǒng)的廣泛�,嵌入式系統(tǒng)的硬件設(shè)計涉及的知識面很�,從模擬到數(shù)字、低頻到高頻、小信號到大功率,以及復(fù)雜的時序邏輯�(shè)計和PCB�(shè)�,還要考慮軟硬件資源的合理分配,不僅要有廣而扎實的理論基礎(chǔ),更需要豐富的實踐�(jīng)�。只有對大大小小各種�(yīng)用系�(tǒng)反復(fù)實戰(zhàn)演練,了解新技�(shù)、新器件,使用過多種多樣的處理器和模�/�(shù)字器�,才能逐步積累,聚沙成�,對一個新的應(yīng)用系�(tǒng)給出快速、合理的硬件方案與設(shè)��
2 ARM處理器的�(yōu)�
對于如今大量出現(xiàn)�32位嵌入式�(yīng)�,以筆者之�,ARM處理器的�(yōu)勢主要有以下幾個方��
2.1 高性能、低功�、低價格
把ARM處理器的性能拿來和一些著名的通用處理器(如Pentium)相比是不合適的,因為他們各自針對的�(yīng)用需求是不同�。Pentium處理器采用多條指令流水線的超�(biāo)量結(jié)�(gòu),追求通用�(yīng)用目�(biāo)下的超強性能,功耗大,可以用散熱器加�(fēng)扇散熱。ARM針對嵌入式應(yīng)�,在滿足性能要求的前提下,力求的功率消�。ARM�(jié)�(gòu)的優(yōu)點是能兼顧到性能、功�、代碼密度、價格等幾個方�,而且做得比較均衡。在性能/功耗比(MIPS/W)方�,ARM處理器具有業(yè)界的性能?;贏RM核的芯片價格也很�,目前ARM CortexM的芯片價格可低至10元人民幣左右�
2.2 豐富的可選擇芯片
ARM只是一個核,ARM公司自己不生�(chǎn)芯片,采用授�(quán)方式給半�(dǎo)體生�(chǎn)�。目前,全球幾乎所有的半導(dǎo)體廠家都向ARM公司購買了各種ARM�,配上多種不同的控制器(如LCD控制�、SDRAM控制�、DMA控制器等)和外設(shè)、接�,生�(chǎn)各種基于ARM核的芯片。目�,基于ARM核的各種處理器型號有好幾百種,在國內(nèi)市場�,常見的有ST、TI、NXP、Atmel、Samsung、OKI、Sharp、Hynix、Crystal等廠家的芯片。用戶可以根�(jù)各自的應(yīng)用需求,從性能、功能等方面考察,在許多具體型號中選擇最合適的芯片來�(shè)計自己的�(yīng)用系�(tǒng)。由于ARM核采用向上兼容的指令系統(tǒng),用戶開�(fā)的軟件可以非常方便地移植到更高的ARM平臺�
2.3 廣泛的第三方支持
以如今的技�(shù),設(shè)計一個處理器并非難事,但要使這個處理器得到大家�(rèn)�,并取得市場成功卻是非常困難�,其中涉及許多技�(shù)與非技�(shù)的因素和�(huán)節(jié),還包括時機、運氣。因為現(xiàn)在許多產(chǎn)品的開發(fā),不是一個簡單的處理器加幾百條指�、語句就可以解決�。要用到32位處理器,一般都要有編譯器、高效的開發(fā)工具(仿真器及調(diào)試環(huán)境)、操作系�(tǒng)、協(xié)議棧�,這些東西都不是一個芯片生�(chǎn)商可以解決的,而需要許多第三方的支�。這就像一粒種子,需要土�、空�、水等環(huán)境才能發(fā)芽、成�。這也是我們的一些“中國芯”該反思之處�
ARM通過�20年的培育、發(fā)展,得到了廣泛的第三方合作伙伴支�。目�,除通用編譯器GCC,ARM有自己的高效編譯、調(diào)試環(huán)境(MDK、Keil�,全球約有50家以上的實時操作系統(tǒng)(RTOS)軟件廠商和30家以上的EDA工具制造商,還有很多高效率的實時跟蹤調(diào)試工具的廠商,對ARM提供了很好的支持。用戶采用ARM處理器開�(fā)�(chǎn)�,既可以獲得廣泛的支�,也便于和同行交流,加快開發(fā)進度,縮短產(chǎn)品的上市時間�
2.4 完整的產(chǎn)品線和發(fā)展規(guī)�
ARM核根�(jù)不同�(yīng)用需求對處理器的性能要求,有一個從ARM7、ARM9到ARM10、ARM11,以及新定義的CortexM/R/A系列完整的產(chǎn)品線。前幾年�(yīng)用較多的主要是基于V4架構(gòu)的ARM7TDMI、ARM720T、ARM920T核的一些處理器芯片,如NXP的LPC2000系列、ST的STR7/9系列、Atmel 的AT91系列和Samsung的S3C系列。近兩年,ARM Cortex系列以更好的性能、更低的價格得到快速推�,典型的就是基于CortexM3的STM32系列�
ARM CortexM/R/A系列分別針對不同的應(yīng)用領(lǐng)域。M系列主要面向傳統(tǒng)微控制器(MCU/單片機)�(yīng)�,這類�(yīng)用面很廣,要求處理器有豐富的外設(shè),并且各方面比較均衡;R系列強調(diào)實時�,主要用于實時控制,如汽車引�;A系列面向高性能、低功耗應(yīng)用系�(tǒng),如智能手機。選用ARM處理器進行開發(fā),技�(shù)積累性較�,生命周期長,設(shè)計重用度�,不易被淘汰。用戶在選擇ARM處理器時,可以針對應(yīng)用需�,從大量的ARM芯片中選用滿足性能、功能要求的�(chǎn)�,以獲得較好的性價��
3 ARM嵌入式系�(tǒng)的軟�
由于嵌入式系�(tǒng)的差異性很�,對不同的應(yīng)用需�,必須選擇不同的軟件�(shè)計方�、開�(fā)平臺和系�(tǒng)工具�
對于一些不需要復(fù)雜圖形用戶界�、通信�(xié)議和�(fù)雜文件操作(如同時打開多個文件)的應(yīng)用,如果選用CortexM3核的處理器就已可以滿足要�,任�(wù)�(shù)不多,任�(wù)之間的關(guān)系也不復(fù)雜,則不一定需要移植復(fù)雜的操作系統(tǒng)。這樣一方面可以降低系統(tǒng)硬件開銷,也可以獲得更好的實時性和�(zhí)行速度。不過,這樣的軟件開�(fā)方法需要開�(fā)人員有較好的程序�(shè)計思想,對所用器件有深入的了�,并掌握其編程控制方法。若引入一個簡單的操作系統(tǒng),如μC/OS,可以簡化程序結(jié)�(gòu),但開發(fā)者熟悉其�(nèi)核結(jié)�(gòu),并有使用經(jīng)�,否則可能會需要更多的系統(tǒng)開發(fā)、調(diào)試時��
如果選擇了帶存儲器管理單元(MMU)的ARM處理器(如ARM920T、CortexA8等),這種�(yīng)用系�(tǒng)根據(jù)�(yīng)�、實時�、開�(fā)�(huán)境等因素,移植一個功能較強的操作系統(tǒng)一般情況下會比較合�,如Linux、WinCE,甚至新的Android�。這種系統(tǒng)的開�(fā)難度主要是在OS的移植以及硬件驅(qū)動程序的開發(fā)�。當(dāng)這二步工作完成后,主要的軟件開發(fā)工作已和在PC機上開發(fā)沒有多大區(qū)別,可以按照一般的軟件工程方法來進行,要注意的只是與ARM硬件平臺相關(guān)的軟件優(yōu)化問題�
由于嵌入式系�(tǒng)硬件資源的有限�,嵌入式軟件與其他應(yīng)用軟件的主要區(qū)�,在于嵌入式軟件要有較高的效�,包括執(zhí)行速度和存儲空間,盡管這二者經(jīng)常是相互矛盾�。目前一般要求更多的是速度�(yōu)�。要編寫出高效的ARM程序,需要開�(fā)人員熟悉ARM的體系結(jié)�(gòu),包括內(nèi)核結(jié)�(gòu)、指令系�(tǒng)、Cache與存儲器�(jié)�(gòu)�,還要有好的程序�(shè)計思想,以及對一些常用函�(shù)、算法的深刻理解。這個過程也是ARM系統(tǒng)開發(fā)從低級到的進階之路�
目前,由于應(yīng)用系�(tǒng)越來越復(fù)雜,嵌入式軟件的移植性和重用性也得到了人們的高度重視,因為它直接影響到嵌入式軟件的開�(fā)效率和質(zhì)�。選擇一種通用的開�(fā)�(huán)境和編程語言,使開發(fā)的嵌入式軟件可以方便地移植到不同的硬件平�,是實現(xiàn)軟件重用的基�(chǔ)。目前在ARM嵌入式系�(tǒng)開發(fā)�,ARM RealView、Keil以及IAR的EWARM是較好的開發(fā)平臺,C/C++語言是應(yīng)用最廣泛的編程語言,并具有廣泛的庫函數(shù)、程序支�,在今后很長一段時間內(nèi),仍將在嵌入式系�(tǒng)�(yīng)用領(lǐng)域中占重要地��
4 嵌入式系�(tǒng)的教�(xué)
如今,嵌入式系統(tǒng)作為一個熱門�(lǐng)�,其教學(xué)問題也頗受高校的�(guān)注。教�(xué)的主要目的是培養(yǎng)社會需要的�,由于嵌入式系統(tǒng)的廣泛�、差異�,社會對從事嵌入系統(tǒng)開發(fā)人員的要求也有很大的不同,既需要從事簡�8/16位單片機開發(fā)的人員,也需要從事ARM、DSP開發(fā)的人�;既要有從事硬件、底層軟件開�(fā)的人�,也要有從事OS移植、應(yīng)用軟件開�(fā)的人�。由于整個大�(xué)�(xué)�(xí)時間和課程教�(xué)時數(shù)的限�,一個人顯然不可能學(xué)�(xí)、掌握嵌入系�(tǒng)開發(fā)的各個層靀所�,各個學(xué)校首先應(yīng)根據(jù)自身情況,明確定位,確定自己培養(yǎng)�(xué)生的社會適應(yīng)�,然后再制定教學(xué)大綱,確定課程內(nèi)容和實驗平臺。對于高職、普通高校的電類與非電類、軟件學(xué)院等,都�(yīng)該有不同的選�,而不是人云亦�,一哄而上�
就目前的�(fā)展看,由于ARM�32位處理器�(yīng)用漸成主�,開�(fā)工具已較完善、成熟,對于普通高校計算機�(xué)科的嵌入式系�(tǒng)教學(xué),筆者認(rèn)為可以定位在�32位嵌入式系統(tǒng)開發(fā)為主,重點是嵌入式系�(tǒng)的軟硬件�(jié)�(gòu)、嵌入式OS的知�,以及嵌入式軟件�(shè)計(包括�(yōu)化)。課程主體內(nèi)容基本與硬件平臺(處理器型號)無�(guān),實驗可以采用基于ARM核的不同廠家處理器的實驗平臺。主要考慮以下幾點�
?、僭?2位嵌入式系統(tǒng)開發(fā)�,軟件開�(fā)人員的需求比硬件開發(fā)人員要多得多(盡管目前硬件開�(fā)人員較難�,但這應(yīng)該是電子等培�(yǎng)的)。一般在一個從事嵌入式�(yīng)用系�(tǒng)開發(fā)的公司中,軟硬件人員的比例不會小�10�1。由于學(xué)�(xí)時間有限,教�(xué)重點�(yīng)該偏軟件�
?、诂F(xiàn)代社會強�(diào)分工、合�,以求得整體利益的化。對個人的要求首先是專才,能把局部工作做�、做�。通才是需要的,但�(shù)量會比專才少得多,而且通才是練出來�,不是教出來�。今后的大學(xué)是大眾教�,教�(xué)只能面向大眾需�。在相關(guān)的研究生階段,對一些有基礎(chǔ)、有興趣的學(xué)�,可以進行一些系�(tǒng)級硬�、底層軟件的開發(fā)實踐,同時也可滿足社會對高層次嵌入式人才的需��
③以此為�,可以再開設(shè)2門選修課。向下為“單片機原理與應(yīng)用�,此課程以實踐為�,讓有興趣的�(xué)生可以自己設(shè)�、制作一些單片機�(yīng)用系�(tǒng),同時也鍛煉了硬件動手能�。向上為“數(shù)字信號處理(DSP)�,讓那些�(shù)�(xué)基礎(chǔ)較好、對實時信號處理有興趣的�(xué)生有用武之地(現(xiàn)在這樣的學(xué)生很難得��
另外,由于應(yīng)用日趨復(fù)雜,而教�(xué)時間有限,一個本科生在校期間不可能深入學(xué)�(xí)嵌入式系�(tǒng)的很多細節(jié),嵌入式教學(xué)�(yīng)采用自上而下的教�(xué)方法。一開始不必花很多時間講解處理器�(nèi)核架�(gòu)/指令系統(tǒng),只要知道各種內(nèi)核的基本特點即可,重點學(xué)�(xí)、掌握處理器、外�(shè)的編程結(jié)�(gòu)(即編程者角度看到的編程模型�(jié)�(gòu),非具體物理實現(xiàn)�(jié)�(gòu)�。真實的�(yīng)�、研究設(shè)計都是從粗粒度向細粒度進階�,是一個自頂向下的過程,首先要重視的是系統(tǒng)架構(gòu)和各個抽象層�1000行的C程序,編譯后生成的目�(biāo)代碼只有10 KB左右,試想現(xiàn)在的MCU Flash動輒幾百KB,為什�?一個目�(biāo)代碼幾百KB的C程序,一般不是完全由個人寫出來的,而都會使用一些第三方的庫函數(shù)、中間件�。硬件也一�,現(xiàn)在很多硬件系�(tǒng)都會使用一些模塊(Module),盡管這些模塊看上去還是一個芯�,但實際上已�(jīng)是一個SiP模塊,如WiFi模塊。所�,在了解基本嵌入式系�(tǒng)�(jié)�(gòu)的基�(chǔ)�,本科階段要更多地學(xué)�(xí)各種系統(tǒng)、模�、外�(shè)、協(xié)議、庫函數(shù)的“邊界(Interface)�,能夠搭建一個簡單系�(tǒng)(How to do�,今后在工作、或研究生階段進一步去做好一個系�(tǒng)(How to do better��
5�(jié)�
嵌入式系�(tǒng)作為一種特殊的計算機應(yīng)用系�(tǒng),在任何時期都有相對的高、中、低端應(yīng)�,即使在今后,沒有OS支持�4位或8位單片機的嵌入式�(yīng)用仍有大量需�,但趨勢是系�(tǒng)�、復(fù)雜化。這既是嵌入式系統(tǒng)的特�--廣泛�、差異性和不可壟斷�,也是廣大嵌入系�(tǒng)研發(fā)人員的生存與�(fā)展空�。ARM處理器在便攜、手持式�(shè)備以及工�(yè)控制等應(yīng)用領(lǐng)域,在今后相�(dāng)長的時間�(nèi)是一個很好的選擇。當(dāng)�,沒有一種型號的處理器是可以覆蓋所有應(yīng)用的,也不是搬上一個嵌入式OS,就可以很好地解決軟件問題的。深入了解各種器件特性,選擇最合適的處理器、外圍器�、操作系�(tǒng)和軟件庫,盡可能地優(yōu)化軟件設(shè)�,最貼切地滿足應(yīng)用需�,以獲得的系�(tǒng)性價�,是嵌入式系�(tǒng)�(shè)計開�(fā)的精髓�
ARM編程特別是系�(tǒng)初始化代碼的編寫中通常需要實�(xiàn)中斷的響�(yīng)、解析跳�(zhuǎn)和返回等操作,以便支持上層應(yīng)用程序的開發(fā),而這往往是困擾初�(xué)者的一個難�。中斷處理的編程實現(xiàn)需要深入了解ARM�(nèi)核和處理器本身的中斷特征,從而設(shè)計一種快速簡便的中斷處理機制。需要說明的�,具體的上層語言編寫的中斷服�(wù)函數(shù)不在本文的討論范圍之�(nèi)�
ARM處理器異常中斷處理概�
�(dāng)異常中斷�(fā)生時,系�(tǒng)�(zhí)行完�(dāng)前指令后,將跳轉(zhuǎn)到相�(yīng)的異常中斷處理程序處�(zhí)�。當(dāng)異常中斷處理程序�(zhí)行完成后,程序返回到�(fā)生中斷的指令的下一條指令處�(zhí)行。在進入異常中斷處理程序�,要保存被中斷的程序的執(zhí)行現(xiàn)場。從異常中斷處理程序退出時,要恢復(fù)被中斷的程序的執(zhí)行現(xiàn)�。ARM體系中通常在存儲地址的低端固化了一�32字節(jié)的硬件中斷向量表,用來指定各異常中斷及其處理程序的對�(yīng)�(guān)系。當(dāng)一個異常出�(xiàn)以后,ARM微處理器會執(zhí)行以下幾步操作:
1)保存處理器�(dāng)前狀�(tài)、中斷屏蔽位以及各條件標(biāo)志位�
2)設(shè)置當(dāng)前程序狀�(tài)寄存器CPSR中相�(yīng)的位�
3)將寄存器lr[_]mode�(shè)置成返回地址�
4)將程序計數(shù)�(PC)值設(shè)置成該異常中斷的中斷向量地址,從而跳�(zhuǎn)到相�(yīng)的異常中斷處理程序處�(zhí)��
在接收到中斷請求以后� ARM處理器內(nèi)核會自動�(zhí)行以上四步,程序計數(shù)器PC總是跳轉(zhuǎn)到相�(yīng)的固定地址。從異常中斷處理程序中返回包括下面兩個基本操作:
1)恢�(fù)被屏蔽的程序的處理器狀�(tài)�
2)返回到�(fā)生異常中斷的指令的下一條指令處繼續(xù)�(zhí)��
�(dāng)異常中斷�(fā)生時,程序計�(shù)器PC所指的位置對于各種不同的異常中斷是不同�,同�,返回地址對于各種不同的異常中斷也是不同的。例外的是,�(fù)位異常中斷處理程序不需要返�,因為整個應(yīng)用系�(tǒng)是從�(fù)位異常中斷處理程序開始執(zhí)行的�
支持中斷跳轉(zhuǎn)的解析程�
解析程序的概念和作用
如前所�,ARM處理器響�(yīng)中斷的時候,總是從固定的地址開始�,而在語言�(huán)境下開發(fā)中斷服務(wù)程序�,無法控制固定地址開始的跳�(zhuǎn)流程。為了使得上層應(yīng)用程序與硬件中斷跳轉(zhuǎn)�(lián)系起�,需要編寫一段中間的服務(wù)程序來進行連接。這樣的服�(wù)程序常被稱作中斷解析程序�
每個異常中斷對�(yīng)一�4字節(jié)的空間,正好放置一條跳�(zhuǎn)指令或者向PC寄存器賦值的�(shù)�(jù)訪問指令。理論上可以通過這兩種指令直接使得程序跳�(zhuǎn)到對�(yīng)的中斷處理程序中去。但實際上由于函�(shù)地址值為未知和其它一些問�,并不這么�。這里給出一種常用的中斷跳轉(zhuǎn)流程�
�1中斷跳轉(zhuǎn)流程�
這個流程中的關(guān)鍵部分是中斷向量表,為了讓解析程序能找到向量�,應(yīng)該將向量表的地址固定化(編程者自定義�。這樣,整個跳�(zhuǎn)流程的所有程序地址都是固定�,當(dāng)中斷觸發(fā)�,就可以自動運行。其�,只有向量表的內(nèi)容是可變�,編程者只要在向量表中填入正確的目�(biāo)地址值就可以了。這使得上層中斷處理程序和底層硬件跳轉(zhuǎn)有機地聯(lián)系起��
解析過程示例
以一次IRQ跳轉(zhuǎn)為例,假定中斷向量表定義�0x00400000開始的外部RAM空間�
�2 中斷解析示例流程
�2中實線表示的流程都用ARM匯編語言編寫,一般作為boot代碼的一部分放在系統(tǒng)的底層模塊中。填寫向量表的操作可以在上層�(yīng)用程序中方便地實�(xiàn),比如在C語言中: *( int *(0x00400018)) = (int) ISR[_]IRQ;這樣就將IRQ中斷的服�(wù)程序入口地址�0x00300260)填寫到中斷向量表中的固定地址0x00400018開始�4字節(jié)空間��
如此一來,就可避免在應(yīng)用程序中計算中斷的跳�(zhuǎn)地址,并且可以很方便的選擇不同的函數(shù)作為指定中斷的服�(wù)程序。當(dāng)�,在程序開發(fā)時要合理開辟好向量表,避免對向量表地址空間不必要的寫操作�
解析程序的擴�
眾所周知,在ARM處理器中會包含很多中斷源,通常會在ARM�(nèi)核外面擴展一個中斷控制器來管理各種原因產(chǎn)生的中斷。比如,三星公司的S3C4510B處理器中的IRQ/FIQ類型的中斷源可以�21�,S3C44B0X�26個。這時候中斷處理的原理還是一樣的,無非是向量表更�,并且當(dāng)一個中斷觸�(fā)以后,需要在解析程序里查詢中斷控制器的狀�(tài)來確定具體的中斷�,再根據(jù)中斷源來讀取向量表中的對應(yīng)地址�(nèi)�。其處理流程可用�3表示�
�3 中斷解析的擴�
相比�2,圖3中多了一級的跳轉(zhuǎn),也就是在次解析跳轉(zhuǎn)到IRQ/FIQ服務(wù)程序中后,再進行第二次的解析[_]中斷源的識別�
向量中斷的處�
一些處理器在設(shè)計外擴的中斷控制器時提供了一種叫做“向量中斷”的中斷跳轉(zhuǎn)機制。這與前文敘述的擴展解析跳�(zhuǎn)流程有所不同,它不需要軟件來識別具體的中斷源,也就是不需要添加圖3中的IRQ/FIQ服務(wù)程序,而完全由硬件自動跳轉(zhuǎn)到對�(yīng)的中斷地址。其它跳�(zhuǎn)流程的原理都是一樣的。這相�(dāng)于擴展了ARM�(nèi)核的硬件中斷向量�,減小了中斷響應(yīng)延時。以S3C44B0X處理器的外部中斷0為例,需要在其對�(yīng)的硬件固定跳�(zhuǎn)地址0x00000020處添加指令:ldr pc,=HandlerEINT,使得程序跳�(zhuǎn)到其服務(wù)程序HandlerEINT0處執(zhí)��
�4 向量中斷解析流程示例
�(jié)�
本文介紹的中斷處理機制是嵌入式編程中常常采用的方法,其原理是通用�。當(dāng)�,在實際開發(fā)�,需要根�(jù)系統(tǒng)處理器ARM�(nèi)核的中斷特征和處理器自身的中斷控制器特點具體細化流程圖中的各個步驟和改寫參考代��
維庫電子�,電子知�,一查百��
已收錄詞�168657�