本書全面、系統(tǒng)地描述了ARM9微處理器核的嵌入式系統(tǒng)體系結(jié)構(gòu),以Samsung公司的S3C2440A控制器為例,著重介紹ARM9微處理器的結(jié)構(gòu)、開發(fā)工具、Linux的程序設計及嵌入式CDIO工程實訓等內(nèi)容。
本書共分5部分: 第1部分(第1章)為理論部分,著重介紹嵌入式系統(tǒng)的概念,包括嵌入式的特點、分類和應用; 第2部分(第2~6章)為基礎部分,著重介紹ARM9體系結(jié)構(gòu)、指令系統(tǒng)、尋址方式、指令集,偽指令、匯編語言程序設計基礎及與C/C 的混合編程,S3C2440A 控制器的結(jié)構(gòu)原理及外圍電路的設計方法等; 第3部分(第7章)為開發(fā)工具部分,著重介紹ADS 1.2集成開發(fā)環(huán)境及嵌入式Linux的軟件開發(fā)環(huán)境的使用; 第4部分(第8~11章)為操作系統(tǒng)部分,著重介紹Linux的程序設計; 第5部分為第2版新增部分(第12章),增加了嵌入式CDIO工程實訓環(huán)節(jié)。
本書采用理論與實踐相結(jié)合的方法,立足于應用,具有有針對性、實用性及綜合性強等特點。
本書不僅適用于高等院校計算機、物聯(lián)網(wǎng)、電子、自動化等相關(guān)專業(yè)的本科教學,也適合于從事嵌入式系統(tǒng)研究與開發(fā)的技術(shù)人員及普通讀者參考。
前言
嵌入式無處不在已成為現(xiàn)實。嵌入式系統(tǒng)應用的領(lǐng)域日益廣闊,與網(wǎng)絡通信、數(shù)字家庭、工業(yè)控制、國防軍事、醫(yī)療系統(tǒng)、安防系統(tǒng)、能源系統(tǒng)、交通系統(tǒng)等行業(yè)的融合逐步加深,智能設備終端應用市場的快速發(fā)展對嵌入式系統(tǒng)提出了持續(xù)需求,使得嵌入式系統(tǒng)產(chǎn)業(yè)在前所未有的機遇下飛速發(fā)展。因此,系統(tǒng)開設嵌入式系列課程是非常必要的,這樣就需要合適的配套教材。鑒于這種情況,筆者參考了大量國內(nèi)外教材,結(jié)合應用型本科院校的特點,在原有第1版教材的基礎上進行更新和修訂,從而有了更具實踐性和應用性的《嵌入式系統(tǒng)原理及應用教程(第2版)》。本書著眼于應用,立足于工程開發(fā),強調(diào)工程訓練,具有以下特點。1. 綜合性嵌入式系統(tǒng)是嵌入式硬件和嵌入式軟件的綜合體,硬件的設計服務于軟件功能,軟件的開發(fā)也必須考慮硬件資源的有限性。根據(jù)嵌入式系統(tǒng)的這一特點,本書采用ARM9微處理器 Linux操作平臺 應用程序設計 CDIO工程實訓的教學體系。2. 基礎性本書詳細講解了ARM9體系結(jié)構(gòu)和編程方法,尤其是舉例講解了指令系統(tǒng)中的指令集及匯編語言與C/C 混合編程的方法,以便讀者掌握好底層嵌入式開發(fā)的技能。3. 實用性本書以S3C2440A芯片和Linux操作系統(tǒng)為例,舉例介紹了開發(fā)環(huán)境的使用與調(diào)試方法,詳細介紹了嵌入式軟件的編程技術(shù)。例如介紹了AC97音頻控制器設計實例。4. 針對性本書是筆者多年嵌入式教學的總結(jié)。主要是針對應用型本科學生實踐性的特點,在介紹ARM9微處理器原理及結(jié)構(gòu)的同時,注重各功能模塊的應用介紹。5. 工程性本書在第1版教材的基礎上,結(jié)合CDIO教學模式,增加了嵌入式CDIO實訓項目,以提高學生的實踐能力,增強學生的工程意識。本書系統(tǒng)介紹嵌入式系統(tǒng)軟硬件的組成、工作原理和設計方法。全書分為5部分,共12章,主要內(nèi)容和篇章結(jié)構(gòu)安排如下。第1部分為理論部分,由第1章組成。介紹嵌入式系統(tǒng)的基本概念,包括嵌入式系統(tǒng)的定義、組成、特點、分類和應用領(lǐng)域。第2部分為基礎部分,由第2~6章組成。第2章重點講解ARM9處理器的體系結(jié)構(gòu); 第3章詳細講解基于ARM的嵌入式處理器指令系統(tǒng); 第4章講解嵌入式系統(tǒng)的程序設計基礎,包括匯編語言程序設計及與C/C 語言的混合編程技術(shù); 第5、6章詳細講解S3C2440A芯片內(nèi)部結(jié)構(gòu)、外設及工作原理和應用方法,并輔以實例講解。第3部分為開發(fā)工具部分,由第7章組成,著重講解ADS1.2集成開發(fā)環(huán)境及嵌入式Linux的軟件開發(fā)環(huán)境的使用。第4部分為操作系統(tǒng)部分,由第8~11章組成。第8章詳細分析嵌入式系統(tǒng)的Boot Loader,第9~11章以實例的方式講解基于S3C2440A芯片 Linux操作平臺的設計方法。第5部分為CDIO工程實訓,由第12章組成,詳細講解了8個實訓實例,學生還可以進行擴展訓練。本書由孟祥蓮任主編,孫平、王嘉鵬、姜波、于劍光任副主編。由于嵌入式技術(shù)發(fā)展迅速,加上筆者水平有限,時間倉促,書中難免有疏漏和錯誤之處,請讀者不吝賜教,以便我們在再版的時候及時糾正補充。本書的配套課件、代碼等可以從清華大學出版社網(wǎng)站www.tup.com.cn下載,如在本書使用或課件下載中遇到問題,請聯(lián)系fuhy@tup.tsinghua.edu.cn。編者2017年1月
第1版前言
嵌入式無處不在已成為現(xiàn)實。嵌入式系統(tǒng)應用的領(lǐng)域日益廣闊,與網(wǎng)絡通信、數(shù)字家庭、工業(yè)控制、國防軍事、醫(yī)療系統(tǒng)、安防系統(tǒng)、能源系統(tǒng)、交通系統(tǒng)等行業(yè)融合正在加深,智能設備終端應用市場的快速發(fā)展對嵌入式系統(tǒng)提出了持續(xù)需求,使得嵌入式系統(tǒng)產(chǎn)業(yè)在前所未有的機遇下快速地發(fā)展。因此,系統(tǒng)地開設嵌入式系列課程是必要的,這樣就需要合適的配套教材,鑒于這種情況,作者參考了大量國內(nèi)外教材,結(jié)合應用型本科院校的特點,編寫了《嵌入式系統(tǒng)原理及應用教程》一書。全書著眼于應用、立足于工程開發(fā),具有以下特點。1. 綜合性嵌入式系統(tǒng)是嵌入式硬件和嵌入式軟件的綜合體,硬件的設計服務于軟件功能,軟件的開發(fā)也必須考慮硬件資源的有限性。根據(jù)嵌入式系統(tǒng)的這一特點,本書采用ARM9處理器 Linux操作平臺 應用程序設計的介紹方法。2. 基礎性本書詳細地講解了ARM9處理器的體系結(jié)構(gòu)和編程方法,尤其是舉例講解了指令系統(tǒng)中的指令集及匯編語言與C/C 混合編程的方法,以便讀者掌握好底層嵌入式開發(fā)的技能。3. 實用性本書以S3C2440A芯片和Linux操作系統(tǒng)為例,舉例介紹了開發(fā)環(huán)境的使用與調(diào)試方法,詳細介紹了嵌入式軟件的編程技術(shù)。例如介紹AC97音頻控制器和觸摸屏的設計實例。4. 針對性本書是編者幾年嵌入式教學的總結(jié)。主要是針對應用型本科學生實踐性強的特點,在介紹ARM9處理器的原理及結(jié)構(gòu)的同時,注重了各功能模塊的應用介紹。本書系統(tǒng)地介紹了嵌入式系統(tǒng)軟硬件的組成、工作原理和設計方法。全書分為4部分,共11章,主要內(nèi)容和篇章結(jié)構(gòu)安排如下。第1部分為理論部分,由第1章組成。介紹嵌入式系統(tǒng)的基本概念,包括嵌入式系統(tǒng)的定義、組成、特點、分類和應用領(lǐng)域。第2部分為基本部分,由第2~6章組成。第2章重點講解ARM9處理器的體系結(jié)構(gòu); 第3章詳細講解基于ARM的嵌入式處理器指令系統(tǒng); 第4章講解其嵌入式系統(tǒng)的程序設計基礎,包括匯編語言程序設計及與C/C 語言的混合編程技術(shù); 第5~6章詳細講解S3C2440A芯片內(nèi)部結(jié)構(gòu)、內(nèi)部外設及工作原理和應用方法,并輔以實例講解。第3部分為開發(fā)工具部分,由第7章組成。著重講解ADS1.2集成開發(fā)環(huán)境及嵌入式Linux的軟件開發(fā)環(huán)境的使用。第4部分為操作系統(tǒng)部分,由第8~11章組成。第8章詳細分析嵌入式系統(tǒng)的Boot Loader; 第9~11章以實例的方式講解基于S3C2440A芯片 Linux操作平臺的設計方法。全書由孟祥蓮主編并編寫第3~6章,高洪志編寫第1~2章,孫平編寫第7~8章,朱國晗編寫第9~11章。由于嵌入式技術(shù)發(fā)展迅速,加上作者水平有限,時間倉促,書中難免有疏漏和錯誤之處,無論如何,請讀者不吝賜教,以便我們在改版或再版的時候及時糾正補充。
作者2010年8月
目錄
第1章嵌入式系統(tǒng)概述
1.1嵌入式系統(tǒng)定義
1.1.1嵌入式系統(tǒng)的概念
1.1.2嵌入式系統(tǒng)的特點
1.2嵌入式系統(tǒng)的組成
1.2.1嵌入式系統(tǒng)硬件
1.2.2嵌入式系統(tǒng)軟件
1.2.3嵌入式系統(tǒng)的開發(fā)系統(tǒng)和開發(fā)工具
1.3嵌入式系統(tǒng)的應用
1.4本章小結(jié)
1.5習題1
第2章ARM微處理器概述與編程模型
2.1ARM微處理器概述
2.1.1ARM微處理器的特點
2.1.2ARM微處理器系列
2.2ARM微處理器結(jié)構(gòu)
2.2.1RISC體系結(jié)構(gòu)
2.2.2ARM微處理器的寄存器結(jié)構(gòu)
2.2.3ARM微處理器的指令結(jié)構(gòu)
2.3ARM微處理器的工作狀態(tài)
2.4ARM體系結(jié)構(gòu)的存儲器格式
2.4.1指令長度及數(shù)據(jù)類型
2.4.2存儲管理單元
2.5處理器模式
2.6寄存器組織
2.6.1ARM狀態(tài)下的寄存器組織
2.6.2Thumb狀態(tài)下的寄存器組織
2.6.3程序狀態(tài)寄存器
2.7異常
2.7.1ARM體系結(jié)構(gòu)所支持的異常類型
2.7.2異常優(yōu)先級
2.7.3異常的響應及返回
2.7.4應用程序中的異常處理
2.8本章小結(jié)
2.9習題2
第3章ARM9指令系統(tǒng)
3.1ARM處理器的尋址方式
3.1.1寄存器尋址
3.1.2立即尋址
3.1.3寄存器間接尋址
3.1.4變址尋址
3.1.5寄存器移位尋址
3.1.6多寄存器尋址
3.1.7堆棧尋址
3.1.8相對尋址
3.2ARM指令集
3.2.1指令格式
3.2.2條件碼
3.2.3ARM 存儲器訪問指令
3.2.4ARM 數(shù)據(jù)處理類指令
3.2.5ARM 分支指令
3.2.6ARM 協(xié)處理器指令
3.2.7ARM 軟件中斷指令
3.3Thumb指令集
3.4本章小結(jié)
3.5習題3
第4章嵌入式程序設計基礎
4.1偽指令
4.1.1通用偽指令
4.1.2與ARM指令相關(guān)的偽指令
4.1.3與Thumb指令相關(guān)的偽指令
4.2匯編語言的語句格式
4.2.1書寫格式
4.2.2匯編語言中表達式和運算符
4.3匯編程序應用
4.3.1匯編程序基本結(jié)構(gòu)
4.3.2子程序調(diào)用
4.4匯編語言與C/C 的混合編程
4.4.1在C/C 程序中內(nèi)嵌匯編指令的語法格式
4.4.2C/C 與匯編語言的混合編程應用
4.5本章小結(jié)
4.6習題4
第5章嵌入式內(nèi)部可編程模塊
5.1存儲控制模塊
5.1.1存儲器控制器
5.1.2NAND Flash控制器
5.1.3存儲器實例
5.2GPIO
5.2.1端口功能
5.2.2端口配置寄存器
5.2.3端口其他寄存器
5.2.4I/O應用實例
5.3中斷系統(tǒng)
5.3.1中斷優(yōu)先級
5.3.2中斷控制寄存器
5.3.3中斷編程實例
5.4定時部件
5.4.1看門狗定時器原理及實例
5.4.2RTC部件
5.4.3Timer部件
5.4.4定時部件應用實例
5.5UART
5.5.1UART的操作
5.5.2UART接口寄存器
5.5.3UART實例
5.6ADC及觸摸屏接口
5.6.1功能描述
5.6.2ADC及觸摸屏接口特殊寄存器
5.6.3A/D轉(zhuǎn)換實例
5.7本章小結(jié)
5.8習題5
第6章嵌入式接口技術(shù)應用
6.1LCD顯示器接口
6.1.1LCD的控制器
6.1.2S3C2440A芯片的LCD專用寄存器
6.1.3S3C2440A芯片LCD寄存器的設置
6.2I2C總線
6.2.1S3C2440A的I2C接口
6.2.2I2C總線接口特殊寄存器
6.2.3I2C編程舉例
6.3I2S總線
6.3.1發(fā)送接收模式
6.3.2音頻串行接口格式
6.3.3I2S總線接口特殊寄存器
6.3.4I2S編程實例
6.4AC97控制器
6.4.1AC97控制器操作
6.4.2AC97控制器特殊寄存器
6.4.3AC97應用實例
6.5本章小結(jié)
6.6習題6
第7章軟件開發(fā)環(huán)境
7.1ADS1.2集成開發(fā)環(huán)境
7.1.1使用ADS創(chuàng)建工程
7.1.2用AXD進行代碼調(diào)試
7.2嵌入式Linux的交叉編譯環(huán)境安裝
7.3本章小結(jié)
7.4習題7
第8章嵌入式系統(tǒng)Boot Loader技術(shù)
8.1Boot Loader的基本概念
8.1.1Boot Loader的相關(guān)設備和機制
8.1.2Boot Loader的啟動過程
8.1.3Boot Loader的操作模式
8.1.4Boot Loader的總體設計
8.2Boot Loader(vivi)的代碼分析
8.3本章小結(jié)
8.4習題8
第9章嵌入式Linux操作系統(tǒng)移植
9.1嵌入式Linux基本概念
9.2嵌入式Linux內(nèi)核移植
9.2.1內(nèi)核修改
9.2.2內(nèi)核配置
9.2.3內(nèi)核編譯
9.3建立Linux根文件系統(tǒng)
9.4下載目標文件
9.5本章小結(jié)
9.6習題 9
第10章嵌入式Linux設備驅(qū)動程序開發(fā)
10.1嵌入式Linux驅(qū)動程序開發(fā)基礎
10.1.1嵌入式Linux設備驅(qū)動程序分類
10.1.2最簡單的內(nèi)核模塊
10.2嵌入式Linux設備驅(qū)動重要技術(shù)
10.2.1內(nèi)存與I/O端口
10.2.2同步機制
10.2.3阻塞與非阻塞
10.2.4時間問題
10.2.5中斷處理
10.3字符設備驅(qū)動程序
10.3.1字符設備驅(qū)動結(jié)構(gòu)
10.3.2字符設備驅(qū)動實例LED驅(qū)動
10.4網(wǎng)絡設備驅(qū)動程序
10.4.1Linux 網(wǎng)絡設備簡介
10.4.2網(wǎng)絡驅(qū)動核心數(shù)據(jù)結(jié)構(gòu)
10.4.3網(wǎng)絡驅(qū)動程序分析
10.5設備驅(qū)動實例
10.5.1ADC設備驅(qū)動實例
10.5.2PWM設備驅(qū)動實例
10.5.3觸摸屏設備驅(qū)動實例
10.6本章小結(jié)
10.7習題10
第11章嵌入式Linux應用程序設計
11.1嵌入式Linux C語言應用程序開發(fā)基礎
11.1.1編寫源程序
11.1.2交叉編譯程序
11.1.3調(diào)試程序
11.2文件I/O編程
11.2.1文件I/O操作例程
11.2.2文件I/O操作API
11.3網(wǎng)絡編程
11.3.1網(wǎng)絡通信基礎及例程
11.3.2網(wǎng)絡通信API
11.4應用實例
11.4.1ADC應用實例
11.4.2PWM蜂鳴器控制應用實例
11.4.3觸摸屏應用實例
11.5本章小結(jié)
11.6習題11
第12章嵌入式CDIO實訓項目
實訓1ARM匯編基礎訓練1
實訓2ARM匯編基礎訓練2
實訓3GPIO輸入輸出實訓
實訓4GPIO定時器中斷應用實訓
實訓5直流電機應用實訓
實訓6溫度采集應用實訓
實訓7紅外通信應用實訓
實訓8CAN總線應用實訓
參考文獻