嵌入式系統(tǒng)的發(fā)展歷史:SCM→MCU→SoC
基于ARM處理器的嵌入式Linux系統(tǒng)
ARM架構(gòu)支持32位的ARM指令和16位的Thumb指令
ARM處理器系列
- T:表示支持Thumb指令集
- D:表示支持片上調(diào)試(Debug)
- M:表示內(nèi)嵌硬件乘法器(Multipler)
- I:支持片上斷點(diǎn)和調(diào)試點(diǎn)
- E:支持增強(qiáng)型DSP功能
- J:支持Jazelle技術(shù),即Java加速器
- S:表示支持全合成(full synthesizable)
常用ARM匯編指令及ATPCS規(guī)則:
相對跳轉(zhuǎn)指令:b,bl
bl的功能除了跳轉(zhuǎn)之外,還將返回地址到lr寄存器中
ldr指令從內(nèi)存讀取數(shù)據(jù)到寄存器,str指令把寄存器的值存儲到內(nèi)存中,操作數(shù)據(jù)都是32位
GPIO接口
GPIO(General Purpose I/O Ports):通用輸入輸出接口
控制存儲器
SDRAM:Synchronous Dynamic Random Access Memory,同步動態(tài)隨機(jī)存儲器,同步是指 Memory工作需要同步時鐘,內(nèi)部的命令的發(fā)送與數(shù)據(jù)的傳輸都以它為基準(zhǔn);動態(tài)是指存儲陣列需要不斷的刷新來保證數(shù)據(jù)不丟失;隨機(jī)是指數(shù)據(jù)不是線性依次存儲,而是自由指定地址進(jìn)行數(shù)據(jù)讀寫。
SDRAM原理講解
RAM(Random Access Memory)和ROM(Read Only Memory)
這里有詳細(xì)的講解:SDRAM原理(強(qiáng)烈推薦)
SDRAM的內(nèi)部是一個存儲陣列,陣列如同表格一樣,將數(shù)據(jù)“填進(jìn)去”。先指定一個行(Row),再指定一個列(Column),就可以準(zhǔn)確地找到所需要的單元格,這就是SDRAM尋址的基本原理。
匯編指令:
-
B,BL:引起處理器轉(zhuǎn)移到“子程序名”處開始執(zhí)行 -
ldr:地址讀取偽指令,條件:第二個參數(shù)前有=時。否則為內(nèi)存訪問指令,表示從內(nèi)存中讀取數(shù)據(jù)到內(nèi)存器。 -
str指令把寄存器的值存儲到內(nèi)存中。 -
ldm和stm屬于批量內(nèi)存訪問指令,只用一條指令就可以讀寫多個數(shù)據(jù)。
狀態(tài)寄存器的訪問指令
msr cpsr, r0/*復(fù)制r0到cpsr中*/
mrs r0, cpsr/*復(fù)制cpsr到r0中*/
偽指令
.extern定義一個外部符號
.text表示下面的語句屬于代碼段
.global將文本中的某個程序標(biāo)號定義為全局的
內(nèi)存管理單元MMU
內(nèi)存管理單元(Memory Management Unit)簡稱MMU,它負(fù)責(zé)虛擬地址到物理地址的映射,并提供硬件機(jī)制的內(nèi)存訪問權(quán)限檢查?,F(xiàn)代的多用戶多進(jìn)程操作系統(tǒng)通過MMU使得各個用戶進(jìn)程都有自己獨(dú)立的地址空間:地址映射功能使得個進(jìn)程擁有“看起來”一樣的地址空間,而訪問權(quán)限的檢查可以保護(hù)每個進(jìn)程所用的內(nèi)存不會被其他進(jìn)程破壞。
內(nèi)存的訪問權(quán)限檢查是MMU的主要功能之一
主要有以下兩點(diǎn):
- “域”決定是否對某塊內(nèi)存進(jìn)行權(quán)限檢查
- “AP”決定如何對某塊內(nèi)存進(jìn)行權(quán)限檢查
TLB
Translation Lookaside Buffers:轉(zhuǎn)譯查找緩存
當(dāng)CPU發(fā)出一個虛擬地址時,MMU首先訪問TLB。如果TLB中含有這個虛擬地址的描述符,則直接利用此描述符進(jìn)行地址轉(zhuǎn)換和權(quán)限檢查;否則MMU訪問頁找到描述符后再進(jìn)行地址轉(zhuǎn)換和權(quán)限檢查,并將這個描述符填入TLB中(如果TLB已滿,則利用round-robin算法找到一個條目,然后覆蓋它),下次再使用這個虛擬地址時就可以直接使用TLB中的描述符了。
Cache
基于程序訪問的局限性,在CPU通用寄存器和主存之間設(shè)置一個高速的、容量相對較小的存儲器,把正在執(zhí)行的指令地址附近的一部分指令或數(shù)據(jù)從主存調(diào)入到這個存儲器,供CPU在一段時間內(nèi)使用。
MMU實(shí)例程序流程:開始→關(guān)閉WATCHDOG→設(shè)置棧指針→初始化SDRAM→復(fù)制第二部分代碼到SDRAM中→設(shè)置頁表→啟動MMU→重設(shè)棧指針→調(diào)到0xB004000→循環(huán)點(diǎn)LED
NAND Flash控制器
NAND Flash在嵌入式系統(tǒng)中的地位與PC上的硬盤類似,用于保存系統(tǒng)運(yùn)行所必須的操作系統(tǒng)、應(yīng)用程序、與用戶數(shù)據(jù)、運(yùn)行過程中產(chǎn)生的各類數(shù)據(jù)。
Flash存儲器件的可靠性需要考慮:位反轉(zhuǎn)、壞塊、可擦除次數(shù)
操作NAND Flash時,先傳輸命令,然后傳輸?shù)刂?,最后讀/寫數(shù)據(jù),期間要檢查Flash狀態(tài)。
NAND Flash讀操作流程
選擇芯片→發(fā)出讀命令→發(fā)出地址→等待數(shù)據(jù)就緒→讀取數(shù)據(jù)→結(jié)束后,取消片選信號
中斷體系結(jié)構(gòu)
ARM體系CPU的7種工作模式:
用戶模式(usr)
快速中斷模式(fiq)
中斷模式(irq)
管理模式(svc)
數(shù)據(jù)訪問終止模式(abt)
系統(tǒng)模式(sys)
未定義指令中止模式(und)