內容簡介
全書共分為14章。第1章是嵌入式系統組成簡介。第2~6章描述硬體部分,以S3C2410A微處理器為主,具體描述嵌入式微處理器組成、片內功能模組原理及套用、開發板基本組成,還介紹了OMAP3530嵌入式微處理器組成及套用。第7~14章描述軟體部分,針對基於S3C2410A及OMAP3530微處理器的開發板,具體描述開發系統組成、主機及目標板運行、主機開發環境配置、實驗例程及驅動程式分析、目標板出廠軟體燒寫、UBoot及核心。書中給出的大量C語言原始碼多數取自UBoot、μC/OSⅡ、Linux以及晶片廠商測試程式。實驗程式均上機調試通過。 本書既可以作為高等院校計算機、軟體、電子、自動化、通信等專業的本科生嵌入式系統開發課程的教材使用,還可以作為研究生的參考教材,同時可供相關技術人員參考或作為培訓教材使用。
目錄
第1章嵌入式系統組成簡介1
1.1嵌入式系統簡介1
1.1.1嵌入式系統定義1
1.1.2嵌入式系統發展歷程1
1.1.3嵌入式系統套用舉例2
1.1.4嵌入式系統特點2
1.2嵌入式系統硬體及軟體組成4
1.2.1嵌入式系統硬體組成4
1.2.2嵌入式系統軟體組成5
1.3主流嵌入式微處理器5
1.3.1嵌入式微處理器分類5
1.3.2主流嵌入式微處理器簡介7
1.4主流嵌入式作業系統簡介10
1.4.1嵌入式作業系統的主要特點10
1.4.2主流嵌入式作業系統簡介11
1.5Linux支持的處理器結構簡介14
1.5.1Linux對處理器的支持14
1.5.2Linux支持的處理器結構15
1.5.3μCLinux支持的處理器結構15
習題16
第2章微處理器組成及程式設計師模型17
2.1S3C2410A微處理器概述17
2.2S3C2410A微處理器的組成與引腳信號18
2.2.1S3C2410A微處理器的組成18
2.2.2S3C2410A晶片封裝、引腳編號與引腳信號名22
2.2.3S3C2410A特殊功能暫存器簡介26
2.3ARM920T核262.4ARM程式設計師模型26
2.4.1處理器操作狀態27
2.4.2存儲器格式和數據類型27
2.4.3處理器操作方式29
2.4.4暫存器29
2.4.5程式狀態暫存器33
2.4.6異常34
2.4.7中斷延遲39
2.4.8Reset39
2.5OMAP3530微處理器39
2.5.1OMAP3530微處理器概述40
2.5.2OMAP3530套用舉例40
2.5.3OMAP3530微處理器組成42
習題44
第3章存儲器控制器及NandFlash控制器46
3.1存儲器控制器46
3.1.1S3C2410A與存儲器相關的特性簡介46
3.1.2與存儲器晶片連線的S3C2410A引腳信號及使用48
3.1.3存儲器匯流排周期舉例54
3.1.4存儲器控制器特殊功能暫存器57
3.2存儲器組成舉例63
3.2.1使用NorFlash晶片作為引導ROM63
3.2.2使用SDRAM晶片舉例68
3.3NandFlash晶片工作原理78
3.3.1兩種引導模式78
3.3.2NandFlash概述78
3.3.3K9F2808U0CNandFlash晶片工作原理78
3.4NandFlash控制器83
3.4.1NandFlash控制器83
3.4.2NandFlash控制器特殊功能暫存器86
3.4.3NandFlash控制器與NandFlash晶片連線舉例87
3.5套用舉例87
3.5.1UBoot對存儲器控制器特殊功能暫存器初始化87
3.5.2存儲器控制器與乙太網控制器的連線91
3.5.3S3C44B0X與NandFlash晶片的連線91
習題92
第4章時鐘與電源管理、DMA與匯流排優先權95
4.1功耗管理、時鐘與電源管理概述95
4.1.1微處理器功耗管理基礎95
4.1.2時鐘與電源管理概述96
4.1.3時鐘與電源管理用到的S3C2410A引腳信號97
4.2時鐘管理98
4.2.1時鐘與電源管理結構框圖98
4.2.2片外時鐘源的選擇99
4.2.3鎖相環99
4.2.4時鐘控制邏輯100
4.3電源管理102
4.3.1電源管理模式的轉換102
4.3.24種電源管理模式103
4.3.3S3C2410A電源引腳107
4.4時鐘與電源管理特殊功能暫存器及設定107
4.4.1時鐘與電源管理特殊功能暫存器107
4.4.2UBoot對特殊功能暫存器的初始設定110
4.5DMA基礎112
4.5.1DMA含義112
4.5.2DMAC控制輸入傳輸舉例112
4.5.3匯流排主設備、從設備114
4.6DMA傳輸114
4.6.1DMA概述114
4.6.2存儲器到外設DMA傳輸舉例115
4.6.3DMA用到的S3C2410A引腳信號117
4.7DMA請求、有限狀態機和協定117
4.7.1硬體DMA請求與軟體DMA請求117
4.7.2用於DMA操作的有限狀態機118
4.7.3外部DMA請求/回響協定119
4.7.4Unit/Burst傳輸、數據尺寸與自動重裝120
4.7.5外部DMA請求/回響協定傳輸舉例121
4.8DMA特殊功能暫存器122
4.9DMA存儲器到存儲器傳輸測試舉例127
4.10匯流排優先權130
習題131
第5章GPIO連線埠及中斷控制器133
5.1GPIO連線埠概述及引腳信號133
5.1.1GPIO連線埠概述133
5.1.2與GPIO連線埠及其他暫存器相關的S3C2410A引腳信號134
5.2GPIO連線埠控制135
5.3GPIO連線埠特殊功能暫存器136
5.3.1連線埠A~連線埠H暫存器組136
5.3.2其他暫存器144
5.4GPIO連線埠程式舉例151
5.4.1GPIO連線埠特殊功能暫存器在程式中定義151
5.4.2GPIO連線埠初始化配置153
5.4.3GPIO連線埠使用舉例154
5.5中斷控制器概述155
5.5.1與中斷有關的暫存器155
5.5.2中斷處理過程157
5.6中斷控制器操作、中斷源及中斷優先權158
5.6.1中斷控制器操作158
5.6.2中斷源159
5.6.3中斷優先權產生模組159
5.7中斷控制器特殊功能暫存器161
5.8中斷程式舉例167
習題174
第6章片內功能模組177
6.1脈寬調製定時器177
6.1.1PWM定時器概述177
6.1.2PWM定時器操作179
6.1.3PWM定時器特殊功能暫存器184
6.1.4PWM定時器套用舉例188
6.2實時時鐘191
6.2.1RTC概述191
6.2.2RTC組成與操作192
6.2.3RTC特殊功能暫存器193
6.2.4RTC程式舉例197
6.3看門狗定時器199
6.3.1WDT概述199
6.3.2WDT操作200
6.3.3WDT特殊功能暫存器200
6.3.4WDT程式舉例202
6.4通用異步收發器205
6.4.1串列異步通信基礎205
6.4.2UART組成及操作210
6.4.3UART特殊功能暫存器216
6.4.4UART與RS232C接口連線舉例222
6.4.5UART程式舉例224
6.4.6UART與紅外收發器連線及程式舉例227
6.5模數轉換器與觸控螢幕接口229
6.5.1ADC與TS接口基礎知識229
6.5.2ADC與TS接口概述232
6.5.3ADC與TS接口操作233
6.5.4ADC與TS接口特殊功能暫存器236
6.5.5ADC程式舉例239
6.5.6ADC與TS接口程式舉例240
6.6IIC、IIS、SPI匯流排接口及SD主控制器概述243
6.6.1IIC匯流排接口概述243
6.6.2IIS匯流排接口概述245
6.6.3SPI匯流排接口概述247
6.6.4MMC/SD/SDIO概述249
習題251
第7章Linux及嵌入式開發系統組成簡介256
7.1Linux起源及發展256
7.1.1UNIX和GNU軟體256
7.1.2Linux的發展257
7.2核心、shell、檔案系統及實用程式258
7.2.1Linux核心258
7.2.2shell簡介258
7.2.3檔案系統261
7.2.4實用程式262
7.3使用Linux的理由及Linux的不足之處262
7.3.1使用Linux的理由262
7.3.2使用Linux的不足之處263
7.4Linux環境嵌入式開發系統組成簡介264
7.4.1Linux環境嵌入式開發系統組成264
7.4.2主機264
7.4.3目標板264
7.4.4主機與目標板的連線264
7.4.5主機中運行的程式265
7.4.6目標板中運行的程式265
7.4.7開發系統附帶的光碟文檔266
7.5主機安裝的Linux發行版267
7.5.1常用的Linux發行版267
7.5.2Linux發行版在主機的安裝方式268
習題、操作與實驗269
第8章主機及目標板的運行271
8.1終端基礎知識271
8.1.1tty271
8.1.2早期的終端及終端與主機的連線271
8.1.3XWindow、GNOME及KDE簡介273
8.2主機系統引導、登錄及退出Linux274
8.2.1主機系統引導274
8.2.2登錄Linux275
8.2.3Linux的終端276
8.2.4查看及修改用戶使用的shell278
8.2.5通過退出與shell的會話退出Linux280
8.2.6關閉運行的Linux系統281
8.2.7使用幫助命令help和man281
8.3目標板初次運行283
8.3.1目標板連線的電源、連線埠及安裝的作業系統283
8.3.2目標板引導過程簡述284
8.3.3裝入裝載引導程式(vivi)286
8.3.4裝入裝載引導程式(uboot)287
8.3.5主機在Windows環境下的超級終端287
8.3.6主機在Linux環境下的minicom仿真終端(Linux
企業版4.0)290
8.3.7主機在Linux環境下的minicom仿真終端(Linux
企業版5.0)293
8.3.8在虛擬機中增添串口設備296
8.3.9裝載引導程式支持的命令簡介(vivi)300
8.3.10裝載引導程式支持的命令簡介(uboot)302
8.3.11目標板運行的Linux登錄、退出討論306
8.3.12目標板安裝的Linux306
8.3.13目標板運行的Linux命令舉例(S3C2410A)307
8.3.14目標板運行的Linux命令舉例(OMAP3530)310
習題、操作與實驗311
第9章主機開發環境配置313
9.1交叉開發平台基礎313
9.1.1本地開發及交叉開發313
9.1.2GNU跨平台工具鏈組成314
9.1.3如何獲取工具鏈314
9.1.4工具鏈的組件及GDB簡介315
9.2交叉工具鏈安裝舉例316
9.2.1交叉工具鏈安裝舉例(S3C2410A)316
9.2.2交叉工具鏈安裝舉例(OMAP3530)318
9.3主機Linux環境網路配置舉例(S3C2410A)321
9.3.1主機Linux環境IP位址設定322
9.3.2主機Linux環境網路防火牆設定325
9.3.3主機與目標板網路通信測試326
9.3.4主機Linux環境NFS設定328
9.3.5輸入、編譯、運行一個程式全過程舉例332
9.4主機Linux環境網路配置舉例(OMAP3530)333
9.4.1主機Linux環境IP位址設定333
9.4.2主機Linux環境網路防火牆設定335
9.4.3主機與目標板網路通信測試337
9.4.4主機Linux環境NFS設定337
9.4.5輸入、編譯、運行一個程式全過程舉例340
習題、操作與實驗342
第10章應用程式編程舉例及驅動程式分析(一)343
10.1讀取、轉換時間函式編程舉例343
10.1.1Linux查看、設定時間的命令343
10.1.2常用的讀取、轉換時間的函式344
10.1.3讀取、轉換時間的函式編程舉例(S3C2410A)345
10.1.4例10.1對應的Makefile檔案(S3C2410A)347
10.1.5讀取、轉換時間的函式編程舉例(OMAP3530)348
10.1.6例10.2對應的Makefile檔案(OMAP3530)348
10.1.7執行例10.2程式前的操作步驟舉例(OMAP3530)349
10.2多執行緒編程舉例350
10.2.1Linux執行緒概述350
10.2.2執行緒、互斥量、條件變數函式351
10.2.3生產者、消費者編程舉例(S3C2410A)353
10.3串列連線埠及標準輸入/輸出/錯誤編程舉例358
10.3.1Linux標準輸入/輸出/錯誤系統調用358
10.3.2Linux標準輸入/輸出/錯誤系統調用編程舉例
(S3C2410A)360
10.3.3Linux標準輸入/輸出/錯誤系統調用編程舉例
(OMAP3530)361
10.3.4串列連線埠設備與檔案關聯及系統調用362
10.3.5串列連線埠設備與檔案關聯及系統調用編程舉例
(S3C2410A)363
10.3.6串列連線埠設備與檔案關聯及系統調用編程舉例
(OMAP3530)365
10.3.7C語言標準輸入/輸出/錯誤函式367
10.3.8C語言標準輸入/輸出/錯誤函式編程舉例(S3C2410A)368
10.3.9C語言標準輸入/輸出/錯誤函式編程舉例(OMAP3530)369
10.4ADC應用程式編程舉例(S3C2410A)369
10.4.1ADC編程基礎369
10.4.2ADC應用程式編程舉例371
10.5ADC驅動程式原始碼分析(S3C2410A)375
10.5.1概述375
10.5.2Linux設備驅動程式概述376
10.5.3s3c2410adc.h頭檔案原始碼分析380
10.5.4s3c2410.h_chip.h頭檔案原始碼分析381
10.5.5s3c2410adc.c設備驅動程式原始碼分析383
習題、操作、實驗及編程389
第11章目標板出廠軟體燒寫實驗(S3C2410A)392
11.1目標板出廠軟體燒寫概述392
11.1.1目標板出廠軟體392
11.1.2Linux環境要燒寫的檔案392
11.1.3什麼情況下燒寫目標板出廠軟體392
11.1.4燒寫環境393
11.2目標板出廠軟體燒寫實驗(一)393
11.2.1主機Windows環境下安裝JTAG驅動程式393
11.2.2通過JTAG連線埠傳送並燒寫裝載引導程式vivi394
11.2.3通過串口傳送並燒寫核心zImage395
11.2.4通過串口傳送並燒寫根檔案系統root.cramfs397
11.2.5通過網口傳送並燒寫應用程式yaffs.tar.bz2397
11.2.6格式化快閃記憶體以及通過串口傳送並燒寫vivi402
11.3目標板出廠軟體燒寫實驗(二)402
11.3.1通過網口傳送並燒寫核心zImage403
11.3.2通過網口傳送並燒寫根檔案系統root.cramfs406
11.4目標板出廠軟體燒寫實驗(三)407
11.4.1通過JTAG連線埠傳送並燒寫裝載引導程式uboot407
11.4.2通過網口傳送並燒寫核心uImage409
11.4.3通過網口傳送並燒寫根檔案系統root.cramfs411
11.4.4通過網口傳送並燒寫應用程式yaffs.tar.bz2412
11.5目標板出廠軟體燒寫小結413
習題、操作與實驗413
第12章應用程式編程舉例及驅動程式分析(二)415
12.1DAC應用程式編程舉例及驅動程式分析415
12.1.1DAC硬體基礎415
12.1.2DAC應用程式編程舉例(S3C2410A)417
12.1.3DAC驅動程式原始碼分析(S3C2410A)419
12.2PWM直流電機應用程式編程舉例及驅動程式分析422
12.2.1PWM直流電機(S3C2410A)422
12.2.2編譯、載入驅動程式模組(S3C2410A)423
12.2.3PWM直流電機應用程式編程舉例(S3C2410A)426
12.2.4PWM直流電機驅動程式原始碼分析(S3C2410A)428
12.3LED應用程式編程舉例及驅動程式分析429
12.3.1七段LED概述429
12.3.28×8點陣LED顯示概述432
12.3.3CPLD與七段LED、8×8點陣LED連線舉例(S3C2410A)435
12.3.4七段LED、8×8點陣LED應用程式編程舉例(S3C2410A)437
12.3.5LED驅動程式原始碼分析(S3C2410A)439
習題、操作、實驗及編程442
第13章裝載引導程式443
13.1常見的裝載引導程式443
13.2UBoot概述444
13.3編譯、燒寫、運行UBoot及裝入核心446
13.3.1對標準開發板原始碼進行編譯、連結並燒寫UBoot446
13.3.2UBoot等映像檔案在開發板存儲位置舉例446
13.3.3加電運行UBoot及UBoot裝入核心447
13.4UBoot監視命令及環境變數448
13.4.1使用命令及在原始碼中配置監視命令448
13.4.2環境變數449
13.5頂層目錄、編譯過程及配置頭檔案舉例451
13.5.1UBoot原始碼頂層目錄及編譯指定的開發板451
13.5.2標準開發板配置頭檔案及舉例453
13.6UBoot啟動過程及舉例456
習題、操作與實驗459
第14章核心461
14.1核心簡介461
14.1.1核心461
14.1.2核心在嵌入式Linux系統中的位置及核心組成461
14.2核心映像、Linux啟動過程及輸出信息463
14.2.1常見核心映像檔案zImage和uImage463
14.2.2Linux啟動過程簡介464
14.2.3Linux啟動期間控制台輸出的信息467
14.3Linux核心原始碼468
14.3.1獲得核心原始碼468
14.3.2Linux核心原始碼樹及核心目錄469
14.4核心配置檔案及配置編輯器472
14.4.1核心配置檔案472
14.4.2核心配置編輯器473
14.4.3頂層.config檔案內容及Kconfig檔案內容舉例475
14.5聯編核心及聯編核心模組477
14.5.1聯編核心舉例478
14.5.2聯編核心模組舉例480
14.5.3清理480
習題、操作與實驗481
附錄ALinux基礎483
A.1用戶和組483
A.1.1賬戶483
A.1.2與用戶和組關聯的檔案484
A.1.3與用戶和組相關的命令486
A.2檔案系統及Linux常用命令488
A.2.1目錄結構及根的基本目錄488
A.2.2創建和刪除目錄489
A.2.3常用目錄操作命令491
A.2.4檔案類型及連結493
A.2.5檔案和目錄的許可權494
A.2.6創建、修改和刪除檔案495
A.2.7常用檔案操作命令496
A.2.8元字元500
A.3用vi輸入源程式500
A.3.1vi功能簡介500
A.3.2常用vi操作501
A.3.3輸入、保存源程式舉例502
A.4make及Makefile舉例504
A.4.1make、Makefile檔案內容簡介504
A.4.2編譯檔案509
A.5主機運行用戶程式舉例510
A.5.1運行一個程式舉例510
A.5.2輸入、編譯、運行程式過程總結512
習題512
附錄B英漢名詞術語對照表514
參考文獻523