嵌入式系統(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ào)試點
- E:支持增強型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)隨機存儲器,同步是指 Memory工作需要同步時鐘二拐,內(nèi)部的命令的發(fā)送與數(shù)據(jù)的傳輸都以它為基準鼻忠;動態(tài)是指存儲陣列需要不斷的刷新來保證數(shù)據(jù)不丟失诅病;隨機是指數(shù)據(jù)不是線性依次存儲,而是自由指定地址進行數(shù)據(jù)讀寫粥烁。
SDRAM原理講解
RAM(Random Access Memory)和ROM(Read Only Memory)
這里有詳細的講解:SDRAM原理(強烈推薦)
SDRAM的內(nèi)部是一個存儲陣列贤笆,陣列如同表格一樣,將數(shù)據(jù)“填進去”讨阻。先指定一個行(Row)芥永,再指定一個列(Column),就可以準確地找到所需要的單元格钝吮,這就是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
將文本中的某個程序標號定義為全局的
內(nèi)存管理單元MMU
內(nèi)存管理單元(Memory Management Unit)簡稱MMU次坡,它負責(zé)虛擬地址到物理地址的映射
呼猪,并提供硬件機制的內(nèi)存訪問權(quán)限檢查
』現(xiàn)代的多用戶多進程操作系統(tǒng)通過MMU使得各個用戶進程都有自己獨立的地址空間:地址映射
功能使得個進程擁有“看起來”一樣的地址空間,而訪問權(quán)限的檢查可以保護每個進程所用的內(nèi)存不會被其他進程破壞宋距。
內(nèi)存的訪問權(quán)限檢查是MMU的主要功能之一
主要有以下兩點:
- “域”決定是否對某塊內(nèi)存進行權(quán)限檢查
- “AP”決定如何對某塊內(nèi)存進行權(quán)限檢查
TLB
Translation Lookaside Buffers
:轉(zhuǎn)譯查找緩存
當(dāng)CPU發(fā)出一個虛擬地址時轴踱,MMU
首先訪問TLB
。如果TLB
中含有這個虛擬地址的描述符
谚赎,則直接利用此描述符進行地址轉(zhuǎn)換和權(quán)限檢查淫僻;否則MMU訪問頁找到描述符后再進行地址轉(zhuǎn)換
和權(quán)限檢查
,并將這個描述符填入TLB中(如果TLB已滿壶唤,則利用round-robin
算法找到一個條目雳灵,然后覆蓋它),下次再使用這個虛擬地址時就可以直接使用TLB中的描述符了视粮。
Cache
基于程序訪問的局限性,在CPU通用寄存器和主存之間設(shè)置一個高速的橙凳、容量相對較小的存儲器蕾殴,把正在執(zhí)行的指令地址附近的一部分指令或數(shù)據(jù)從主存調(diào)入到這個存儲器,供CPU在一段時間內(nèi)使用岛啸。
MMU實例程序流程:開始→關(guān)閉WATCHDOG→設(shè)置棧指針→初始化SDRAM→復(fù)制第二部分代碼到SDRAM中→設(shè)置頁表→啟動MMU→重設(shè)棧指針→調(diào)到0xB004000→循環(huán)點LED
NAND Flash控制器
NAND Flash
在嵌入式系統(tǒng)中的地位與PC上的硬盤類似钓觉,用于保存系統(tǒng)運行所必須的操作系統(tǒng)、應(yīng)用程序坚踩、與用戶數(shù)據(jù)荡灾、運行過程中產(chǎn)生的各類數(shù)據(jù)。
Flash
存儲器件的可靠性需要考慮:位反轉(zhuǎn)瞬铸、壞塊批幌、可擦除次數(shù)
操作NAND Flash
時,先傳輸命令嗓节,然后傳輸?shù)刂酚担詈笞x/寫數(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)