ARM微控制器與嵌入式系統

個牛人在ARM實現嵌入式系統的過程

第一章  概覽

1.1課程概覽

  1. 認識ARM嵌入式系統(什麼是ARM?什麼是嵌入式系統?
  2. 備戰智能車
  3. 在科技活動中玩起來
  4. 積累計算機、電路基礎知識

1.2如何學好嵌入式系統

  1. 興趣
  2. 熱愛
  3. 玩起來

第二章  緒論

2.1計算機的基本概念、發展歷史

  1. 改變世界:機械之美——機械時期的計算設備html

  2. Turing machine    git

  3. ABC
  4. 馮.諾依曼體系結構
  5. 進制轉換ASCIItab
  6. 數字(digital  discrete如:指針走過變盤)與模擬(analog  continue如:數字時鐘||時間上是間隔的,數值上是量化的)
  7. 計算機系統中0、1的表示  例如:用某一電壓段來表示高電平和低電平(TTL 和 CMOS 標準

 2.2從晶體管到CPU

 

 

 

 拋開晶體管的諸多嚴謹的限制,只將其看作高電壓導通或者低電壓導通的開關

 

 

與門=與非門+非門編程

 

 

由控制電路爲0爲1來控制電路的通斷,當其爲0時out端處於高阻狀態(電路視爲斷路)狀態不肯定(能夠對應爲turingmachine中紙帶上的空白),當其爲1時電路導通out對應in小程序

 

把晶體管和開關拋開,更多從邏輯上來理解。更多的邏輯關係:

 

 

 邏輯的組合 產生功能模塊

半加器(不能進位)

 

 

全加器

 

將抽象出來的「方塊」組合獲得一個4位加法器api

 

數據流向的控制電路也能夠經過邏輯電路來實現

譯碼電路

分析可知只有當「A端」爲「1 0 0 1」時「S端」能夠輸出「1」,結合以前的三態門能夠實現取出特定編號(如:「1 0 0 1」)中數據的功能。架構

 

多路選擇

由兩個輸入信號產生四個控制信號函數

 以上,咱們大概能夠將其稱爲組合邏輯電路(其輸出值老是取決於當前的輸入值,一有輸入立刻會看到輸出)。下面進入時序邏輯電路(有反饋的出現,out值還取決於其上一值等。)

 

電路分析:學習

當c爲0時d的輸入會被鎖死(即d的值對輸出不起做用)例子:一、(c = 1;d = 0;)->(Q = 0;Q' = 1;) 二、(c = 0;d = 0;)->(Q = 0;Q' = 1;) 三、(c = 0;b = 1;)->(Q = 0;Q' = 1)        (當c爲0時e,f必都爲1;若上次Q = 0,Q' = 1或Q = 1,Q' = 0;因爲反饋的存在Q和Q'的值不改變,也從而達到存儲數據的功能)ui

 

電路分析:url

經過不斷交替給clk 0 1以實現移位操做(也能夠看作乘除法)(在實際中此電路並不起做用,由於數值傳遞很快,當給clk  1 時電路中全部位都會刷新爲0)

 

 

 

 

 

 電路分析:

 

D觸發器級聯起來就能夠實現以上功能而不會出錯。

 

 一個概念CPU(大概幾百幾千個晶體管)

 

 

 

 

 功能模塊---助記符---彙編---程序

 

2.3概念CPU、微控制器MCU和嵌入式系統

 通用CPU的發展之路

微控制器MCU不單單是一個簡單的CPU

MCU  VS  CPU

 

                                                                                

 

嵌入式系統

 

 

 

 

 

2.4八卦計算機歷史

2.5不一樣領域 不一樣系列的嵌入式系統

2.6ARM歷史與MKL25Z128 MCU

 

 

 

 

第二章到此結束,在經過本章學習後咱們從計算機聚焦到了MCU上,不侷限於課堂的幾十分鐘,習慣於閱讀英文文檔(最好是官方的)。

 

第三章    MCU基礎

3.1CPU的基本結構和運行機制

上圖是一個基本的MCU內部結構,在瞭解了MCU內部結構後,在本章中最重要的是在此基礎上理解編程的內部運行機理。接下來咱們首先學習MCU內部結構。

 

MCU的概覽

 

 

 分析其中的CPU

 

紅色(運算器,存儲器,控制器)必要,灰色非必要

 將ALU拎出來

 

下面分析Quiz,以對四要素尤爲是Status加深理解

  1. A + B = C      操做數:A  B    ; 運算 : +   ; 運算結果: C ; 標誌位:若C的結果發生溢出,則flag會產生溢出記錄;  
  2. A>B              操做數:A  B    ; 運算 :> (本質上是減法運算,產生一個最高位爲1的補碼,即負數)    ; 運算結果 : 1 or 0 ; 標誌位 : 記錄產生的結果是0 or 1;
  3. A>>=1(A等於A右移一位)操做數:A  ;運算: >>=;運算結果:一個數 ;標誌位:當右移至0時產生一個標誌;

運算邏輯單元所產生的結果及狀態位須要保存下來,大部分CPU會有叫作register的東西來完成

 

 

 

 

那麼操做數又是如何加載到CPU的呢?

 

既然數據能夠存儲在Memory中,那麼如何存取就涉及到了地址與存儲了:

這一切又是如何運行起來的:

在時序電路(「依次」)的驅動下CPU完成指令的獲取:

 

當指令組成程序時:

 

被調函數完成執行後後會返回主調函數,這就要求PC = adress ,那麼如何完成呢?早期CPU會增長一個返回地址寄存器,可是若是出現函數的嵌套調用,就會要求有多個返回地址寄存器,那麼問題就出現了,寄存器不能無限制的加下去,這就出現了一種新機制-------------->堆棧

 3.2.1堆(heap)棧(stack)的概念

上面文章的中文翻譯版

 

 堆棧多數時候指的只是

定義:

做用:

堆棧的運行機制:

堆和棧是有很大區別的,但在嵌入式系統中一般不使用堆。

堆棧溢出(難點)

sp指針寄存器,pc指針寄存器,數據寄存器,標誌位寄存器。。。稱爲register file(寄存器組)or programmer‘s model(編程模型) 。

學習一種cpu時:

  1. 瞭解其可編程的寄存器組
  2. 瞭解其指令集

 

兩種常見的mcu模型:

 

 3.2.2堆棧的概念  頭腦體操

下面經過一個小程序來理解堆棧的運行機理

程序跑在一個如上圖所示的12系列的mcu中

其寄存器組分別爲:一個16位的D寄存器(可分爲兩個8位的數據寄存器A B),兩個尋址寄存器X Y,一個棧指針寄存器,一個程序計數器,一個狀態位寄存器。

 

 初始狀態

 

完成堆棧初始化

 

a值入棧

 

b值入棧

 

調用子函數,pc發生跳轉,在棧中保存子函數執行完後要執行的代碼的地址,sp發生跳轉

 

執行子函數

 

子函數執行返回語句,將棧中的0x30,0x0c的值賦給pc指針寄存器,sp指針寄存器返回到子函數執行前的位置,以前的0x30,0x0c依然在棧中只是不被棧所認可(注意並非清空只是能夠被心之所覆蓋)。

 

 

 這個程序實現了a b值交換

3.3.1 ARM的體系結構

 進入ARM Cotex M的32位微處理器

常見的微處理器架構:powerpc       coldfire      arm

 

如下是對xPSR這個32位寄存器地詳細分析:

xPSR的每一位都會有其對應的功能,咱們經過其別名(APSR(應用程序狀態寄存器)   IPSR (中斷程序寄存器)  EPSR(程序運行狀態寄存器))來訪問其特定位;

APSR:訪問最高四位,來判斷是否有溢出,是否進位。。。

IPSR:訪問低位,保存中斷號

EPSR:訪問中間的T,是否有中斷髮生


 

 

優先級屏蔽寄存器(PRIMASK  register)在這裏開關總中斷


 

cpu狀態寄存器(用戶態(輔堆棧)or特權態(主堆棧))

 


 

thread mode :(進程模式)簡單理解爲運行main和main調用

handler mode:(句柄模式)發生中斷和響應中斷

 

 

 

 


 

 3.3.2ARM體系結構----頭腦體操

 

 

 

 

以上和16位cpu類似

 


 

 

函數調用有不一樣之處:

  • 函數調用指令結束後的指令的地址被記錄在LR寄存器而不是壓入堆棧(armcpu在發生一級調用時會這樣作)
  • ARM體系結構向下兼容(thumb and arm )的特性:在將地址賦給LR寄存器時將最低位置1,在將地址值值賦給pc指針寄存器時將值再恢復爲0;

 

 

 

 

總結:

  • 完成了兩個內存中值的交換
  • 堆棧先入後出的性質    

 

3.4中斷的概念和機制

一、走近中斷

 

 二、定義中斷

 三、中斷的使用(只是中斷髮生時可以讓CPU響應的條件,具體使用方式在下節給出)

(1)打開/關閉總的控制中斷的開關

 

(2)設置某一中斷髮生的標誌

(3)中斷的工做流程

 

3.5中斷子程的概念和編程

 

3.6 復位、時鐘、存儲器和總線


 

3.7 小結:MCU的整體結構和程序運行機制

第四章  ARM微控制器的開發

4.1 第一種外設:io

 

 

 

 

 

 

4.2 IO外設的編程實操-點亮LED

相關文章
相關標籤/搜索