歡迎您光臨本站 登入註冊首頁

概述

一、引言   嵌入式微處理器是嵌入式系統的核心器件,深入理解嵌入式微處理器的工作原理,組成結構、體系結構以及軟體編程等方面,無論對嵌入式設計師考試的準備還是對嵌入式項目的……

一、引言
    嵌入式微處理器是嵌入式系統的核心器件,深入理解嵌入式微處理器的工作原理,組成結構、體系結構以及軟體編程等方面,無論對嵌入式設計師考試的準備還是對嵌入式項目的開發都有一定的幫助。在目前白花盛放的嵌入式微處理器市場,各種各樣大大小小的嵌入式微處理器就像菜市場裡面的青菜一樣。要對各種嵌入式微處理器都有深入的理解幾乎是不可能的。但是萬變不離其中,在總多的嵌入式微處理器中都有著共同的概念、原理與規律。我們要做的是分析嵌入式微處理器的基本結構、基本工作原理、體系結構、市場發展趨勢、各種微處理器的特點與應用場合等等。我個人覺得,面對全國的考試,其考點應該是大家都應該去掌握的一些共有的基本知識,或者是大家都熟悉,流行程度甚廣的一些微處理器的使用,而不是一些個性化的知識點或者偏門器件的使用。 

二、複習筆記
1. 嵌入式微處理器的基本結構
  (1)嵌入式硬體系統一般由嵌入式微處理器、存儲器和輸入/輸出部分組成。
  (2)嵌入式微處理器是嵌入式硬體系統的核心,通常由控制單元、算術邏輯單元和寄存器3大部分組成:
       A、控制單元:主要負責取指、解碼和取數等基本操作併發送主要的控制指令。
       B、算術邏輯單元:主要處理數值型數據和進行邏輯運算工作。
       C、寄存器:用於暫存臨時性的數據。 

2. 嵌入式微處理器的分類(根據用途)
  (1)嵌入式微控制器(MCU):又稱為單片機,片上外設資源一般比較豐富,適合於控制。最大的特點是單片化,體積小,功耗和成本低,可靠性高。目前約佔70%的市場份額。
  (2)嵌入式微處理器(EMPU):又稱為單板機,由通用計算機中的CPU發展而來,它的特徵是具有32位以上的處理器,具有較高的性能。通常嵌入式微處理器把CPU、ROM、RAM及I/O等模塊做到同一個晶元上。
  (3)嵌入式DSP處理器(DSP):專門用於信號處理方面的處理器,其在系統結構和指令演算法方面進行了特殊設計,使其處理速度比最快的CPU還快10~50倍,在數字濾波、FFT、頻譜分析等方面獲得了大量的應用。
  (4)嵌入式片上系統(SOC):追求產品系統最大包容的集成器件,其最大的特點是成功實現了軟硬體的無縫結合,直接在微處理器片內嵌入操作系統的代碼模塊。

3. 典型8位微處理器的結構和特點
  該部分參考《嵌入式系統設計師考試教程》86~94頁,以8051為重點,徹底搞清楚8位單片機的工作原理,外設控制、存儲分佈、定址方式以及典型應用。2007年11月下午的第一道題目就考查了8051的定時器使用、外部時鐘連接、實際應用的流程設計以及典型的定址方式。這些考點幾乎可以在《嵌入式系統設計師考試教程》上找到,例如外部時鐘連接那個問題的答案就是《嵌入式系統設計師考試教程》89頁上面的原圖。

4. 典型16位微處理器的結構和特點
  該部分參考《嵌入式系統設計師考試》94~97頁。典型的微處理器可以參考MSP430,找一本這方面的書看看關於MSP430的結構原理以及典型應用。 

5. 典型32位微處理器的結構和特點
  該部分參考《嵌入式系統設計師考試教程》97~112頁。32位處理器採用32位的地址和數據匯流排,其地址空間達到了232=4GB。目前主流的32位嵌入式處理器系統主要有ARM系列、MIPS系列、PoewrPC系列等。ARM微處理器體系結構目前被公認為是嵌入式應用領域領先的32位嵌入式RISC處理器結構。按照目前的發展形式,ARM幾乎成了嵌入式應用的代名詞。按照我個人的意見,作為嵌入式系統設計師考試,逐漸增加考查ARM體系結構與編程方面的題目是大勢所趨。2006年沒有一道關於ARM的題目,2007年出了少量題目,可能在2008年會繼續增加。在下午題方面,2006年考查了X86方面的應用、2007年考查了8051方面的應用,這個可能是一個過度過程,以目前ARM在嵌入式領域的廣泛應用和普及程度,下午題目考查ARM應用方面或者32位其他的微處理器方面的應用題目可能在不就將來的考試中就會出現。

6、單片機系統的基本概念
  (1)單片機組成:中央處理器、存儲器、I/O設備。

  (2)存儲器:物理實質是一組或多組具備數據輸入/輸出和數據存儲功能的集成電路,用於充當設備緩存或保存固定的程序及數據。
        A、ROM(只讀存儲器):一般用於存放固定的程序或數據表格等,數據在掉電后仍然會保留下來。
        B、RAM(隨機存儲器):用於暫存程序和數據、中間計算結果,或用作堆棧用等,數據在掉電后就會丟失。

  (3)I/O埠:單片機與外界聯繫的通道,它可以對各類外部信號(開關量、模擬量、頻率信號)進行檢測、判斷、處理,並可控制各類外部設備。現在的單片機I/O口已經集成了更多的特性和功能,對I/O埠的功能進行了拓展和復用,例如外部中斷、ADC檢測以及PWM輸出等等。

  (4)輸出電平:高電平電壓(輸出“1”時)和低電平電壓(輸出“0”時)
         A、TTL電平:正邏輯,5V為邏輯正,0V為邏輯負,例如單片機的輸出。
         B、RS232電平:負邏輯,-12V為邏輯正,+12V為邏輯負,例如PC的輸出。
         註:因此在單片機和PC進行通訊的時候需要一個MAX232晶元進行電平轉換。

  (5)堆棧:它是一種線性的數據結構,是一個只有一個進出口的一維空間。
         A、堆棧特性:後進先出(LIFO)
         B、堆棧指針:用於指示棧頂的位置(地址),當發生壓棧或者出棧操作時,導致棧頂位置變化時,堆棧指針會隨之變化。
         C、堆棧操作:壓棧操作(PUSH)和出棧操作(POP)。
         D、堆棧類型:“向上生長”型堆棧,每次壓棧時堆棧指針加1;“向下生長”型堆棧,每次壓棧堆棧時指針減1。
         E、堆棧應用:調用子程序、響應中斷時,堆棧用於保護現場;還可以用作臨時數據緩衝區來使用。
         F、使用注意:堆棧溢出問題,壓棧和出棧的匹配問題。

(6)定時/計數器:實質都是計數器。用作定時器時是對單片機內部的時鐘脈衝進行計數,而在用作計數器時是對單片機外部的輸入脈衝進行計數,其作用如下:
         A、計時、定時或延時控制;
         B、脈衝技術;
         C、測量脈衝寬度或頻率(捕獲功能)

  (7)中斷:優先順序更高的事件發生,打斷優先順序低的時間進程。引起中斷的事件稱為中斷源。一個單片機可能支持多個中斷源,這些中斷源可以分為可屏蔽中斷和非可屏蔽中斷,而這些中斷源並不都是系統工作所需的,我們可以根據系統需求屏蔽那些不需要的中斷源。
          A、中斷嵌套:當一個低級中斷尚未執行完畢,又發生了一個高級優先順序的中斷,系統轉而執行高級中斷服務程序,待處理完高級中斷後再回過頭來執行低級中斷服務程序。
          B、中斷響應時間是指從發出中斷請求到進入中斷處理所用的時間;中斷處理時間是指中斷處理開始到中斷處理結束的時間。
          C、中斷響應過程:
                a、保護現場:將當前地址、累加器ACC、狀態寄存器保存到堆棧中。
                b、切換PC指針:根據不同的中斷源所產生的中斷,切換到相應的入口地址。
                c、執行中斷服務處理程序。
                d、恢復現場:將保存在堆棧中的主程序地址、累加器ACC、狀態寄存器恢復。
                e、中斷返回:從中斷處返回到主程序,繼續執行。
          D、中斷入口地址:單片機為每個中斷源分配了不同的中斷入口地址,也稱為中斷向量。

  (8)複位:通過外部電路給單片機的複位引進一個複位信號,讓系統重新開始運行。
          A、複位發生時的動作:
                a、PC指針從起始位置開始執行(大多數單片機都時從0x0000處開始執行)。
                b、I/O埠設置成預設狀態(高阻態、或者輸出低電平)。
                c、部分專用控制寄存器SFR恢復到預設狀態。
                d、普通RAM不變(如果時上電複位,則是隨即數)。
          B、兩種不同的複位啟動方式:
                a、冷啟動:也叫上電複位,指在斷電狀態下給系統加電,讓系統開始正常運行。
                b、熱啟動:在不斷電的狀態下,給單片機複位引進一個複位信號,讓系統重新開始。
         C、兩種類型的複位電路:高電平複位和低電平複位。
         D、注意事項:
               a、  注意複位信號的電平狀態及持續時間必須滿足系統要求。
               b、  注意避免複位信號抖動。

  (9)時鐘電路:單片機是一種時序電路,必須提供脈衝電路才能正常工作。時鐘電路相當於單片機的心臟,它的每一次跳動(振動節拍)都控制著單片機的工作節奏。振蕩得慢時,系統工作速度就慢,振蕩得快時,系統工作速度就快(功耗也增大)。
         A、振蕩周期:振蕩源的振蕩節拍。
         B、機器周期:單片機完成一個基本操作需要的振蕩周期(節拍)。
         C、指令周期:執行一條指令需要幾個機器周期。不同的指令需要的機器周期數不同。 

7、ARM體系結構的基本概念
  (1)ARM:Advanced RISC Machine。

  (2)ARM體系結構中支持兩種指令集:ARM指令集和Thumb指令集。

  (3)ARM內核有T、D、M、I四個功能模塊
               A、T模塊:表示16位Thumb,可以在兼顧性能的同時減少代碼尺寸。
               B、D模塊:表示Debug,內核中放置了用於調試的結構,通常為一個邊界掃描鏈JTAG。
               C、M模塊:表示8位乘法器。
               D、I模塊:表示EmbeddedICE Logic,用於實時斷點觀測及變數觀測的邏輯電路部分。

  (4)ARM處理器有7種運行模式
               A、用戶模式(User):正常程序執行模式,用於應用程序。
               B、快速中斷模式(FIQ):快速中斷處理,用於高速數據傳輸和通道處理。
               C、外部中斷模式(IRQ):用於通用的中斷處理。
               D、管理模式(SVE):供操作系統使用的一種保護模式。
               E、數據訪問中止模式(Abort):用於虛擬存儲及存儲保護。
               F、未定義指令中止模式(Undefined):當未定義指令執行時進入該模式。
               G、系統模式(System):用於運行特權級的操作系統任務。
    除了用戶模式之外的其他6種處理器模式稱為特權模式,在這些模式下,程序可以訪問所有的系統資源,也可以任意地進行處理器模式切換,其中,除了系統模式外,其他的5種特權模式又稱為異常模式。
    處理器模式可以通過軟體控制進行切換,也可以通過外部中斷或異常處理過程進行切換。大多數的用戶程序運行在用戶模式下,這時,應用程序不能訪問一些受操作系統保護的系統資源,應用程序也不能直接進行處理器模式切換。當需要進行處理器模式切換時,應用程序可以產生異常處理,在異常處理中進行處理器模式的切換。這種體系結構可以使操作系統控制整個系統的資源。
     當應用程序發生異常中斷時,處理器進入相應的異常模式。在每一種異常模式種都有一組寄存器,供相應的異常處理程序使用,這樣就可以保證進入異常模式時,用戶模式下的寄存器不被破壞。
    系統模式並不是通過異常過程進入的,它和用戶模式具有完全一樣的寄存器,但是系統模式屬於特權模式,可以訪問所有的系統資源,也可以直接進行處理器模式切換,它主要供操作系統任務使用。

  (5)ARM處理器共有37個寄存器:31個通用寄存器和6個狀態寄存器
              A、通用寄存器包括R0~R15,可以分為3類:
                    a、未備份寄存器R0~R7:在所有的處理器模式下,未備份寄存器都是指向同一個物理寄存器。
                    b、備份寄存器R8~R14:
                        對於R8~R12來說,每個寄存器對於2個不同的物理寄存器,它們每次所訪問的物理寄存器都與當前的處理器運行模式有關。
                        對於R13、R14來說,每個寄存器對於6個不同的物理寄存器,其中一個是用戶模式和系統模式共用。
                        R13在ARM指令種常用作堆棧指針。由於處理器的每種運行模式都有自己獨立的物理寄存器R13,所有在用戶應用程序的初始化部分,一般要初始化每種模式下的R13,使其指向該運行模式的棧空間。
                        R14又稱為連接寄存器(LR),在ARM體系種具有下面兩種特殊作用:在通過BL或BLX指令調用子程序時,存放當前子程序的返回地址;在異常中斷髮生時,存放異常模式將要返回的地址。
                    c、程序計數器R15(PC)。
                        由於ARM採用了流水線機制,在三級流水線中,當正確讀取了PC的值時,該值為當前指令地址值加8個位元組。也就是說,PC指向當前指令的下兩條指令的地址。在ARM指令狀態下,PC的0和1位是0,在Thumb指令狀態下,PC的0位是0。

                B、程序狀態寄存器
                      a、ARM體系結構包含1個當前程序狀態寄存器(CPSR)和5個備份的程序狀態寄存器(SPSR),使用MSR和MRS指令來設置和讀取這些寄存器。
                      b、當前程序狀態寄存器CPSR:保存當前處理器狀態的信息,可以在任何處理器模式下被訪問。
                      c、備份程序狀態寄存器SPSR:每一種異常處理器模式下都有一個專用的物理狀態寄存器。當特定的異常中斷髮生時,這個寄存器用於存放當前程序狀態寄存器的內容,在異常中斷程序退出時,可以用SPSR中保存的值來恢復CPSR。
                      d、由於用戶模式和系統模式不屬於異常模式,它們沒有SPSR,當在這兩種模式下訪問SPSR時,結果是未知的。

  (6)ARM指令的定址方式
  所謂定址方式就是處理器根據指令中給出的地址信息來尋找物理地址的方式。
               A、 立即定址:操作數本身就在指令中給出,只要取出指令也就取到了操作數。
ADD  R0, R0, #1                        ;R0?R0+1
               B、 寄存器定址:利用寄存器中的數值作為操作數。
ADD  R0, R1, R2                       ;R0?R1+R2
               C、 寄存器間接定址:以寄存器中的值作為操作數地址,而操作數本身存放在存儲器中。
ADD  R0, R1, [R2]                     ;R0?R1+[R2]
LDR  R0, [R1]                           ;R0?[R1]
STR  R0, [R1]                           ;[R1]?R0
                D、基址變址定址:將寄存器(該寄存器一般稱作基址寄存器)的內容與指令中給出的地址偏移量相加,從而得到一個操作數的有效地址。
LDR  R0, [R1, #4]                      ;R0?[R1+4]
LDR  R0, [R1, #4]!                    ;R0?[R1+4]  R1?R1+4
LDR  R0, [R1], #4                      ;R0?[R1]  R1?R1+4
LDR  R0, [R1, R2]!                    ;R0?[R1+R2] 
                E、 多寄存器定址:一條指令可以完成多個寄存器值的傳送。
LDMIA  R0, {R1, R2, R3}          ;R1?[R0]  R2?[R0+4]  R3?[R0+8]  
                F、 相對定址:以程序計數器PC的當前值作為基地址,指令中的地址標號作為偏移量,兩者相加之後得到操作數的有效地址。
BL  NEXT                                 ;跳轉到子程序NEXT處執行
……
NEXT
……
MOV  PC, LR                            ;從子程序返回
                G、堆棧定址:支持4種類型的堆棧工作方式:
                      a、  滿遞增堆棧:堆棧指針指向最後壓入的數據,且由低地址向高地址生長。
                      b、  滿遞減堆棧:堆棧指針指向最後壓入的數據,且由高地址向低地址生長。
                      c、  空遞增堆棧:堆棧指針指向下一個將要放入數據的空位置,且由低地址向高地址生長。
                      d、  空遞減堆棧:堆棧指針指向下一個將要放入數據的空位置,且由高地址向低地址生長。

  (7)ARM的存儲方法
                 A、大端模式:數據的高位元組存儲在低地址中,低位元組存儲在高地址中。
                 B、小端模式:數據的低位元組存儲在低地址中,高位元組存儲在高地址中。

  (8)ARM中斷與異常
                 A、ARM內核支持7種中斷,不同的中斷處於不同的處理模式,具有不同的優先順序,而且每個中斷都有固定的中斷地址入口。當一個中斷髮生是,相應的R14(LR)存儲中斷返回地址,SPSR存儲當前程序狀態寄存器CPSR的值。

                 B、由於ARM內核支持流水線工作,LR寄存器存儲的地址可能是發生中斷後面指令的地址,所以不同的中斷處理完成後,必須將LR寄存器值經過處理后再寫入P15(PC)寄存器。

                 C、ARM異常的具體含義:
                         a、複位:當處理器的複位電平有效時,產生複位異常,程序跳轉到異常複位異常處理程序處執行。
                         b、未定義的指令:當ARM處理器或協處理器遇到不能處理的指令時,產生未定義指令異常。可以使用該異常機制進行軟體模擬。
                         c、軟體中斷:該異常由執行SWI指令產生,可用於用戶模式下的程序調用特權操作指令。可使用該異常機制實現操作系統調用功能。
                         d、指令預取中止:如果處理器預取指令的地址不存在或該地址不允許當前指令訪問,存儲器向處理器發出中止信號,但當預取的指令被執行時,才會產生指令預取中止異常。
                         e、數據訪問中止:如果處理器數據訪問指令的目標地址不存在,或者該地址不允許當前指令訪問,處理器產生數據訪問中止異常。
                         f、外部中斷請求:當ARM外部中斷請求管腳有效,而且CPSR中的I位為0時,產生IRQ異常。系統的外設可以通過該異常請求中斷服務。
                        g、快速中斷請求:當ARM快速中斷請求管腳有效,而且CPSR的F位為0時,產生FIQ異常。

                  D、ARM處理器對異常中斷的響應過程
                        a、將下一條指令的地址存入相應的連接寄存器LR中。
                        b、將CPSR複製到相應的SPSR中。
                        c、根據異常的類型,強制設置CPSR的運行模式位。
                        d、強制PC從相關的異常向量地址取下一條指令執行,從而跳轉到相應的異常處理程序處。

                  E、ARM處理器從異常中斷處理程序中返回
                        a、恢復中斷的程序的處理器狀態,將SPSR複製到CPSR中。
                        b、若在進入異常處理時設置了中斷禁止位,要在此清除。
                        c、將連接寄存器LR的值減去相應的偏移量後送到PC。

                   F、複位異常中斷處理程序不需要返回。在複位異常中斷程序開始整個用戶程序的執行。

三、真題解析
1、2007年上午49題
在ARM處理器中, (49) 寄存器包括全局的中斷禁止位,控制中斷禁止位就可以打開或者關閉中斷。
(49)A. CPSR           B. SPSR       C. PC            D. IR

<答案>:A
    考查ARM體系結構的基礎知識,CPSR為當前程序狀態寄存器,包含全局中斷控制位。

2、2007年下午試題一(題目略)
    考查8051定時器應用、外部時鐘硬體連接、實際項目流程設計以及定址方式。

3、2006年上午27題
    通常所說的32位微處理器是指(27)
(27)A. 地址匯流排的寬度為32位                  B. 處理器數據長度只能為32位
      C. CPU字長為32位                             D. 通用寄存器數目為32個

<答案>:C
根據常識,很容易將B和D排除掉。
所謂字長,指CPU在單位時間內(同一時間)能一次處理的二進位數的位數。
因此,能處理字長為8位數據的CPU通常就叫8位的CPU,32位CPU的字長為32位。
對於字長和位元組,通常8位稱為一個位元組,而字長的長度是不固定的,對於不同的CPU,字長的長度不一樣。8位的CPU一次只能處理一個位元組,而32位的CPU一次就能處理4個位元組。

四、小結
    從這兩年的考試真題來看,關於嵌入式微處理器方面的題目不多,06和07年上午題目各一題。而且考的都是基礎中的基礎概念。這些幾乎就是每個搞計算機或者單片機的人一進門就要理解的概念。雖然考試的題目不多,然而對嵌入式微處理器的很多基本概念和原理的理解對試卷上的其他題目的解答都有一點的幫助。隨著ARM技術的飛速普及,07年也開始出現ARM體系結構的題目,我覺得在今後的考試中,這方面題目可能會不斷出現。在下午題目中,一道硬體相關的題目是少不了的,嵌入式微處理器作為嵌入式系統的核心,多多少少會設計到。06年考查X86,07年考查MCS-51,這是計算機也可以說是嵌入式發展和普及的一個過程,今後會不會考查ARM的應用呢?完全有這個可能性。然而目前MCU的市場仍然火爆,最近ARM推出的cortex-M3也不不斷佔領MCU的市場,可見MCS-51的為基礎的應用仍然不斷湧現。07年考查了8051的應用,今後我覺得可能還會繼續出的吧。


[admin via 研發互助社區 ] 嵌入式系統設計師考試筆記之嵌入式微處理器已經有2433次圍觀

http://cocdig.com/docs/show-post-42151.html