本書很好地把握通用知識與芯片相關知識之間的平衡。書中對于嵌入式“通用知識”的基本原理, 以應用為立足點, 進行語言簡潔、邏輯清晰的闡述, 同時注意與芯片相關知識之間的銜接, 使讀者在更好地理解基本原理的基礎上, 理解芯片應用的設計, 同時反過來, 加深對通用知識的理解。
(1)把握通用知識與芯片相關知識之間的平衡。
(2)把握硬件與軟件的關系。
(3)對底層驅動進行構件化封裝。
(4)設計合理的測試用例。書
(5)網上光盤提供了所有模塊完整的底層驅動構件化封裝程序與測試用例。
(6)提供硬件核心板、寫入調試器,方便讀者進行實踐與應用。同時提供了核心板與蘇州大學恩智浦嵌入式中心設計的擴展板對接,以滿足教學實驗需要。
嵌入式計算機系統簡稱為嵌入式系統,其概念*初源于傳統測控系統對計算機的需求。隨著以微處理器(MPU)為內核的微控制器(MCU)制造技術的不斷進步,計算機領域在通用計算機系統與嵌入式計算機系統這兩大分支分別得以發展。通用計算機已經在科學計算、通信、日常生活等各個領域產生重要影響。在后PC時代,嵌入式系統的廣泛應用是計算機發展的重要特征。一般來說,嵌入式系統的應用范圍可以粗略地分為兩大類: 一類是電子系統的智能化(如工業控制、汽車電子、數據采集、測控系統、家用電器、現代農業、傳感網應用等),這類應用也被稱為微控制器MCU領域。另一類是計算機應用的延伸(如平板電腦、手機、電子圖書等),這類應用也被稱為應用處理器MAP領域。在ARM產品系列中,ARM CortexM系列與ARM CortexR系列適用于電子系統的智能化類應用,即微控制器領域; ARM CortexA系列適用于計算機應用的延伸,即應用處理器領域。不論如何分類,嵌入式系統的技術基礎是不變的,即要完成一個嵌入式系統產品的設計,需要有硬件、軟件及行業領域相關知識。但是,隨著嵌入式系統中軟件規模日益增大,對嵌入式底層驅動軟件的封裝提出了更高的要求,可復用性與可移植性受到特別的關注,嵌入式軟硬件構件化開發方法逐步被業界所重視。
2015年12月7日,恩智浦和飛思卡爾完成合并,合并后的公司名稱仍為“恩智浦半導體”,成為全球汽車和安全半導體解決方案*大供應商以及全球第四大非存儲類半導體企業。公司持續為互聯汽車、物聯網設備端到端安全與數據保護等領域提供更為完善的解決方案,旨在幫助人們實現“智慧生活,安全連接”。目前,恩智浦在北京、上海、深圳、蘇州等設有辦事處或研發中心,在大中華區員工總數超過11000人。
該公司的微控制器及應用處理器系列,由不同位數、不同封裝形式、不同溫度范圍、所含模塊不同等構成了龐大的產品系列,廣泛地應用于汽車電子、消費電子、工業控制、網絡、無線市場及視頻等嵌入式系統各個領域,為嵌入式系統各種應用提供了選擇與解決方案,使得用戶可以各取所需。不論是電子系統智能化還是計算機應用延伸的嵌入式應用設計,無論需要怎樣的系統功能和集成度,總能從這個龐大產品系列中選取一款合適的芯片進行應用開發。這正是嵌入式系統產品設計者所期望的,也節省了嵌入式學習者的時間,可以加快開發進度,提高開發質量。
本書以該公司于2012年開始推出的32位ARM CortexM0+內核的KL系列MCU為藍本闡述嵌入式應用。本書第二版、第三版為普通高等教育“十一五”國家級規劃教材,本版為普通高等教育“十二五”國家級規劃教材、江蘇省高等學校重點教材。本版是在2013年出版的第三版基礎上重新撰寫。主要變化有: 在ARM CortexM0+內核不變的前提下,增加了KL26芯片,重新梳理了通用知識要素,優化了底層構件封裝; 將大部分驅動的使用方法提前闡述,而驅動構件的設計方法后置,目的是先學會使用進行實際編程,后理解構件的設計方法。因構件設計方法部分有一定難度,對于不同要求的教學場景,也可不要求學生理解全部構件的設計方法,講解一兩個即可。
隨著作者多年教學與開發的經驗積累,本書以嵌入式硬件構件及底層軟件構件設計為主線,基于嵌入式軟件工程的思想,按照“通用知識—驅動構件使用方法—測試實例—芯片編程結構—構件的設計方法”的路線,逐步闡述電子系統智能化嵌入式應用的軟件與硬件設計。
本書具有以下特點。
(1) 把握通用知識與芯片相關知識之間的平衡。書中對于嵌入式“通用知識”的基本原理,以應用為立足點,進行語言簡潔、邏輯清晰的闡述,同時注意與芯片相關知識之間的銜接,使讀者在更好地理解基本原理的基礎上,理解芯片應用的設計,同時反過來,加深對通用知識的理解。
(2) 把握硬件與軟件的關系。嵌入式系統是軟件與硬件的綜合體,嵌入式系統設計是一個軟件、硬件協同設計的工程,不能像通用計算機那樣,軟件、硬件完全分開來看。特別是對電子系統智能化嵌入式應用來說,沒有對硬件的理解就不可能寫好嵌入式軟件,同樣沒有對軟件的理解也不可能設計好嵌入式硬件。因此,本書注重把握硬件知識與軟件知識之間的關系。
(3) 對底層驅動進行構件化封裝。書中對每個模塊均給出根據嵌入式軟件工程基本原則并按照構件化封裝要求編制底層驅動程序,同時給出詳細、規范的注釋及對外接口,為實際應用提供底層構件,方便移植與復用,可以為讀者進行實際項目開發節省大量時間。
(4) 設計合理的測試用例。書中所有源程序均經測試通過,并保留測試用例在本書的網上光盤中,避免了因例程的書寫或固有錯誤給讀者帶來煩惱。這些測試用例,也為讀者驗證與理解帶來方便。
(5) 網上教學資源提供了所有模塊完整的底層驅動構件化封裝程序與測試用例。需要使用PC的程序的測試用例,還提供了PC的C#源程序。網上教學資源中還提供了閱讀資料、開發環境的簡明使用方法、寫入器驅動與使用方法、部分工具軟件、有關硬件原理圖等。網上教學資源的版本將會適時更新。
(6) 提供硬件核心板、寫入調試器,方便讀者進行實踐與應用。同時提供了核心板與蘇州大學恩智浦嵌入式中心設計的擴展板對接,以滿足教學實驗需要。
本書由王宜懷負責編制提綱和統稿工作,并撰寫第1~6章、第14章。吳瑾撰寫第7~10章、文瑾撰寫第11~13章。研究生王紹丹、徐達、劉鍇、陸偉國、司蕭俊、白聰、胡唯唯等協助書稿整理及程序調試工作,他們卓有成效的工作,使本書更加實用。恩智浦公司的馬莉女士一直關心支持蘇州大學恩智浦嵌入式中心的建設,為本書的撰寫提供了硬件及軟件資料,并提出了許多寶貴建議。恩智浦公司的許多技術人員提供了技術支持。清華大學出版社為本書的出版給予了大力的支持,在此一并表示誠摯的謝意。
鑒于作者水平有限,書中難免存在不足和疏漏之處,懇望讀者提出寶貴意見和建議,以便再版時改進。
蘇州大學王宜懷2017年3月
第1章概述
1.1嵌入式系統的定義、發展簡史、分類及特點
1.1.1嵌入式系統的定義
1.1.2嵌入式系統的由來及發展簡史
1.1.3嵌入式系統的分類
1.1.4嵌入式系統的特點
1.2嵌入式系統的學習困惑、知識體系及學習建議
1.2.1嵌入式系統的學習困惑
1.2.2嵌入式系統的知識體系
1.2.3基礎階段的學習建議
1.3微控制器與應用處理器簡介
1.3.1微控制器簡介
1.3.2以MCU為核心的嵌入式測控產品的基本組成
1.3.3應用處理器簡介
1.4嵌入式系統常用術語
1.4.1與硬件相關的術語
1.4.2與通信相關的術語
1.4.3與功能模塊相關的術語
1.5嵌入式系統常用的C語言基本語法概要
1.5.1C語言的運算符與數據類型
1.5.2程序流程控制
1.5.3函數
1.5.4數據存儲方式
1.5.5編譯預處理
小結
習題
第2章ARM CortexM0+處理器
2.1ARM CortexM0+處理器簡介
2.1.1ARM CortexM0+處理器內部結構概要
2.1.2ARM CortexM0+處理器存儲器映像
2.1.3ARM CortexM0+處理器的寄存器
2.2ARM CortexM0+處理器的指令系統
2.2.1ARM CortexM0+指令簡表與尋址方式
2.2.2數據傳送類指令
2.2.3數據操作類指令
2.2.4跳轉控制類指令
2.2.5其他指令
2.3ARM CortexM0+指令集與機器碼對應表
2.4GNU匯編語言的基本語法
2.4.1ARMGNU匯編語言格式
2.4.2偽指令
小結
習題
第3章存儲映像、中斷源與硬件*小系統
3.1恩智浦Kinetis系列微控制器簡介
3.2KL系列MCU簡介與體系結構概述
3.2.1KL系列MCU簡介
3.2.2KL系列MCU體系結構概述
3.3KL25/26系列存儲映像與中斷源
3.3.1KL25/26系列存儲映像
3.3.2KL25/26中斷源
3.4KL25/26的引腳功能
3.4.1硬件*小系統引腳
3.4.2對外提供服務的引腳
3.5KL25/26硬件*小系統原理圖
3.5.1電源及其濾波電路
3.5.2復位電路及復位功能
3.5.3晶振電路
3.5.4SWD接口電路
小結
習題
第4章GPIO及程序框架
4.1通用I/O接口基本概念及連接方法
4.2端口控制模塊與GPIO模塊的編程結構
4.2.1端口控制模塊——決定引腳復用功能
4.2.2GPIO模塊——對外引腳與內部寄存器
4.2.3GPIO基本編程步驟與基本打通程序
4.3GPIO驅動構件封裝方法與驅動構件封裝規范
4.3.1設計GPIO驅動構件的必要性及GPIO驅動構件封裝要點分析
4.3.2底層驅動構件封裝規范概要與構件封裝的前期準備
4.3.3KL25的GPIO驅動構件源碼及解析
4.4利用構件方法控制小燈閃爍
4.4.1Light構件設計
4.4.2Light構件測試工程主程序
4.5工程文件組織框架與*個C語言工程分析
4.5.1工程框架及所含文件簡介
4.5.2鏈接文件常用語法及鏈接文件解析
4.5.3機器碼文件解析
4.5.4芯片上電啟動運行過程解析
4.6*個匯編語言工程: 控制小燈閃爍
4.6.1匯編工程文件的組織
4.6.2匯編語言GPIO構件及使用方法
4.6.3匯編語言Light構件及使用方法
4.6.4匯編語言Light測試工程主程序及匯編工程運行過程
小結
習題
第5章嵌入式硬件構件與底層驅動構件基本規范
5.1嵌入式硬件構件
5.1.1嵌入式硬件構件概念與嵌入式硬件構件分類
5.1.2基于嵌入式硬件構件的電路原理圖設計簡明規則
5.2嵌入式底層驅動構件的概念與層次模型
5.2.1嵌入式底層驅動構件的概念
5.2.2嵌入式硬件構件和軟件構件的層次模型
5.3底層驅動構件的封裝規范
5.3.1構件設計的基本思想與基本原則
5.3.2編碼風格基本規范
5.3.3公共要素文件
5.3.4頭文件的設計規范
5.3.5源程序文件的設計規范
5.4硬件構件及底層軟件構件的重用與移植方法
小結
習題
第6章串行通信模塊及*個中斷程序結構
6.1異步串行通信的通用基礎知識
6.1.1串行通信的基本概念
6.1.2RS232總線標準
6.1.3TTL電平到RS232電平轉換電路
6.1.4串行通信編程模型
6.2KL25/26芯片UART驅動構件及使用方法
6.2.1KL25/26芯片UART引腳
6.2.2UART驅動構件基本要素分析與頭文件
6.2.3printf的設置方法與使用
6.3ARM CortexM0+中斷機制及KL25/26中斷編程步驟
6.3.1關于中斷的通用基礎知識
6.3.2ARM CortexM0+非內核模塊中斷編程結構
6.3.3KL25/26中斷編程步驟——以串口接收中斷為例
6.4UART驅動構件的設計方法
6.4.1UART模塊編程結構
6.4.2UART驅動構件源碼
小結
習題
第7章定時器相關模塊
7.1ARM CortexM0+內核定時器
7.1.1SysTick模塊的編程結構
7.1.2SysTick構件設計及測試工程
7.2脈寬調制、輸入捕捉與輸出比較通用基礎知識
7.2.1脈寬調制PWM通用基礎知識
7.2.2輸入捕捉與輸出比較通用基礎知識
7.3TPM模塊的驅動構件及使用方法
7.3.1TPM模塊的脈寬調制、輸入捕捉、輸出比較引腳
7.3.2TPM構件頭文件
7.3.3TPM測試工程
7.4TPM模塊驅動構件的設計方法
7.4.1TPM模塊的編程結構
7.4.2TPM驅動構件的設計
7.5周期中斷定時器PIT模塊
7.5.1周期中斷定時器PIT模塊功能概述
7.5.2PIT驅動構件及使用方法
7.5.3PIT驅動構件設計
7.6低功耗定時器LPTMR模塊
7.6.1低功耗定時器LPTMR模塊功能概述
7.6.2LPTMR驅動構件及使用方法
7.6.3LPTMR驅動構件的設計
7.7實時時鐘RTC模塊
7.7.1RTC模塊功能概述
7.7.2RTC驅動構件及使用方法
7.7.3RTC驅動構件的設計
小結
習題
第8章GPIO應用——鍵盤、LED及LCD
8.1鍵盤基礎知識與鍵盤驅動構件設計
8.1.1鍵盤模型及接口
8.1.2鍵盤編程基本問題、掃描編程原理及鍵值計算
8.1.3鍵盤驅動構件的設計
8.2LED數碼管基礎知識與LED驅動構件設計
8.2.1LED數碼管基礎知識
8.2.2LED驅動構件設計及使用方法
8.3LCD基礎知識與LCD驅動構件設計
8.3.1LCD的特點和分類
8.3.2點陣字符型LCD模塊控制器HD44780
8.3.3LCD構件設計
8.4鍵盤、LED及LCD驅動構件測試實例
小結
習題
第9章Flash在線編程
9.1Flash驅動構件及使用方法
9.1.1Flash在線編程的基本概念
9.1.2KL25/26芯片Flash構件頭文件及使用方法
9.2Flash保護與加密
9.2.1Flash保護含義及保護函數的使用說明
9.2.2Flash加密方法與去除密碼方法
9.3Flash驅動構件的設計方法
9.3.1Flash模塊編程結構
9.3.2Flash驅動構件設計技術要點
9.3.3Flash驅動構件封裝要點分析
9.3.4Flash驅動構件的源程序代碼
小結
習題
第10章ADC、DAC與CMP模塊
10.1模擬/數字轉換器ADC
10.1.1模/數轉換器ADC的通用基礎知識
10.1.2ADC驅動構件及使用方法
10.1.3ADC模塊的編程結構
10.1.4ADC驅動構件的設計
10.2數字/模擬轉換器DAC
10.2.1數/模轉換器DAC的通用基礎知識
10.2.2DAC驅動構件及使用方法
10.2.3DAC驅動構件的編程結構
10.2.4DAC驅動構件的設計
10.3比較器CMP
10.3.1比較器CMP的通用基礎知識
10.3.2CMP驅動構件及使用方法
10.3.3CMP驅動構件的編程結構
10.3.4CMP驅動構件的設計
小結
習題
第11章SPI、I2C與TSI模塊
11.1串行外設接口SPI模塊
11.1.1串行外設接口SPI的通用基礎知識
11.1.2SPI驅動構件頭文件及使用方法
11.1.3SPI模塊的編程結構
11.1.4SPI驅動構件的設計
11.2集成電路互連總線I2C模塊
11.2.1集成電路互連總線I2C的通用基礎知識
11.2.2I2C驅動構件頭文件及使用方法
11.2.3I2C模塊的編程結構
11.2.4I2C驅動構件的設計
11.3觸摸感應接口TSI模塊
11.3.1觸摸感應接口TSI的通用基礎知識
11.3.2TSI驅動構件頭文件及使用方法
11.3.3TSI模塊的編程結構
11.3.4TSI驅動構件的設計
小結
習題
第12章USB編程
12.1USB應用開發基礎知識
12.1.1USB的物理特性
12.1.2USB主機與設備的概念與特性
12.1.3USB中斷概述
12.2USB設備(從機)的應用編程方法
12.2.1USB設備(從機)驅動構件及使用方法
12.2.2USB設備(從機)方MCU編程實例
12.2.3USB設備(從機)PC驅動問題
12.2.4與USB設備(從機)通信的PC方程序設計
12.3USB主機的應用編程方法
12.3.1USB主機驅動構件及使用方法
12.3.2USB主機方MCU編程實例
12.4設計微控制器的USB驅動構件應掌握的基礎知識
12.4.1USB底層編程涉及的基本概念
12.4.2USB底層編程涉及的描述符及設備請求
12.4.3USB設備狀態
12.4.4USB總線的枚舉過程
12.5KL25/26芯片USB模塊的編程結構
12.5.1USB模塊寄存器
12.5.2USB模塊中斷詳解
12.5.3USB設備(從機)編程結構
12.5.4USB主機編程結構
12.6KL25/26芯片作為USB設備(從機)的驅動構件設計
12.7KL25/26芯片作為USB主機的驅動構件設計
第13章系統時鐘與其他功能模塊
13.1時鐘系統
13.1.1時鐘系統概述
13.1.2時鐘模塊概要與編程要點
13.1.3時鐘模塊測試實例
13.2電源模塊
13.2.1電源模式控制
13.2.2電源模式轉換
13.3低漏喚醒單元
13.4看門狗
13.5復位模塊
13.5.1上電復位
13.5.2系統復位源
13.5.3調試復位
13.6位操作引擎技術及應用方法
13.6.1位操作引擎概述
13.6.2位操作引擎的應用機制解析
13.6.3位操作引擎對GPIO部分的使用說明
13.6.4位操作引擎使用注意點
13.6.5測試實例
小結
習題
第14章進一步學習指導
14.1關于更為詳細的技術資料
14.2關于實時操作系統RTOS
14.3關于嵌入式系統穩定性問題
附錄AKL25/26芯片引腳復用功能
A.1KL25引腳復用功能
A.2KL26引腳復用功能
附錄BKL25/26硬件*小系統原理圖
B.1KL25硬件*小系統原理圖
B.2KL26硬件*小系統原理圖
附錄Cprintf的常用格式
C.1printf調用的一般格式
C.2格式字符串
C.3輸出格式舉例
參考文獻