嵌入式系統的特點
專用、軟硬件可剪裁可配置
低功耗、高可靠性、高穩定性
軟件代碼短小精悍
代碼可固化
實時性
弱交互性
軟件開發需要專門的開發工具和開發環境
要求開發、設計人員有較高的技能
嵌入式系統發展的4個階段:
以單芯片為核心的可編程控制器形式的系統
以嵌入式CPU為基礎、以簡單操作系統為核心的嵌入式系統
以嵌入式操作系統為標志的嵌入式系統
以Internet為標志的嵌入式系統
嵌入式操作系統軟硬實時定義和區別
具有強(硬)實時特點的嵌入式操作系統系統在指定的時間內未能實現某個確定的任務,會導致系統的全面失敗,則被稱為硬(強)實時系統。硬實時系統,其系統響應時間在毫秒或微秒級(數控機床)。一個硬實時系統通常在硬件上需要添加專門用于時間和優先級管理的控制芯片, uc/os和VxWorks是典型的實時操作系統。
具有弱(軟)實特點的嵌入式操作系統在軟實時系統中,雖然響應時間同樣重要,但是超時卻不會發生致命的錯誤。軟實時系統則主要在軟件方面通過編程實現現實的管理。比如Windows CE、uCLinu是一個多任務分時系統。系統響應時間在毫秒或幾秒的數量級上
ARM體系結構的命名規則
ARM {x} {y} {z} {T} {D} {M} {I} {E} {J} {F} {-S}
大括號內的字母可選
x —— 系列號,例如:ARM9中的“9”;
y —— 內部存儲管理/保護單元,例如ARM92中的“2”、ARM94中的“4”;
z —— 內含有高速緩存Cache;
T —— 支持16位的Thumb指令集;
D ——支持JTAG片上調試;
M ——支持用于長乘法操作(64位結果)的ARM指令,包含快速乘法器;
I —— 帶有嵌入式追蹤宏單元ETM(Embedded Trace Macro),用來設置斷點和觀察點的調試硬件;
E —— 增強型DSP指令(基于TDMI);
J —— 含有java加速器Jazelle,與Java虛擬機相比,Java加速器Jazelle使Java代碼運行速度提高了8倍,功耗降低到原來的80%;
F——向量浮點單元;
S——可綜合版本,意味著處理器內核是以源代碼形式提供的。這種源代碼形式又可以被編譯成一種易于EDA工具使用的形式。
ARM9流水線:
5級流水線結構,分別是取指,譯碼、執行、存儲器訪問、寄存器寫操作。
與3級對比,5級將存儲器訪問和寄存器寫操作分別由流水線來處理,增加處理指令的執行效率。
取指:從指令Cache中讀取指令。
譯碼:對指令進行譯碼,識別出是對哪個寄存器進行操作并從通用寄存器中讀取操作數。
執行:進行ALU運算和移位操作,如果是對存儲器操作的指令,則在ALU中計算出要訪問的存儲器地址。
存儲器訪問:如果是對存儲器訪問的指令,用來實現數據緩沖功能(通過數據Cache)。
寄存器回寫:將指令運算或操作結果寫回到目標寄存器中。
例子:MOV R0,R1 ADD R5,R5,#1 LDR R3,[R4] STR R9,[R13] MOV R6,R7 MOV R8,R7 ADD R0, R0, R2
5級流水線互鎖分析:當前指令的執行可能需要前面指令的執行結果,當這時前面的指令沒有執行完畢,從而會導致當前指令的執行無法獲得合法的操作數,這時就會引起流水線的等待,這種現象在流水線機制里稱為互鎖。
ARM微處理器的工作模式(7種)
User-用戶模式(usr)
ARM處理器正常的程序執行狀態
FIQ-快速中斷模式(fiq)
用于高速數據傳輸或通道處理
IRQ-外部中斷模式(irq)
用于通用的中斷處理
Supervisor-管理模式(svc)
操作系統使用的保護模式
復位、軟中斷調用(SWI)
Abort-中止模式(abt)
當數據訪問或指令預取中止時進入該模式
可用于虛擬存儲及存儲保護
Undefined-未定義指令異常模式(und)
當未定義的指令執行時進入該模式
可用于支持硬件協處理器的軟件仿真
System-系統模式(sys)
運行具有特權的操作系統任務
使用和User模式相同寄存器組
嵌入式處理器的特點
對實時多任務有很強的支持能力
具有功能很強的存儲區保護功能
可擴展的處理器結構
嵌入式微處理器必須功耗很低。
ARM異常處理
異常進入
異常(Exception)通常定義為:處理器需要中止指令正常執行的任何情形并轉向相應的處理,包括ARM內核產生復位,取指或存儲器訪問失敗,遇到未定義指令,執行軟件中斷指令,或者出現外部中斷等。
在處理異常之前,當前處理器的狀態必須保留,這樣當異常處理完成之后,當前程序可以繼續執行
處理器允許多個異常同時發生,它們將會按固定的優先級進行處理
異常返回
異常處理完畢之后,ARM微處理器會執行以下幾步操作從異常返回(編程完成)
1將SPSR復制回CPSR中
2將鏈接寄存器LR的值減去相應偏移量(偏移量計算不作要求)后送到PC中
ARM通用寄存器,專用寄存器
ARM 有37個32-Bits長的寄存器
30 個通用寄存器
1個用作CPSR(current PRogram status register)
5個用作SPSR(saved program status registers)
1 個用作PC( program counter)
這些寄存器不能被同時訪問取決于處理器的工作狀態和工作模式
通用寄存器包括R0~R14,可以分為兩類
未分組寄存器R0~R7
分組寄存器R8~R14
未分組寄存器R0~R7
在所有的工作模式下,每個未分組寄存器都指向對應的一個物理寄存器
在中斷或異常處理進行工作模式轉換時,由于不同的處理器工作模式均使用相同的物理寄存器,可能會造成寄存器中數據的破壞
分組寄存器R8~R14
R8~R12
每個寄存器對應2個不同的物理寄存器
當使用FIQ模式時,訪問R8_fiq~R12_fiq
當使用其他模式時,訪問R8_usr~R12_usr
R13、R14
每個寄存器對應6個不同的物理寄存器
其中一個寄存器是用戶模式與系統模式共用
另外5個物理寄存器對應于其他5種不同的工作模式
不同物理寄存器的區分
R13_<mode>
R14_<mode>
mode為:sys_usr(系統_用戶模式)、fiq(快速中斷模式)、irq (外部中斷模式) 、svc(管理模式)、abt(中止模式)、und(未定義指令異常模式)
例如:
R13_usr、R13_fiq、R13_irq
R14_svc、R14_abt、R14_und
R13寄存器
常用作堆棧指針SP(Stack Pointer),一種習慣用法
也可使用其他的寄存器作為堆棧指針
在Thumb指令集中,某些指令強制使用R13作為堆棧指針
在應用程序初始化時,一般都要初始化每種模式下的R13,使其指向該工作模式的??臻g
R14寄存器
也稱鏈接寄存器LR (Link Register)
當執行BL子程序調用指令時,R14中得到R15(程序計數器PC)的備份
BL Label;下一條指令地址→LR, Label→PC
當發生中斷或異常時,對應的分組寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來保存R15的返回值
其他情況下,R14用作通用寄存器
R15寄存器
R15寄存器用作程序計數器(PC)
ARM狀態:位[1:0]為0,位[31:2]用于保存PC
Thumb狀態:位[0]為0,位[31:1]用于保存PC
由于ARM體系結構采用了多級流水結構,對于ARM指令集而言,PC總是指向當前執行指令的下兩條指令的地址,即PC的值為當前執行指令的地址值加8個字節 (4字節*2 取指(PC)、譯碼)。
程序狀態寄存器的構成
一個當前程序狀態寄存器(CPSR)
五個備份程序狀態寄存器(SPSR)
備份的程序狀態寄存器用來進行異常處理
程序狀態寄存器的功能
保存ALU中的當前運行狀態
控制允許和禁止中斷
設置處理器的工作模式
ARM體系結構的存儲結構
從0地址開始的以字節為單位的線性組合
從0字節到3字節放置第一個存儲的字數據,從第4個字節到第7個字節放置第二個存儲的字數據,依次排列
作為32位的微處理器,ARM體系結構所支持的最大尋址空間為4GB(232字節)
受到物理地址線的限制,一般實際嵌入式處理器最大尋址空間為幾百兆
存儲器大/小端
RM存儲字數據采用兩種方法
大端模式(Big endian)
字數據的高字節存儲在低地址中
字數據的低字節存放在高地址中
小端模式(Little endian)
低地址中存放的是字數據的低字節
高地址中存放的是字數據的高字節
大端和小端都支持,默認是小端模式
ARM的尋址方式(PPT第3章 第6頁)
ARM的尋址方式分為數據處理指令尋址方式和內存訪問指令尋址方式。
數據處理指令尋址方式
Operand2(第二個操作數)的尋址方式
立即數尋址方式
寄存器尋址方式
寄存器移位尋址方式
內存訪問指令尋址方式
字及無符號字節的Load/Store指令的尋址方式;
雜類Load/Store指令的尋址方式;
批量Load/Store指令的尋址方式;
堆棧操作尋址方式。
Load/Store指令是對內存進行存儲/加載數據操作的指令,根據訪問的數據格式的不同,這列指令的尋址分為字、無符號字節的Load/Store指令尋址和半字、有符號字節Load/Store指令尋址兩大類。
匯編指令語法格式:
LDR {<cond>}{B}{T}<Rd>,<addressing_mode>
STR {<cond>}{B}{T}<Rd>,<addressing_mode>
(1)偏移量為立即數
前變址不回寫
[<Rn>,#+/-<immed_offset>]
前變址回寫
[<Rn>,#+/-<immed_offset>]!
后變址回寫
[<Rn>],#+/-<immed_offset>
(2)偏移量為寄存器的值
前變址不回寫
[<Rn>,+/-<Rm>]
前變址回寫
[<Rn>,+/-<Rm>]!
后變址回寫
[<Rn>],+/-<Rm>
(3)偏移量通過寄存器移位獲得
前變址不回寫
[<Rn>,+/-<Rm>,<shift>#shift_amount ]
前變址回寫
[<Rn>,+/-<Rm>,<shift>#shift_amount]!
后變址回寫
[<Rn>],+/-<Rm>,<shift>#shift_amount
半字、有符號字節Load/Store指令尋址(也叫雜類Load/Store指令的尋址方式)
這類指令可用來加載有符號字節、加載有符號半字、加載/存儲無符號半字。
加載有符號字節到寄存器:
LDR {<cond>}SB <Rd>,<addressing_mode>
加載有符號半字到寄存器:
LDR {<cond>}SH <Rd>,<addressing_mode>
加載無符號半字到寄存器:
LDR {<cond>}H <Rd>,<addressing_mode>
存儲無符號半字到內存:
STR {<cond>}H <Rd>,<addressing_mode>
(1)偏移量為立即數
前變址不回寫
[<Rn>,#+/-<immed_offset8>]
前變址回寫
[<Rn>,#+/-<immed_offset8>]!
后變址回寫
[<Rn>],#+/-<immed_offset8>
(2)偏移量為寄存器的值
前變址不回寫
[<Rn>,+/-<Rm>]
前變址回寫
[<Rn>,+/-< Rm >]!
后變址回寫
[<Rn>],+/-< Rm >
有關例題,直接看ppt第3章和第4章
PLL(鎖相環)
PLL是一個相位誤差控制系統。它比較輸入信號和壓控振蕩器輸出信號之間的相位差,從而產生誤差控制電壓來調整壓控振蕩器的頻率,以達到與輸出信號同頻。
鎖相環輸出頻率
MPLL =(m×Fin)/(p×2S)
m = M+8, M:M寄存器的值
p = P+2, P:P寄存器的值
S:S寄存器的值
S3C2410有4種電源管理模式:
正常模式:鎖相環工作,為CPU和所有片內外設提供時鐘
慢時鐘模式:鎖相環不工作
CPU等直接使用原始時鐘、或原始時鐘的分頻工作,此模式工作時鐘頻率低而
使功耗低,并且鎖相環不工作也使功耗降低
空閑模式:停止為CPU提供時鐘,CPU不工作(其外設均工作)
退出方法:
任何中斷請求可喚醒CPU工作,退出空閑模式
掉電模式:時鐘模塊斷電,除了喚醒電路之外所有部分均不供電
系統需分成兩部分供電。此模式功耗最低
退出方法:用中斷喚醒必須設置外中斷
(1)外部中斷EINT0---15
(2)實時鐘報警中斷
S3C2410X串行通信(UART)單元
UART有三個獨立的異步串行I/O 端口:UART0、UART1、UART2,每個串口都可以在中斷和DMA 兩種模式下進行收發。UART支持的最高波特率達230.4kbps。
3個UART都有遵從1.0規范的紅外傳輸功能, UART0、UART1有完整的握手信號,可以連接MODEM。
每個UART 包含:波特率發生器、接收器、發送器和控制單元。波特率發生器以PCLK或UCLK為時鐘源。發送器和接收器各包含1個16 字節的FIFO寄存器和移位寄存器。
當發送數據的時候,數據先寫到FIFO 然后拷貝到發送移位寄存器,然后從數據輸出端口(TxDn)依次被移位輸出。被接收的數據也同樣從接收端口(RxDn)移位輸入到移位寄存器,然后拷貝到FIFO 中。
波特率由一個專用的UART 波特率分頻寄存器(UBRDIVn)控制。計算公式如下:
UBRDIVn = (int)(UCLK/(波特率×16) ) – 1
UBRDIVn = (int)(PCLK/(波特率× 16) ) –1
時鐘選用UCLK還是PCLK由UART控制寄存器UCONn[10]的狀態決定。
UCONn[10] = 0,選用PCLK
UCONn[10] = 1,選用UCLK
UBRDIVn的值必須在1~(216?1)之間
例子:若波特率為115200bps,時鐘源頻率PCLK為40MHz,除數UBRDIVn應如何計算?
解:UBRDIVn =( int) (40000000/(115200×16))-1 =( int)(21.7)-1 =20
新聞熱點
疑難解答