入門ARM必須要理解的22個常用概念

2021-10-06 13:55:26 字數 4693 閱讀 5778

入門arm

文章羅列了關於arm的22個常用概念。包括一些使用注意事項、arm啟動**設計、arm處理器執行模式、arm體系結構所支援的異常型別和一些基本操作方法等等。

當改變mam定時值時,必須先通過向mamcr寫入0來關閉mam,然後將新值寫入mamtim。最後,將需要的操作模式的對應值寫入mamcr,再次開啟mam。

對於低於20mhz的系統時鐘,mamtim設定為001。對於20mhz到40mhz之間的系統時鐘,建議將flash訪問時間設定為2cclk,而在高於40mhz的系統時鐘下,建議使用3cclk。

如果在片內ram當中執行**並且應用程式需要呼叫中斷,那麼必須將中斷向量重新對映到flash位址0x0。

這樣做是因為所有的異常向量都位於位址0x0及以上。通過將暫存器memmap(位於系統控制模組當中)配置為使用者ram模式來實現這一點。使用者**被連線以便使中斷向量表裝載到0x4000 0000。

arm啟動**直接面對處理器核心和硬體控制器進行程式設計,一般使用組合語言。啟動**一般包括:

中斷向量表

初始化儲存器系統

初始化堆疊初始化有特殊要求的埠、裝置

初始化使用者程式執行環境

改變處理器模式

呼叫主應用程式

irq和fiq是arm處理器的兩種程式設計模式。irq是指中斷模式,fir是指快速中斷模式。對於fiq你必須盡快處理你的事情並離開這個模式。irq可以被fiq所中斷,但irq不能中斷fiq。

為了使fiq更快,所以這種模式有更多的影子暫存器。fiq不能呼叫swi(軟體中斷)。fiq還必須禁用中斷。如果乙個fiq例程必須重新啟用中斷,則它太慢了,並應該是irq而不是fiq。

arm處理器對異常中斷的響應過程如下所述:

儲存處理器當前狀態、中斷遮蔽位以及各條件標誌位

設定當前程式狀態暫存器cpsr中的相應位

將暫存器lr_mode設定成返回位址

將程式計數器值pc,設定成該異常中斷的中斷向量位址,跳轉到相應異常中斷處執行

在arm體系結構中,arm指令集中的指令是32位的指令,其執行效率很高。對於儲存系統資料匯流排為16位的應用系統,arm體系提供了thumb指令集。thumb指令集是對arm指令集的乙個子集重新編碼得到的,指令長度為16位。

通常在處理器執行arm程式時,稱處理器處於arm狀態;當處理器執行thumb程式時,稱處理器處於thumb 狀態。thumb指令集並沒有改變arm體系底層的程式設計模型,只是在該模型上加上了一些限制條件。thumb指令集中的資料處理指令的運算元仍然為32位,指令定址位址也是32位的。

為了使單獨編譯的c語言程式和匯程式設計序之間能夠相互呼叫,必須為子程式之間的呼叫規定一定的規則。atpcs就是arm程式和thumb程式中子程式呼叫的基本規則。這些規則包括暫存器使用規則,資料棧的使用規則,引數的傳遞規則等。

通常,thumb程式比arm程式更加緊湊,而且對於記憶體為8位或16位的系統,使用thumb程式效率更高。但是,在下面一些場合下,程式必須執行在arm狀態,這時就需要混合使用arm和thumb程式。

強調速度的場合,應該使用arm程式;有些功能只能由arm程式完成。如:使用或者禁止異常中斷;當處理器進入異常中斷處理程式時,程式狀態切換到arm狀態,即在異常中斷處理程式入口的一些指令是arm指令,然後根據需要程式可以切換到thumb狀態,在異常中斷程式返回前,程式再切換到arm狀態。

arm處理器總是從arm狀態開始執行。因而,如果要在偵錯程式中執行thumb程式,必須為該thumb程式新增乙個arm程式頭,然後再切換到thumb狀態,執行thumb程式。

arm微處理器支援7種執行模式,分別為:

使用者模式(usr):arm處理器正常的程式執行狀態

快速中斷模式(fiq):用於高速資料傳輸或通道管理

外部中斷模式(irq):用於通用的中斷處理

管理模式(svc):作業系統使用的保護模式

資料訪問終止模式(abt):當資料或指令預取終止時進入該模式,用於虛擬儲存及儲存保護

系統模式(sys):執行具有特權的作業系統任務

未定義指令中止模式(und):當未定義指令執行時進入該模式,可用於支援硬體協處理器的軟體**

arm體系結構所支援的異常和具體含義如下(圈裡面的數字表示優先順序):

復位①:當處理器的復位電平有效時,產生復位異常,程式跳轉到復位異常處執行(異常向量:0x0000,0000)

資料中止②:若處理器資料訪問的指令的位址不存在,或該位址不允許當前指令訪問,產生資料中止異常(異常向量:0x0000,0010)

fiq③(快速中斷請求):當處理器的快速中斷請求引腳有效,且cpsr中的f位為0時,產生fiq異常(異常向量:0x0000,001c)。

irq④(外部中斷請求):當處理器的外部中斷請求引腳有效,且cpsr中的i位為0時,產生irq異常。系統的外設可以該異常請求中斷服務(異常向量:0x0000,0018)

指令預取中止⑤:若處理器的預取指令的位址不存在,或該位址不允許當前指令訪問,儲存器會向處理器發出中止訊號,當預取指令被執行時,才會產生指令預取中止異常(異常向量:0x0000,000c)

未定義指令⑥:當arm處理器或協處理器遇到不能處理的指令時,產生為定義異常。可使用該異常機制進行軟體**(異常向量:0x0000,0004)

軟體中斷⑥:有執行swi指令產生,可用於使用者模式下程式呼叫特權操作指令。可使用該異常機制實現系統功能呼叫(異常向量:0x0000,0008)

說明:其中異常向量0x0000,0014為保留的異常向量。

arm體系結構的儲存器格式有如下兩種:

arm有16個32位的暫存器(r0到r15),r15充當程式暫存器pc,r14(link register)儲存子程式的返回位址,r13儲存的是堆疊位址。arm有乙個當前程式狀態暫存器:cpsr。

一些暫存器(r13,r14)在異常發生時會產生新的instances,比如irq處理器模式,這時處理器使用r13_irq和r14_irq。arm的子程式呼叫是很快的,因為子程式的返回位址不需要存放在堆疊中。

使flash儲存器中的fiq處理程式不必考慮因為重新對映所導致的儲存器邊界問題;用來處理**空間中段邊界仲裁的sram和boot block向量的使用大大減少;為超過單字轉移指令範圍的跳轉提供空間來儲存常量。

arm中的重對映是指在程式執行過程中通過寫某個功能暫存器位操作達到重新分配其儲存器位址空間的對映。

乙個典型的應用就是應用程式儲存在flash/rom中,初始這些儲存器位址是從0開始的,但這些儲存器的讀時間比sram/dram長,造成其內部執行頻率不高,故一般在前面一段程式將**搬移到sram /dram中去,然後重新對映儲存器空間,將相應sram/dram對映到位址0,重新執行程式可達到高速執行的目的。

ldr指令可以全位址範圍跳轉,而b指令只能在前後32mb範圍內跳轉;晶元具有remap功能。當向量表位於內部ram或外部儲存器中,用b指令不能跳轉到正確的位置。

pll在晶元復位或進入掉電模式時被關閉並旁路,在掉電喚醒後不會自動恢復pll的設定

pll只能通過軟體使能

pll在啟用後必須等待其鎖定,然後才能連線

pll如果設定不當將會導致晶元的錯誤操作

arm7核心是0.9mips/mhz的**流水線和馮s226,諾伊曼結構;arm9核心是五級流水線,提供1.1mips/mhz的哈佛結構。arm7沒有mmu,arm720t是mmu的;arm9是有mmu的,arm940t只有memory protection unit,不是乙個完整的mmu。

arm7tdmi提供了非常好的效能——功耗比。它包含了thumb指令集快速乘法指令和ice除錯技術的核心。arm9的時鐘頻率比arm7更高,採用哈佛結構區分了資料匯流排和指令匯流排。

設定irq/fiq中斷,若是irq中斷則可以設定為向量中斷並分配中斷優先順序,否則為非向量irq,然後可以設定中斷允許,以及向量中斷對應位址或非向量中斷預設位址。

當有中斷後,若是irq中斷,則可以讀取向量位址暫存器,然後跳轉到相應的**。當要退出中斷時,對向量位址暫存器寫0,通知vic中斷結束。當發生中斷時,處理器將會切換處理器模式,同時相關的暫存器也將會對映。

把某個引腳設定為外部中斷功能後,該引腳為輸入模式,由於沒有內部上拉電阻,所以必須外接乙個上拉電阻,確保引腳不被懸空

除了引腳連線模組的設定,還需要設定vic模組,才能產生外部中斷,否則外部中斷只能反映在extint暫存器中

要使器件進入掉電模式並通過外部中斷喚醒,軟體應該正確設定引腳的外部中斷功能,再進入掉電模式

設定i/o連線到uart0

設定串列埠波特率(u0dlm、u0dll)

設定串列埠工作模式(u0lcr、u0fcr)

傳送或接收資料(u0thr、u0rbr)

檢查串列埠狀態字或等待串列埠中斷(u0lsr)

設定i2c管腳連線

設定i2c時鐘速率(i2sclh、i2scll)

設定為主機,並傳送起始訊號(i2conset的i2en、sta位為1、aa位為0)

傳送從機位址(i2dat),控制i2conset傳送

判斷匯流排狀態(i2stat),進行資料傳輸控制

傳送結束訊號(i2conset)

連線pwm功能管腳輸出,即設定pinsel0、pinsel1

設定pwm定時器的時鐘分頻值(pwmpr),得到所要的定時器時鐘

設定比較匹配控制(pwmmcr),並設定相應比較值(pwmmrx)

設定pwm輸出方式並允許pwm輸出(pwmpcr)及鎖存使能控制(pwmler)

設定pwmtcr,啟動定時器,使能pwm

執行過程中要更改比較值時,更改之後要設定鎖存使能。使用雙邊沿pwm輸出時,建議使用pwm2、pwm4、pwm6;使用單邊pwm輸出時,在pwm週期開始時為高電平,匹配後為低電平,使用pwmmr0作為pwm週期控制,pwmmrx作為占空比控制。

男人必須明白的22個道理

1 男人是社會的主體,不管你信或不信。所以男人應該有種責任感。2 25歲之前,請記得,愛情通常是假的,或者不是你所想象的那樣純潔和永遠。如果你過了25歲,那麼你應該懂得這個道理.3 吃飯7成飽最舒服。對待女友最多也請你保持在7成。4 30歲之前請愛惜自己的身體,前30年你找病,後30年病找你。如果你...

男人必須明白的22個道理

1 男人是社會的主體,不管你信或不信。所以男人應該有種責任感。2 25歲之前,請記得,愛情通常是假的,或者不是你所想象的那樣純潔和永遠。如果你過了25歲,那麼你應該懂得這個道理.3 吃飯7成飽最舒服。對待女友最多也請你保持在7成。4 30歲之前請愛惜自己的身體,前30年你找病,後30年病找你。如果你...

男人必須明白的22個道理

男人必須明白的22個道理 2009年07月15日 星期三 17 45 1 男人是社會的主體,不管你信或不信。所以男人應該有種責任感。2 25歲之前,請記得,愛情通常是假的,或者不是你所想象的那樣純潔和永遠。如果你過了25歲,那麼你應該懂得這個道理。3 吃飯7成飽最舒服。對待女友最多也請你保持在7成。...