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