ARM學習中的必知基本常識

weixin_34194087發表於2017-08-06

1.ARM中一些常見英文縮寫解釋

MSB:最高有效位;

LSB:最低有效位;

AHB:先進的高效能匯流排;

VPB:連線片內外設功能的VLSI外設匯流排;

EMC:外部儲存器控制器;

MAM:儲存器加速模組;

VIC:向量中斷控制器;

SPI:全雙工序列介面;

CAN:控制器區域網,一種序列通訊協議;

PWM:脈寬調製器;

ETM:嵌入式跟蹤巨集;

CPSR:當前程式狀態暫存器;

SPSR:程式保護狀態暫存器;

2.MAM 使用注意事項:

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

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

3.VIC 使用注意事項

答:如果在片內RAM當中執行程式碼並且應用程式需要呼叫中斷,那麼必須將中斷向量重新對映到Flash地址0x0。這樣做是因為所有的異常向量都位於地址0x0及以上。通過將暫存器MEMMAP(位於系統控制模組當中)配置為使用者RAM模式來實現這一點。使用者程式碼被連線以便使中斷向量表裝載到0x4000 0000。

4. ARM啟動程式碼設計

答:ARM啟動程式碼直接面對處理器核心和硬體控制器進行程式設計,一般使用匯編語言。啟動程式碼一般包括:

        中斷向量表

        初始化儲存器系統

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

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

        改變處理器模式

        呼叫主應用程式

5.IRQ 和 FIQ 之間的區別

答:IRQ和FIQ是ARM處理器的兩種程式設計模式。IRQ是指中斷模式,FIR是指快速中斷模式。對於 FIQ 你必須儘快處理你的事情並離開這個模式。IRQ 可以被 FIQ 所中斷,但 IRQ 不能中斷 FIQ。為了使 FIQ 更快,所以這種模式有更多的影子暫存器。FIQ 不能呼叫 SWI(軟體中斷)。FIQ 還必須禁用中斷。如果一個 FIQ 例程必須重新啟用中斷,則它太慢了,並應該是 IRQ 而不是 FIQ。

6.ARM處理器對異常中斷的響應過程

答:

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

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

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

將暫存器lr_mode設定成返回地址;

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

7.ARM指令與Thumb指令的區別

答:在ARM體系結構中,ARM指令集中的指令是32位的指令,其執行效率很高。對於儲存系統資料匯流排為16位的應用系統,ARM體系提供了Thumb指令集。Thumb指令集是對ARM指令集的一個子集重新編碼得到的,指令長度為16位。通常在處理器執行ARM程式時,稱處理器處於ARM狀態;當處理器執行Thumb程式時,稱處理器處於Thumb狀態。Thumb指令集並沒有改變ARM體系地層的程式設計模型,只是在該模型上加上了一些限制條件。Thumb指令集中的資料處理指令的運算元仍然為32位,指令定址地址也是32位的。

8.什麼是ATPCS

答:為了使單獨編譯的C語言程式和彙編程式之間能夠相互呼叫,必須為子程式之間的呼叫規定一定的規則。ATPCS就是ARM程式和Thumb程式中子程式呼叫的基本規則。這些規則包括暫存器使用規則,資料棧的使用規則,引數的傳遞規則等。

9.ARM程式和Thumb程式混合使用的場合

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

強調速度的場合,應該使用ARM程式;

有些功能只能由ARM程式完成。如:使用或者禁止異常中斷;

當處理器進入異常中斷處理程式時,程式狀態切換到ARM狀態,即在異常中斷處理程式入口的一些指令是ARM指令,然後根據需要程式可以切換到Thumb狀態,在異常中斷程式返回前,程式再切換到ARM狀態。

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

10.ARM處理器執行模式

答:

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

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

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

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

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

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

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

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

11.ARM體系結構所支援的異常型別

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

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

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

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

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

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

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

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

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

12.ARM體系結構的儲存器格式

答:

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

大端格式:字資料的高位元組儲存在低地址中,字資料的低位元組存放在高地址中;

小端格式:與大端儲存格式相反,高地址存放資料的高位元組,低地址存放資料的低位元組。

13.ARM暫存器總結:

ARM有16個32位的暫存器(r0到r15)。

r15充當程式暫存器PC,r14(link register)儲存子程式的返回地址,r13儲存的是堆疊地址。

ARM有一個當前程式狀態暫存器:CPSR。

一些暫存器(r13,r14)在異常發生時會產生新的instances,比如IRQ處理器模式,這時處理器使用r13_irq和r14_irq

ARM的子程式呼叫是很快的,因為子程式的返回地址不需要存放在堆疊中。

14.儲存器重新對映(Remap)的原因:

使Flash儲存器中的FIQ處理程式不必考慮因為重新對映所導致的儲存器邊界問題;

用來處理程式碼空間中段邊界仲裁的SRAM和Boot Block向量的使用大大減少;

為超過單字轉移指令範圍的跳轉提供空間來儲存常量。

ARM中的重對映是指在程式執行過程中通過寫某個功能暫存器位操作達到重新分配其儲存器地址空間的對映。一個典型的應用就是應用程式儲存在Flash/ROM中,初始這些儲存器地址是從0開始的,但這些儲存器的讀時間比SRAM/DRAM長,造成其內部執行頻率不高,故一般在前面一段程式將程式碼搬移到SRAM/DRAM中去,然後重新對映儲存器空間,將相應SRAM/DRAM對映到地址0,重新執行程式可達到高速執行的目的。

15.儲存異常向量表中程式跳轉使用LDR指令,而不使用B指令的原因:

LDR指令可以全地址範圍跳轉,而B指令只能在前後32MB範圍內跳轉;

晶片具有Remap功能。當向量表位於內部RAM或外部儲存器中,用B指令不能跳轉到正確的位置。

16.鎖相環(PLL)注意要點:

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

PLL只能通過軟體使能;

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

PLL如果設定不當將會導致晶片的錯誤操作。

17.ARM7與ARM9的區別:

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更高,採用哈佛結構區分了資料匯流排和指令匯流排。

18.VIC的基本操作如下:

答:設定IRQ/FIQ中斷,若是IRQ中斷則可以設定為向量中斷並分配中斷優先順序,否則為非向量IRQ。然後可以設定中斷允許,以及向量中斷對應地址或非向量中斷預設地址。當有中斷後,若是IRQ中斷,則可以讀取向量地址暫存器,然後跳轉到相應的程式碼。當要退出中斷時,對向量地址暫存器寫0,通知VIC中斷結束。當發生中斷時,處理器將會切換處理器模式,同時相關的暫存器也將會對映。

19.使用外部中斷注意

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

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

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

20.UART0的基本操作方法

設定I/O連線到UART0;

設定串列埠波特率(U0DLM、U0DLL);

設定串列埠工作模式(U0LCR、U0FCR);

傳送或接收資料(U0THR、U0RBR);

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

21.I2C的基本操作方法

答:I2C主機基本操作方法:

        設定I2C管腳連線;

        設定I2C時鐘速率(I2SCLH、I2SCLL);

        設定為主機,併傳送起始訊號(I2CONSET的I2EN、STA位為1,AA位為0);

        傳送從機地址(I2DAT),控制I2CONSET傳送;

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

        傳送結束訊號(I2CONSET)。

  I2C從機基本操作方法:

        設定I2C管腳連線;

        設定自身的從機地址(I2ADR);

        使能I2C(I2CONSET的I2EN、AA位為1);

        判斷SI位或等待I2C中斷,等待主機操作;

        判斷匯流排狀態I2STAT,進行資料傳輸控制。

22.  PWM基本操作方法:

連線PWM功能管腳輸出,即設定PINSEL0、PINSEL1;

設定PWM定時器的時鐘分頻值(PWMPR),得到所要的定時器時鐘;

設定比較匹配控制(PWMMCR),並設定相應比較值(PWMMRx);

設定PWM輸出方式並允許PWM輸出(PWMPCR)及鎖存使能控制(PWMLER);

設定PWMTCR,啟動定時器,使能PWM;

執行過程中要更改比較值時,更改之後要設定鎖存使能。

使用雙邊沿PWM輸出時,建議使用PWM2、PWM4、PWM6;使用單邊PWM輸出時,在PWM週期開始時為高電平,匹配後為低電平,使用PWMMR0作為PWM週期控制,PWMMRx作為佔空比控制。

相關文章