基于ARM9的中斷驅動程序設計_第1頁
基于ARM9的中斷驅動程序設計_第2頁
基于ARM9的中斷驅動程序設計_第3頁
基于ARM9的中斷驅動程序設計_第4頁
基于ARM9的中斷驅動程序設計_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、成 績 評 定 表學生姓名班級學號專 業(yè)計算機科學與技術課程設計題目基于arm9的中斷驅動程序設計評語組長簽字:成績日期 2013 年11 月24 日課程設計任務書學 院信息科學與工程專 業(yè)計算機科學與技術學生姓名范航偉班級學號1203055125課程設計題目基于arm9的中斷驅動程序設計實踐教學要求與任務:設計arm9核cpusc3c2410的中斷接口驅動程序。程序主要功能:響應外部中斷請求的配置方法,并通過響應定時器中斷,執(zhí)行中斷服務子程序使cpu板上的led指示燈led1、led2閃爍。要求用c語言實現。使用ads1.2開發(fā)環(huán)境。利用嵌入式實驗系統(tǒng)實現硬件仿真。工作計劃與進度安排:13周

2、周一:編寫應用程序代碼13周周二、周四:調試程序、撰寫課程設計報告、答辯指導教師: 2013年11月18日專業(yè)負責人:2013年11月18日學院教學副院長:2013年11月18日摘 要隨著移動設備的流行和發(fā)展,嵌入式系統(tǒng)已經成為一個熱點。它并不是最近出現的新技術,只是隨著微電子技術和計算機技術的發(fā)展,微控制芯片功能越來越大,而嵌入微控制芯片的設備和系統(tǒng)越來越多,從而使得這種技術越來越引人注目。它對軟硬件的體積大小、成本、功耗和可靠性都提出了嚴格的要求。嵌入式系統(tǒng)的功能越來越強大,實現也越來越復雜,隨之出現的就是可靠性大大降低。最近的一種趨勢是一個功能強大的嵌入式系統(tǒng)通常需要一個操作系統(tǒng)來給予支

3、持,這種操作系統(tǒng)是已經成熟并且穩(wěn)定的,可以使嵌入式的linux,wince等等。本文所要研究的就是基于arm嵌入式系統(tǒng)的中斷處理程序設計與實現。關鍵字:嵌入式,arm,中斷目 錄一、設計目的1二、設計思路22.1 arm實驗箱硬件資源概述22.2 arm的中斷原理3三、關鍵技術43.1 arm9處理器43.2嵌入式c語言開發(fā)技術53.3 ads開發(fā)環(huán)境63.4 中斷流程73.5 數據結構83.5.1 中斷優(yōu)先級產生模塊83.5.2 中斷優(yōu)先級83.6 寄存器工作原理93.6.1 程序狀態(tài)存儲器psr93.6.2 中斷模式93.6.3 中斷請求寄存器103.6.4 中斷屏蔽寄存器103.7 實驗

4、詳解103.7.1 源請求寄存器srcpnd103.7.2 中斷模式寄存器intmod123.7.3 中斷屏蔽寄存器intmsk123.7.4 中斷請求寄存器intpnd133.7.5 中斷偏移寄存器intoffset143.7.6 子中斷源請求寄存器subsrcpnd143.7.7 子中斷屏蔽寄存器intsubmsk15四、程序流程16五、主要源代碼175.1 主函數設計175.2 定時器中斷初始化程序175.3 定時器初始化程序175.4 定時器中斷服務子程序18六、運行結果及結論196.1 運行結果196.2 結論19七、參考文獻20一、設計目的通過課程設計,熟悉基于arm微處理器的嵌入

5、式系統(tǒng)開發(fā)的過程,掌握嵌入式系統(tǒng)開發(fā)的知識。針對某一嵌入式微處理器進行實際開發(fā),鍛煉實踐動手能力。并能夠熟練掌握arm9的中斷原理,能夠對s3c2410的中斷資源及其相關中斷寄存器進行合理配置。掌握對s3c2410的中斷編程方法。二、設計思路2.1 arm實驗箱硬件資源概述el-arm-830型教學實驗系統(tǒng)屬于一種綜合的教學實驗系統(tǒng),該系統(tǒng)采用了目前在國內普遍認同的arm920t核,32位微處理器,實現了多模塊的應用實驗。它是集學習、應用編程、開發(fā)研究于一體arm實驗教學系統(tǒng)。用戶可根據自己的需求選用不同類型的cpu適配板,兼容arm7與arm9,而不需要改變任何配置,同時,實驗系統(tǒng)上的tec

6、h_v總線能夠拓展較為豐富的實驗接口板。用戶在了解tech_v標準后,更能研發(fā)出不同用途的實驗接口板。除此之外,在實驗板上有豐富的外圍擴展資源(數字、模擬信號發(fā)生器,數字量io輸入輸出,語音編解碼、人機接口等單元),可以完成arm的基礎實驗、算法實驗和數據通信實驗、以太網實驗。9圖2.1 el-arm-830實驗教學系統(tǒng)的功能框圖2.2 arm的中斷原理在arm中,有兩類中斷,一類是irq,一類是fiq,irq是普通中斷,fiq是快速中斷,在進行大批量的復制、數據轉移等工作時,常使用此類中斷。fiq的優(yōu)先級高于irq。同時,它們都屬于arm的異常模式,當一旦有中斷發(fā)生,不管是外部中斷,還是內部

7、中斷,正在執(zhí)行的程序都會停下,pc指針進而跳入異常向量的地址處,若是irq中斷,則pc指針跳到0x18處,若是fiq中斷,則跳到0x1c處。異常向量地址處,一般存有中斷服務子程序的地址,所以,接下來pc指針跳入中斷服務子程序中。當完成中斷服務子程序后,pc指針會返回到被打斷的程序的下一條地址處,繼續(xù)執(zhí)行程序。這就是arm中斷操作的基本原理。8但是,通常由于生產arm處理器的各廠家都集成了很多中斷請求源,比如,串口中斷、ad中斷、外部中斷、定時器中斷、dma中斷等等,所以,很多中斷可能同時請求中斷,因此,為區(qū)分它們,更準確的完成任務,這些中斷都有相應的優(yōu)先級別,以及當發(fā)生中斷時,它們都有相應的中

8、斷標志位,通過在發(fā)生中斷是判斷中斷優(yōu)先級,和訪問中斷標志位的狀態(tài)來識別到底哪一個中斷發(fā)生了。三、關鍵技術3.1 arm9處理器新一代的arm9處理器,通過全新的設計,采用了更多的晶體管,能夠達到兩倍以上于arm7處理器的處理能力。這種處理能力的提高是通過增加時鐘頻率和減少指令執(zhí)行周期實現的。arm9系列包括三種處理器:arm926ej-s、arm946e-s和arm968e-s。11、 時鐘頻率的提高arm7處理器采用3級流水線,而arm9采用5級流水線。增加的流水線設計提高了時鐘頻率和并行處理能力。5級流水線能夠將每一個指令處理分配到5個時鐘周期內,在每一個時鐘周期內同時有5個指令在執(zhí)行。2

9、、 指令周期的改進指令周期的改進對于處理器性能的提高有很大的幫助。性能提高的幅度依賴于代碼執(zhí)行時指令的重疊,這實際上是程序本身的問題。對于采用最高級的語言,一般來說,性能的提高在30%左右。a) loads指令和stores指令指令周期數的改進最明顯的是loads指令和stores指令。從arm7到arm9這兩條指令的執(zhí)行時間減少了30%。指令周期的減少是由于arm7和arm9兩種處理器內的兩個基本的微處理結構不同所造成的。arm9有獨立的指令和數據存儲器接口,允許處理器同時進行取指令和讀寫數據。這叫做改進型哈佛結構。而arm7只有數據存儲接口,它同時用來取指令和數據訪問。5級流水線引入了獨立

10、的存儲器和寫回流水線,分別用來訪問存儲器和將結果寫回寄存器。b) 互鎖技術當指令需要的數據因為以前的指令沒有執(zhí)行完而沒有準備好就會產生管道互鎖。當管道互鎖發(fā)生時,硬件會停止這個指令的執(zhí)行,直到數據準備好為止。雖然這種技術會增加代碼執(zhí)行時間,但是為初期的設計者提供了巨大的方便。編譯器以及匯編程序員可以通過重新設計代碼的順序或者其它方法來減少管道互鎖的數量。c) 分支指令arm9和arm7的分支指令周期是相同。而且arm9tdmi和arm8e-s并沒有對分支指令進行預測處理。3、 arm9特點7以arm9e-s為例介紹arm9處理器的特點。其主要特點如下:a) 32bit定點risc處理器,改進型

11、arm/thumb代碼交織,增強性乘法設計。支持實時(real-time)調試;b) 片內指令和數據sram,而且指令和數據的存儲器容量可調;c) 片內指令和數據告訴緩沖器(cache)容量從4k字節(jié)到1m字節(jié);d) 設置保護單元(protcction unit),非常適合嵌入式應用中隊存儲器進行分段和保護;e) 采用amba ahb總線接口,為外設提供統(tǒng)一的地址和數據總線;f) 支持外部協處理器,指令和數據總線有簡單的握手信令支持;g) 支持標準基本邏輯單元掃描測試方法學,而且支持bist;h) 支持嵌入式跟蹤宏單元,支持實時跟蹤指令和數據。3.2嵌入式c語言開發(fā)技術不同于一般形式的軟件編程

12、,嵌入式系統(tǒng)編程建立在特定的硬件平臺上,勢必要求其編程語言具備較強的硬件直接操作能力。無疑,匯編語言具備這樣的特質。但是,由于匯編語言開發(fā)的復雜性,它并不是嵌入式系統(tǒng)開發(fā)的一般選擇。而與之相比,c語言一種“高級的低級”語言,則成為嵌入式系統(tǒng)開發(fā)的最佳選擇。3在c語言中,宏是產生內嵌代碼的唯一方法,對于嵌入式系統(tǒng)而言,為了能達到性能要求,宏是一種很好的代替函數的方法。嵌入式開發(fā)的核心就是利用最少的資源最高的效的實現所需功能。c語言在嵌入式中控制系統(tǒng)開發(fā)中的優(yōu)勢匯編語言有其執(zhí)行效率高的優(yōu)點,但其可移植性和可讀性差,以及它本身就是一種編程 效率低下的低級語言,這些都使他的編程和維護極不方便,從而導致

13、整個系統(tǒng)的可靠性也較差,而使用c語言進行嵌入式控制系統(tǒng)的開發(fā),有著匯編語言不可比擬的優(yōu)勢。1、 編程調試靈活方便c語言具有靈的編程方式,當前幾乎看了所有的嵌入式控制系統(tǒng)都有相應的c語言級別的仿真調試系統(tǒng),使得調試十分方便。2、 生成的代碼編譯效率高。3、 編寫的程序完全模塊化。4、 可移植性好一種語言所編寫的c語言程序,只需將部分與相關的地方進行適度的修改,就可方便的移植到另外一種系列上。5、 便與項目維護管理用c語言發(fā)的代碼便與開發(fā)小組計劃項目,靈活管理,分工工作,以及后期維護,基本上可以杜絕因開發(fā)人員變化而給項目進度或后期維護或升級帶來影響。3.3 ads開發(fā)環(huán)境ads(arm devel

14、oper suite),是在1993年由metrowerks公司開發(fā),是arm處理器下最重要的開發(fā)工具。ads是全套的實時開發(fā)軟件工具,包編譯器生成的代碼密度和執(zhí)行速度優(yōu)異。可快速低價地創(chuàng)建arm結構應用。ads對匯編、c/c+、java支持的均很好,是目前最成熟的arm開發(fā)工具。很多arm開發(fā)軟件也是借用的ads的編譯器。21、 ads包括三種調試器:axd(arm extended debugger):arm擴展調試器;armsd(arm symbolic debugger):arm符號調試器;與老版本兼容的windows或unix下的arm調試工具,adw/adu(application

15、 debugger windows/unix)。其中axd不僅擁有低版本arm調試器的所有功能,還新添了圖形用戶界面,更方便的視窗管理數據顯示,格式化和編輯以及全套的命令行界面。該產品還包括realmonitortm(可以再前臺調試的同時斷點續(xù)存并且在不中斷應用的情況下讀寫內存跟蹤調試工具)。2、 組成介紹a) 編譯器:ads提供多種編譯器,以支持arm和thumb指令的變異。armcc是arm c編譯器tcc是thumb c編譯器armcpp是arm c+編譯器tcpp是thumb c+編譯器armasm是arm和thumb的編譯器b) 鏈接器:armlink是arm鏈接器。該命令既可以將編

16、譯得到的一個或多個目標文件和相關的一個或多個庫文件進行鏈接,生成一個可執(zhí)行文件,也可以將多個目標文件部分鏈接成一個目標文件,以供進一步的鏈接。c) 符號調試器:armsd是arm和thumb的符號調試器。它能夠進行源碼級的程序調試。用戶可以再用c或匯編語言寫的代碼中進行單步調試、設置斷點、查看變量值和內存單元的內容。d) fromelf:將elf格式的文件轉換為各種格式的輸出文件,包括bin格式的映像文件、motorola 32位s格式影像文件、intel 32位格式映像文件和verilog十六進制文件。e) armar:armar是arm庫函數生成器,它將一系列elf格式的目標文件以庫函數的

17、形式集合在一起。用戶可以把一個庫傳遞給一個鏈接器以代替幾個elf文件。f) codewarrior:codewarrior集成開發(fā)環(huán)境(ide)為管理和開發(fā)項目提供了簡單多樣化的圖形用戶界面,用戶可以使用ads的codewarrior ide為arm和thumb處理器開發(fā)用c、c+或者arm匯編語言編寫的程序代碼。g) c和c+庫:ads提供ansi c庫函數和c+庫函數,支持被編譯的c和c+大面。用戶可以把c庫中的與目標相關的函數作為自己應用程序中的一部分,重新進行代碼的實現。3.4 中斷流程圖3.1中斷流程圖3.5 數據結構3.5.1 中斷優(yōu)先級產生模塊其中32個中斷請求的優(yōu)先級邏輯有一個

18、rotation based仲裁位組成:6個一級仲裁位和一個二級位4,如圖3.2所示圖3.23.5.2 中斷優(yōu)先級每個仲裁器可以處理6個中斷請求,基于一位仲裁器模式(arb_mode)和兩位選擇信號(arb_sel):如果arb_sel位為00b,優(yōu)先級順序是:req0,req1,req2,req3,req4,and req5。如果arb_sel位為01b,優(yōu)先級順序是:req0,req2,req3,req4,req1,and req5。如果arb_sel位為10b,優(yōu)先級順序是:req0,req3,req4,req1,req2,and req5。如果arb_sel位為11b,優(yōu)先級順序是:i

19、s req0,req4,req1,req2,req3,and req5。注意:req0總是具有最高優(yōu)先級,req5總是具有最低優(yōu)先級,改變arb_sel位只能改變req1-req4的優(yōu)先級。如果arb_mode位被置1,arb_sel不會自動改變,這會使仲裁器處于固定優(yōu)先級模式(注意即使處于這種模式,還是可以通過手動改變arb_sel位來配置優(yōu)先級)。如果arb_mode位被置1,arb_sel改變以變換優(yōu)先級,例如,如果req1被服務,arb_sel自動變成01把req1變?yōu)樽畹蛢?yōu)先級,arb_sel的詳細規(guī)則如下:如果req0或req5被服務,arb_sel位不會變如果req1被服務,ar

20、b_sel位置01b如果req2被服務,arb_sel位置10b如果req3被服務,arb_sel位置11b如果req4被服務,arb_sel位置00b3.6 寄存器工作原理3.6.1 程序狀態(tài)存儲器psr如果psr中的f位被置1,cpu不接收fiq快速中斷,同樣如果i位psr被置1,cpu不接收irq中斷,因此中斷控制器能夠通過將psr的f和i位和相應的intmsk中的位清零來接收中斷。63.6.2 中斷模式arm920t有兩種中斷模式:fiq和irq。在中斷請求時所有的中斷源決定使用哪個模式。3.6.3 中斷請求寄存器s3c2410有兩種中斷請求寄存器:源請求寄存器(srcpnd)和中斷請

21、求寄存器(intpnd)。這些請求寄存器揭示了一個中斷是否正在請求。當中斷源請求中斷服務時srcpnd寄存器中的相應位肯定被置1,然而,中斷仲裁之后則只有intpnd寄存器的某1位被自動置1。即使該中斷被屏蔽,srcpnd寄存器中的相應位也會被置1,但是intpnd寄存器將不會改變。當intpnd寄存器的某位被置1,且i位或者f位清零時中斷服務即開始。srcpnd和intpnd寄存器能夠被讀和寫,因此服務函數必須通過向srcpnd和intpnd中相應位寫入“1”來清除中斷請求條件。3.6.4 中斷屏蔽寄存器通過中斷屏蔽寄存器的哪個屏蔽位被置1可以知道哪個中斷被禁止。如果intmsk的某個屏蔽位

22、為0,此中斷將會被正常服務。如果中斷源產生了一個請求,srcpnd中的源請求位被置位,即使相應屏蔽位為1。3.7 實驗詳解中斷控制器有5個控制寄存器:源請求寄存器、中斷模式寄存器、屏蔽寄存器、優(yōu)先級寄存器和中斷請求寄存器。所有中斷請求首先寄存入srcpnd,它們基于中斷模式寄存器分為兩組:fiq請求和irq請求。多irq的仲裁過程基于優(yōu)先級寄存器。3.7.1 源請求寄存器srcpndsrcpnd由32位組成,每一位與一個中斷源相關。如果某個中斷源產生中斷請求并等待中斷服務,某位將會被置1。相應地,寄存器也指出了哪個中斷源在請求服務。注意srcpnd中的每個位是由中斷源自動置位的,與intmas

23、k寄存器無關。此外,srcpnd寄存器不會被優(yōu)先級邏輯影響。在中斷服務函數中必須清零srcpnd的相應位,否則,中斷控制器會認為同一個源的另一個中斷,換句話說,如果srcpnd的某個位仍然為1,中斷控制器會認為又有一個有效的新的中斷在請求服務。清零相應位的時機由用戶需求決定。如果想要從同一個中斷源接收另外一個有效的中斷,應該在剛進入isr的時候清零,然后使能中斷。可以通過向srcpnd寫入數據來清零某位,但是注意只有srcpnd中為1的位會被寫成寫入數據中的位,而srcpnd中為0的位不會改變(如圖3.3)。圖3.33.7.2 中斷模式寄存器intmod此寄存器由32個對應每個中斷源的位組成。

24、如果某位被置1,相應的中斷被設置為fiq模式,否則,設置為irq模式。注意:只有1個中斷源能夠被設置為fiq模式,因此intmod中只有1位能被置1。3.7.3 中斷屏蔽寄存器intmsk每個中斷源對應一個位,如果某位被置1,cpu不會響應相應的中斷請求(意即使這種情況下,srcpnd的位還是會置1),位置0,相應中斷請求可以被響應。相關圖見圖3.4、圖3.5和圖3.6。圖3.4圖3.5圖3.63.7.4 中斷請求寄存器intpnd每個位顯示了相應的中斷請求(沒有被屏蔽并等待中斷服務)是否具有最高的優(yōu)先級。由于intpnd寄存器處于優(yōu)先級邏輯之后,只有1位能被置1,只有這個中斷請求向cpu產生

25、irq中斷。在中斷服務程序中,可以通過讀此寄存器來知道哪個中斷源正在被服務。同srcpn d寄存器一樣,寄存器必須在中斷服務程序中清零(srcpnd清零之后)。每個中斷源對應一個位,如果某位被置1,cpu不會響應相應的中斷請求,如果被置0,相應中斷請求可以被響應。(見圖3.7)圖3.7注意:1、如果fiq模式中斷發(fā)生,intpnd的相應位不會turn on,因為intpnd寄存器僅在irq模式下有效。2、清除intpnd寄存器時的注意事項:intpnd寄存器通過寫1來清零某位。如果某位從1寫成0,intpnd寄存器和intoffset寄存器可能有非期望值出現。因此,請不要向intpnd寄存器中

26、為1的位寫入0,最方便的清除intpnd寄存器的方法就是向intpnd寄存器中寫入當前intpnd寄存器的值如:intpnd=intpnd。3.7.5 中斷偏移寄存器intoffsetintoffset寄存器中的值表示哪個中斷請求在intpnd寄存器之中。此位將會在清零srcpnd和intpnd之后自動清零。注意:fiq中斷不影響此寄存器,因為它只在irq模式下有效。3.7.6 子中斷源請求寄存器subsrcpnd可以通過向subsrcpnd寫入數據來清零某位,但是注意只有subsrcpnd中為1的位會被寫成寫入數據中的位,而subsrcpnd中為0的位不會改變。圖3.8顯示了寄存器的相關位。

27、圖3.83.7.7 子中斷屏蔽寄存器intsubmsk此寄存器有11位,每一位對應一個中斷源,如果某位被置1,說明此位對應的中斷請求不被cpu響應(注意即使在這種情況下,subsrcpnd寄存器還是被置1的),如果屏蔽位為0,則相應中斷請求能被響應。圖3.9四、程序流程該程序的流程是,按下程序啟動后,初始化定時器1,設定定時器的中斷時間,然后,等待定時器中斷,當定時器中斷到來時,就會進入定時器中斷服務子程序,而中斷服務子程序會把led1和led2燈熄滅或點亮,從現象中看到led1和led2 燈忽閃一次,則說明定時器發(fā)生了一次中斷。最后,關閉中斷請求,等待下一次的中斷的到來。為使cpu響應中斷,

28、在中斷服務子程序執(zhí)行之前,必須打開arm920t的cpsr中的i位,以及相應的中斷屏蔽寄存器中的位。5程序流程圖如下:開始初始化while循環(huán)等待定時器中斷產生led中斷服務子程序關閉定時器中斷圖4.1程序流程圖五、主要源代碼5.1 主函數設計主函數就是通過一個while(1)死循環(huán)來等待中斷的發(fā)生#include #include .incconfig.hvoid main(void)target_init(); /完成目標板的初始化while(1); /while函數死循環(huán)等待外部中斷的發(fā)生5.2 定時器中斷初始化程序void timer1int_init(void)/定時器接口使能 if

29、 (rintpnd & bit_timer1) rsrcpnd |= bit_timer1; pisr_timer1 = (int)timer1_isr; rintmsk &= (bit_timer1); /開中斷 5.3 定時器初始化程序void timer1_init(void) rgpgcon = rgpgcon & 0xfff0ffff | 0x00050000; /配置gpg口為信號輸出 rgpgdat = rgpgdat | 0x300; rtcfg0 = 255; / prescaler0=255 rtcfg1 = 0 4; rtcntb1 = 48828; / 在pclk=50mhz下,1秒鐘的記數值rtcntb1 = 50000000 / 4 / 256 = 48828; rtcmpb1 = 0x00; rtcon = (1 11) | (1 9) | (0 8); /禁用定時器1,手動加載 rtcon = (1 11) | (0 9) | (1 8); /啟動定時器1,自動裝載5.4 定時器中斷服務子程序int flag;void _irq

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論