(Arm硬件設(shè)計(jì)及外設(shè)驅(qū)動(dòng)編程).ppt_第1頁
(Arm硬件設(shè)計(jì)及外設(shè)驅(qū)動(dòng)編程).ppt_第2頁
(Arm硬件設(shè)計(jì)及外設(shè)驅(qū)動(dòng)編程).ppt_第3頁
(Arm硬件設(shè)計(jì)及外設(shè)驅(qū)動(dòng)編程).ppt_第4頁
(Arm硬件設(shè)計(jì)及外設(shè)驅(qū)動(dòng)編程).ppt_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、嵌入式ARM系統(tǒng)設(shè)計(jì)與開發(fā),第五講 Arm硬件設(shè)計(jì)及外設(shè)驅(qū)動(dòng)編程,基于ARM的芯片多數(shù)為復(fù)雜的片上系統(tǒng),這種復(fù)雜系統(tǒng)里的多數(shù)硬件模塊都是可配置的,需要由軟件來設(shè)置其需要的工作狀態(tài)。因此在用戶的應(yīng)用程序之前,需要由專門的一段代碼來完成對(duì)系統(tǒng)的初始化。由于這類代碼直接面對(duì)處理器內(nèi)核和硬件控制器進(jìn)行編程,一般都是用匯編語言。一般通用的內(nèi)容包括: 中斷向量表 初始化存儲(chǔ)器系統(tǒng) 初始化堆棧 初始化有特殊要求的斷口,設(shè)備 初始化用戶程序執(zhí)行環(huán)境 改變處理器模式 呼叫主應(yīng)用程序,ARM啟動(dòng)代碼分析,1. 中斷向量表 ARM要求中斷向量表必須放置在從0地址開始,連續(xù)8X4字節(jié)的空間內(nèi)。每當(dāng)一個(gè)中斷發(fā)生以后,A

2、RM處理器便強(qiáng)制把PC指針置為向量表中對(duì)應(yīng)中斷類型的地址值。因?yàn)槊總€(gè)中斷只占據(jù)向量表中1個(gè)字的存儲(chǔ)空間,只能放置一條ARM指令,使程序跳轉(zhuǎn)到存儲(chǔ)器的其他地方,再執(zhí)行中斷處理。中斷向量表的程序?qū)崿F(xiàn)通常如下表示: AREA Boot ,CODE, READONLY ENTRY B ResetHandler B UndefHandler B SWIHandler B PreAbortHandler B DataAbortHandler B B IRQHandler B FIQHandler 其中關(guān)鍵字ENTRY是指定編譯器保留這段代碼,因?yàn)榫幾g器可能會(huì)認(rèn)為這是一段亢余代碼而加以優(yōu)化。鏈接的時(shí)候要確保

3、這段代碼被鏈接在0地址處,并且作為整個(gè)程序的入口。,2. 初始化存儲(chǔ)器系統(tǒng)(1)存儲(chǔ)器類型和時(shí)序配置 通常Flash和SRAM同屬于靜態(tài)存儲(chǔ)器類型,可以合用同一個(gè)存儲(chǔ)器端口;而DRAM因?yàn)橛袆?dòng)態(tài)刷新和地址線復(fù)用等特性,通常配有專用的存儲(chǔ)器端口。 存儲(chǔ)器端口的接口時(shí)序優(yōu)化是非常重要的,這會(huì)影響到整個(gè)系統(tǒng)的性能。因?yàn)橐话阆到y(tǒng)運(yùn)行的速度瓶頸都存在于存儲(chǔ)器訪問,所以存儲(chǔ)器訪問時(shí)序應(yīng)盡可能的快;而同時(shí)又要考慮到由此帶來的穩(wěn)定性問題。(2)存儲(chǔ)器地址分布 一種典型的情況是啟動(dòng)ROM的地址重映射。,3. 初始化堆棧 因?yàn)锳RM有7種執(zhí)行狀態(tài),每一種狀態(tài)的堆棧指針寄存器(SP)都是獨(dú)立的。因此,對(duì)程序中需要用

4、到的每一種模式都要給SP定義一個(gè)堆棧地址。方法是改變狀態(tài)寄存器內(nèi)的狀態(tài)位,使處理器切換到不同的狀態(tài),讓后給SP賦值。注意:不要切換到User模式進(jìn)行User模式的堆棧設(shè)置,因?yàn)檫M(jìn)入U(xiǎn)ser模式后就不能再操作CPSR回到別的模式了,可能會(huì)對(duì)接下去的程序執(zhí)行造成影響。 這是一段堆棧初始化的代碼示例,其中只定義了三種模式的SP指針: MRS R0,CPSR BIC R0,R0,#MODEMASK 安全起見,屏蔽模式位以外的其他位 ORR R1,R0,#IRQMODE MSR CPSR_cxfs,R1 LDR SP,=UndefStack ORR R1,R0,#FIQMODE MSR CPSR_cxs

5、f,R1 LDR SP,=FIQStack ORR R1,R0,#SVCMODE MSR CPSR_cxsf,R1 LDR SP,=SVCStack,4. 初始化有特殊要求的端口,設(shè)備 5. 初始化應(yīng)用程序執(zhí)行環(huán)境 映像一開始總是存儲(chǔ)在ROMFlash里面的,其RO部分即可以在ROMFlash里面執(zhí)行,也可以轉(zhuǎn)移到速度更快的RAM中執(zhí)行;而RW和ZI這兩部分是必須轉(zhuǎn)移到可寫的RAM里去。所謂應(yīng)用程序執(zhí)行環(huán)境的初始化,就是完成必要的從ROM到RAM的數(shù)據(jù)傳輸和內(nèi)容清零。 下面是在ADS下,一種常用存儲(chǔ)器模型的直接實(shí)現(xiàn): LDR r0,=|Image$RO$Limit| 得到RW數(shù)據(jù)源的起始地址

6、LDR r1,=|Image$RW$Base| RW區(qū)在RAM里的執(zhí)行區(qū)起始地址 LDR r2,=|Image$ZI$Base| ZI區(qū)在RAM里面的起始地址 CMP r0,r1 比較它們是否相等 BEQ %F1 0 CMP r1,r3 LDRCC r2,r0,#4 STRCC r2,r1,#4 BCC %B0 1 LDR r1,=|Image$ZI$Limit| MOV r2,#0 2 CMP r3,r1 STRCC r2,r3,#4 BCC %B2,程序?qū)崿F(xiàn)了RW數(shù)據(jù)的拷貝和ZI區(qū)域的清零功能。其中引用到的4個(gè)符號(hào)是由鏈接器第一輸出的。 |Image$RO$Limit|:表示RO區(qū)末地址后

7、面的地址,即RW數(shù)據(jù)源的起始地址 |Image$RW$Base|:RW區(qū)在RAM里的執(zhí)行區(qū)起始地址,也就是編譯器選項(xiàng)RW_Base指定的地址 |Image$ZI$Base|:ZI區(qū)在RAM里面的起始地址 |Image$ZI$Limit|:ZI區(qū)在RAM里面的結(jié)束地址后面的一個(gè)地址 程序先把ROM里|Image$RO$Limt|開始的RW初始數(shù)據(jù)拷貝到RAM里面|Image$RW$Base|開始的地址,當(dāng)RAM這邊的目標(biāo)地址到達(dá)|Image$ZI$Base|后就表示RW區(qū)的結(jié)束和ZI區(qū)的開始,接下去就對(duì)這片ZI區(qū)進(jìn)行清零操作,直到遇到結(jié)束地址|Image$ZI$Limit|,6. 改變處理器模式

8、 因?yàn)樵诔跏蓟^程中,許多操作需要在特權(quán)模式下才能進(jìn)行(比如對(duì)CPSR的修改),所以要特別注意不能過早的進(jìn)入用戶模式。 內(nèi)核級(jí)的中斷使能也可以考慮在這一步進(jìn)行。如果系統(tǒng)中另外存在一個(gè)專門的中斷控制器,這么做總是安全的。 7. 呼叫主應(yīng)用程序 當(dāng)所有的系統(tǒng)初始化工作完成之后,就需要把程序流程轉(zhuǎn)入主應(yīng)用程序。最簡(jiǎn)單的一種情況是: IMPORT main B main 直接從啟動(dòng)代碼跳轉(zhuǎn)到應(yīng)用程序的主函數(shù)入口,當(dāng)然主函數(shù)名字可以由用戶隨便定義。 在ARM ADS環(huán)境中,還另外提供了一套系統(tǒng)級(jí)的呼叫機(jī)制。 IMPORT _main B _main _main()是編譯系統(tǒng)提供的一個(gè)函數(shù),負(fù)責(zé)完成庫函數(shù)

9、的初始化和初始化應(yīng)用程序執(zhí)行環(huán)境,最后自動(dòng)跳轉(zhuǎn)到main()函數(shù)。,中斷服務(wù)程序,1 中斷的基本概念 所謂中斷是指CPU對(duì)系統(tǒng)中或系統(tǒng)外發(fā)生的某個(gè)事件的一種響應(yīng)過程,即CPU暫時(shí)停止現(xiàn)行程序的執(zhí)行,而自動(dòng)轉(zhuǎn)去執(zhí)行預(yù)先安排好的處理該事件的服務(wù)子程序。當(dāng)處理結(jié)束后,再返回到被暫停程序的斷點(diǎn)處,繼續(xù)執(zhí)行原來的程序。實(shí)現(xiàn)這種中斷功能的硬件系統(tǒng)和軟件系統(tǒng)統(tǒng)稱為中斷系統(tǒng)。 中斷系統(tǒng)是計(jì)算機(jī)的重要組成部分。實(shí)時(shí)控制、故障自動(dòng)處理時(shí)往往用到中斷系統(tǒng),計(jì)算機(jī)與外部設(shè)備間傳送數(shù)據(jù)及實(shí)現(xiàn)人機(jī)聯(lián)系也常常采用中斷方式。,中斷系統(tǒng)需要解決以下基本問題: (1) 中斷源:中斷請(qǐng)求信號(hào)的來源。包括中斷請(qǐng)求信號(hào)的產(chǎn)生及該信號(hào)怎

10、樣被CPU有效地識(shí)別。而且要求中斷請(qǐng)求信號(hào)產(chǎn)生一次,只能被CPU接收處理一次,即不能一次中斷申請(qǐng)被CPU多次響應(yīng)。這就涉及到中斷請(qǐng)求信號(hào)的及時(shí)撤除問題。 (2) 中斷響應(yīng)與返回:CPU采集到中斷請(qǐng)求信號(hào)后,怎樣轉(zhuǎn)向特定的中斷服務(wù)子程序及執(zhí)行完中斷服務(wù)子程序怎樣返回被中斷的程序繼續(xù)正確地執(zhí)行。中斷響應(yīng)與返回的過程中涉及到CPU響應(yīng)中斷的條件、現(xiàn)場(chǎng)保護(hù)等問題。,(3) 優(yōu)先級(jí)控制:一個(gè)計(jì)算機(jī)應(yīng)用系統(tǒng),特別是計(jì)算機(jī)實(shí)時(shí)測(cè)控應(yīng)用系統(tǒng),往往有多個(gè)中斷源,各中斷源所要求的處理具有不同的輕重、緩急程度。與人處理問題的思路一樣,希望重要緊急的事件先處理,而且如果當(dāng)前處于正在處理某個(gè)事件的過程中,有更重要、更緊

11、急的事件到來,就應(yīng)當(dāng)暫停當(dāng)前事件的處理,轉(zhuǎn)去處理新事件。這就是中斷系統(tǒng)優(yōu)先級(jí)控制所要解決的問題。中斷優(yōu)先級(jí)的控制形成了中斷嵌套。,中斷系統(tǒng)結(jié)構(gòu),執(zhí)行主程序,主程序,繼續(xù)執(zhí)行主程序,斷點(diǎn),中斷請(qǐng)求,中斷響應(yīng),執(zhí)行中斷處理程序,中斷返回,引起CPU中斷的根源,稱為中斷源。中斷源向CPU提出的中斷請(qǐng)求。CPU暫時(shí)中斷原來的事務(wù)A,轉(zhuǎn)去處理事件B。對(duì)事件B處理完畢后,再回到原來被中斷的地方(即斷點(diǎn)),稱為中斷返回。實(shí)現(xiàn)上述中斷功能的部件稱為中斷系統(tǒng)(中斷機(jī)構(gòu))。,隨著計(jì)算機(jī)技術(shù)的應(yīng)用,人們發(fā)現(xiàn)中斷技術(shù)不僅解決了快速主機(jī)與慢速I/O設(shè)備的數(shù)據(jù)傳送問題,而且還具有如下優(yōu)點(diǎn):,分時(shí)操作。CPU可以分時(shí)為多個(gè)

12、I/O設(shè)備服務(wù),提高了計(jì)算機(jī)的利用率;,實(shí)時(shí)響應(yīng)。CPU能夠及時(shí)處理應(yīng)用系統(tǒng)的隨機(jī)事件,系統(tǒng)的實(shí)時(shí)性大大增強(qiáng);,可靠性高。CPU具有處理設(shè)備故障及掉電等突發(fā)性事件能力,從而使系統(tǒng)可靠性提高。,1 嵌入式ARM的中斷系統(tǒng) ARM處理器異常中斷處理概述 當(dāng)異常中斷發(fā)生時(shí),系統(tǒng)執(zhí)行完當(dāng)前指令后,將跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。當(dāng)異常中斷處理程序執(zhí)行完成后,程序返回到發(fā)生中斷的指令的下一條指令 處執(zhí)行。在進(jìn)入異常中斷處理程序時(shí),要保存被中斷的程序的執(zhí)行現(xiàn)場(chǎng)。從異常中斷處理程序退出時(shí),要恢復(fù)被中斷的程序的執(zhí)行現(xiàn)場(chǎng)。 ARM體系中通常在存儲(chǔ)地址的低端固化了一個(gè)32字節(jié)的硬件中斷向量表,用來指定各異常

13、中斷及其處理程序的對(duì)應(yīng)關(guān)系。當(dāng)一個(gè)異常出現(xiàn)以后,ARM微處理器會(huì)執(zhí)行以下幾步操作: 1)保存處理器當(dāng)前狀態(tài)、中斷屏蔽位以及各條件標(biāo)志位;2)設(shè)置當(dāng)前程序狀態(tài)寄存器CPSR中相應(yīng)的位;3)將寄存器lr_mode設(shè)置成返回地址;4)將程序計(jì)數(shù)器(PC)值設(shè)置成該異常中斷的中斷向量地址,從而跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。,在接收到中斷請(qǐng)求以后, ARM處理器內(nèi)核會(huì)自動(dòng)執(zhí)行以上四步,程序計(jì)數(shù)器PC總是跳轉(zhuǎn)到相應(yīng)的固定地址。 從異常中斷處理程序中返回包括下面兩個(gè)基本操作:1)恢復(fù)被屏蔽的程序的處理器狀態(tài);2)返回到發(fā)生異常中斷的指令的下一條指令處繼續(xù)執(zhí)行。當(dāng)異常中斷發(fā)生時(shí),程序計(jì)數(shù)器PC所指的位置

14、對(duì)于各種不同的異常中斷是不同的,同樣,返回地址對(duì)于各種不同的異常中斷也是不同的。例外的是,復(fù)位異常中斷處理程序不需要返回,因?yàn)檎麄€(gè)應(yīng)用系統(tǒng)是從復(fù)位異常中斷處理程序開始執(zhí)行的。,解析程序的概念和作用 如前所述,ARM處理器響應(yīng)中斷的時(shí)候,總是從固定的地址開始的,而在高級(jí)語言環(huán)境下開發(fā)中斷服務(wù)程序時(shí),無法控制固定地址開始的跳轉(zhuǎn)流程。為了使得上層 應(yīng)用程序與硬件中斷跳轉(zhuǎn)聯(lián)系起來,需要編寫一段中間的服務(wù)程序來進(jìn)行連接。這樣的服務(wù)程序常被稱作中斷解析程序。 每個(gè)異常中斷對(duì)應(yīng)一個(gè)4字節(jié)的空間,正好放置一條跳轉(zhuǎn)指令或者向PC寄存器賦值的數(shù)據(jù)訪問指令。理論上可以通過這兩種指令直接使得程序跳轉(zhuǎn)到對(duì)應(yīng)的中斷處理程

15、序中去。但實(shí)際上由于函數(shù)地址值為未知和其它一些問題,并不這么做。這里給出一種常用的中斷跳轉(zhuǎn)流程:,這個(gè)流程中的關(guān)鍵部分是中斷向量表,為了讓解析程序能找到向量表,應(yīng)該將向量表的地址固定化(編程者自定義)。這樣,整個(gè)跳轉(zhuǎn)流程的所有程序地址都是固定 的,當(dāng)中斷觸發(fā)后,就可以自動(dòng)運(yùn)行。其中,只有向量表的內(nèi)容是可變的,編程者只要在向量表中填入正確的目標(biāo)地址值就可以了。這使得上層中斷處理程序和底層 硬件跳轉(zhuǎn)有機(jī)地聯(lián)系起來。解析過程示例 以一次IRQ跳轉(zhuǎn)為例,假定中斷向量表定義在0 x00400000開始的外部RAM空間:,圖中實(shí)線表示的流程都用ARM匯編語言編寫,一般作為boot代碼的一部分放在系統(tǒng)的底層

16、模塊中。填寫向量表的操作可以在上層應(yīng)用程序中方便地實(shí)現(xiàn),比如在C語言中:*( int *(0 x00400018) = (int) ISR_IRQ; 這樣就將IRQ中斷的服務(wù)程序入口地址(0 x00300260)填寫到中斷向量表中的固定地址0 x00400018開始的4字節(jié)空間了。 如此一來,就可避免在應(yīng)用程序中計(jì)算中斷的跳轉(zhuǎn)地址,并且可以很方便的選擇不同的函數(shù)作為指定中斷的服務(wù)程序。當(dāng)然,在程序開發(fā)時(shí)要合理開辟好向量表,避免對(duì)向量表地址空間不必要的寫操作。,向量中斷的處理 一些處理器在設(shè)計(jì)外擴(kuò)的中斷控制器時(shí)提供了一種叫做“向量中斷”的中斷跳轉(zhuǎn)機(jī)制。這與前文敘述的擴(kuò)展解析跳轉(zhuǎn)流程有所不同,它不需要軟件來識(shí)別具體的中斷 源,也就是不需要添加圖3中的IRQ/FIQ服務(wù)程序,而完全由硬件自動(dòng)跳轉(zhuǎn)到對(duì)應(yīng)的中斷地址。其它跳轉(zhuǎn)流程的原理都是一樣的。這相當(dāng)于擴(kuò)展了A

溫馨提示

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

評(píng)論

0/150

提交評(píng)論