前 言
隨著計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)和微電子技術(shù)的深入發(fā)展,嵌入式系統(tǒng)的應(yīng)用無處不在。ARM是目前公認(rèn)的業(yè)界領(lǐng)先的32位嵌入式RISC(精簡(jiǎn)指令計(jì)算機(jī))微處理器,并且全世界有200多家領(lǐng)先的半導(dǎo)體廠商獲得ARM授權(quán),組成了一個(gè)牢靠的產(chǎn)業(yè)聯(lián)盟,每秒可生產(chǎn)90個(gè)芯片,基于ARM體系結(jié)構(gòu)的微處理器占領(lǐng)了32位嵌入式系統(tǒng)領(lǐng)域的大部分份額。
ARM公司的微控制器Cortex系列為嵌入式市場(chǎng)提供了一個(gè)三管齊下的解決方案。Cortex-A系列提供高性能應(yīng)用處理器,Cortex-R系列專門針對(duì)實(shí)時(shí)、深度嵌入式解決方案,Cortex-M系列專注于低成本嵌入式微控制器。ARM Cortex-M是一系列可向上兼容的高能效、易于使用的處理器,可以幫助開發(fā)人員滿足將來的嵌入式應(yīng)用的需要,以更低的成本提供更多功能、不斷增加連接、改善代碼重用和提高能效。Cortex-M0作為Cortex-M系列的一款基于ARMv6M架構(gòu)的RISC處理器,集8位單片機(jī)的價(jià)格和32位ARM處理器的性能于一身,為目前能耗最低的最小的ARM處理器之一。
NXP公司的LPC1100系列處理器是全球首個(gè)基于Cortex-M0內(nèi)核的微控制器系列,時(shí)鐘速度可達(dá)50MHz,每秒4500多萬條指令,可以實(shí)現(xiàn)更低的功耗和更長的電池壽命,是電池供電的消費(fèi)電子設(shè)備、智能儀表、電機(jī)控制等的理想之選。LPC1100系列豐富,不僅有基本LPC1100系列,還有LPC1100L更低功耗系列、LPC11U00 USB系列、LPC11C00 CAN總線系列等多種選擇。LPC1100系列得到廣泛的工具廠商的支持,如Keil(ARM旗下公司)、IAR Systems、Hitex Development Tools、Embedded Artists和Labcenter Electronics等公司。
本書主要以LPC1100系列微控制器為硬件平臺(tái),詳細(xì)介紹Cortex-M0微控制器的原理與開發(fā)技術(shù),基于Proteus仿真軟件平臺(tái)設(shè)計(jì)最小應(yīng)用系統(tǒng)板和具有在板仿真器的口袋開發(fā)板以及相關(guān)例程。
第1章簡(jiǎn)要介紹嵌入式系統(tǒng)的定義、分類、歷史以及發(fā)展趨勢(shì),主要介紹嵌入式操作系統(tǒng)的基本知識(shí)和對(duì)ARM Cortex-M處理器的支持情況,并對(duì)NXP公司ARM Cortex-M0系列處理器及集成開發(fā)環(huán)境和仿真軟件平臺(tái)進(jìn)行簡(jiǎn)要介紹。
第2章主要介紹ARM Cortex-M0處理器的結(jié)構(gòu)與特性,內(nèi)核體系結(jié)構(gòu)的介紹包括總線架構(gòu)、編程模型、存儲(chǔ)器模型、異常模型、電源管理和系統(tǒng)控制模塊、嵌套向量中斷控制器、系統(tǒng)節(jié)拍定時(shí)器等核內(nèi)外設(shè),結(jié)合CMSIS對(duì)內(nèi)部函數(shù)和外設(shè)的操作進(jìn)行講解。
第3章主要介紹LPC1100系列處理器的基礎(chǔ)部分,包括其基本結(jié)構(gòu)、存儲(chǔ)器管理、時(shí)鐘與PLL、引腳描述與I/O配置、GPIO、中斷和串行線調(diào)試接口,在此基礎(chǔ)上講解LPC1100最小系統(tǒng)的設(shè)計(jì)方法,并給出一個(gè)LPC1114開發(fā)板的設(shè)計(jì)實(shí)例。
第4章主要介紹LPC1100系列處理器外設(shè)的結(jié)構(gòu)及工作原理,包括通用定時(shí)器/計(jì)數(shù)器、看門狗定時(shí)器、通用異步收發(fā)器UART、SSP同步串行端口控制器、I2C總線接口、A-D轉(zhuǎn)換器和電源管理單元,并對(duì)部分外設(shè)進(jìn)行示例操作。
第5章主要介紹基于CMSIS接口標(biāo)準(zhǔn)的ARM Cortex-M0軟件設(shè)計(jì),包括Cortex微控制器軟件接口標(biāo)準(zhǔn)CMSIS的基本構(gòu)架以及如何在Keil MDK軟件中使用CMSIS。通過本章的學(xué)習(xí),讀者可以掌握基于CMSIS接口標(biāo)準(zhǔn)的函數(shù)的使用。
本書由張永輝組織完成編寫任務(wù),團(tuán)隊(duì)成員楊永欽、易家傅、陳敏、潘學(xué)松、馮爾理和王萍等多位同事參與了編寫工作。劉一鳴、賈爍、王容、謝宇威、張帥巖、何超等碩士研究生對(duì)本書的編寫進(jìn)行了資料整理和開發(fā)板調(diào)試等工作;本書的出版得到了清華大學(xué)丁天懷教授的鼎力支持;編寫過程中得到了NXP公司王朋朋女士、辛華峰先生、梁平先生以及廣州風(fēng)標(biāo)公司匡載華先生的大力支持和幫助,在此表示衷心的感謝!
ARM Cortex-M0的功能強(qiáng)大,LPC1100微控制器的型號(hào)豐富,但限于篇幅,本書只對(duì)部分內(nèi)容進(jìn)行介紹。由于編者的水平有限,書中的錯(cuò)誤在所難免,懇請(qǐng)讀者批評(píng)指正。
張永輝
于海南大學(xué)
目 錄
前 言
第1章 嵌入式系統(tǒng)概述1
1.1 嵌入式系統(tǒng)1
1.1.1 嵌入式系統(tǒng)的定義1
1.1.2 嵌入式系統(tǒng)的歷史1
1.1.3 嵌入式系統(tǒng)的發(fā)展趨勢(shì)2
1.2 嵌入式處理器3
1.3 嵌入式操作系統(tǒng)5
1.3.1 嵌入式操作系統(tǒng)簡(jiǎn)介5
1.3.2 嵌入式實(shí)時(shí)操作系統(tǒng)的特點(diǎn)6
1.3.3 常用的嵌入式操作系統(tǒng)6
1.4 ARM Cortex系列嵌入式處理器10
1.5 ARM Cortex-M0/M0+處理器12
1.5.1 Cortex-M0/M0+處理器簡(jiǎn)介12
1.5.2 Cortex-M0/M0+處理器的特性13
1.6 NXP公司Cortex-M0/M0+系列處理器13
1.6.1 LPC800系列14
1.6.2 LPC1100/L系列16
1.6.3 LPC1200系列19
1.7 ARM Cortex-M處理器開發(fā)工具21
1.7.1 集成開發(fā)環(huán)境21
1.7.2 Proteus Design Suite仿真平臺(tái)27
1.7.3 嵌入式操作系統(tǒng)支持29
習(xí)題30
第2章 ARM Cortex-M0內(nèi)核體系結(jié)構(gòu)31
2.1 處理器結(jié)構(gòu)與特性31
2.2 總線架構(gòu)33
2.3 編程模型34
2.3.1 操作模式和狀態(tài)34
2.3.2 堆棧34
2.3.3 內(nèi)核寄存器35
2.3.4 內(nèi)部函數(shù)38
2.4 存儲(chǔ)器模型39
2.4.1 存儲(chǔ)區(qū)、類型和屬性39
2.4.2 存儲(chǔ)器訪問秩序40
2.4.3 存儲(chǔ)器訪問的行為41
2.4.4 存儲(chǔ)器的字節(jié)存儲(chǔ)順序41
2.4.5 數(shù)據(jù)類型42
2.5 異常模型42
2.5.1 異常狀態(tài)42
2.5.2 異常類型42
2.5.3 向量表44
2.5.4 異常優(yōu)先級(jí)44
2.5.5 異常的進(jìn)入和返回44
2.5.6 中斷輸入及掛起行為46
2.5.7 故障處理48
2.5.8 異常處理程序48
2.6 電源管理50
2.6.1 進(jìn)入睡眠模式50
2.6.2 從睡眠模式喚醒50
2.6.3 電源管理編程提示51
2.7 核內(nèi)外設(shè)51
2.7.1 系統(tǒng)控制模塊51
2.7.2 嵌套向量中斷控制器56
2.7.3 系統(tǒng)節(jié)拍定時(shí)器59
習(xí)題62
第3章 LPC1100系列處理器基礎(chǔ)63
3.1 LPC1100系列處理器基本結(jié)構(gòu)63
3.2 存儲(chǔ)器管理64
3.2.1 LPC1100系列處理器存儲(chǔ)器映射64
3.2.2 異常向量表及其重映射65
3.2.3 Boot ROM66
3.2.4 Flash存儲(chǔ)器訪問67
3.3 系統(tǒng)控制模塊67
3.3.1 系統(tǒng)控制模塊概述67
3.3.2 引腳描述68
3.3.3 系統(tǒng)控制模塊寄存器68
3.3.4 復(fù)位84
3.3.5 掉電檢測(cè)84
3.3.6 代碼安全與調(diào)試——代碼安全保護(hù)寄存器84
3.4 時(shí)鐘系統(tǒng)86
3.4.1 時(shí)鐘系統(tǒng)結(jié)構(gòu)86
3.4.2 振蕩器86
3.4.3 多路選擇輸出外部時(shí)鐘87
3.4.4 PLL工作原理與使用88
3.5 引腳描述與I/O口配置92
3.5.1 引腳描述92
3.5.2 I/O口的引腳模式97
3.5.3 I/O口的配置97
3.5.4 I/O配置示例102
3.6 GPIO口的結(jié)構(gòu)及功能104
3.6.1 GPIO口的結(jié)構(gòu)特點(diǎn)104
3.6.2 GPIO口的配置104
3.6.3 GPIO口中斷107
3.6.4 GPIO應(yīng)用示例109
3.7 中斷源及NVIC相關(guān)寄存器110
3.7.1 中斷源110
3.7.2 NVIC相關(guān)寄存器113
3.8 串行線調(diào)試115
3.8.1 串行線調(diào)試概述115
3.8.2 串行線調(diào)試接口116
3.8.3 SWD調(diào)試接口設(shè)置116
3.9 LPC1100最小系統(tǒng)和開發(fā)板117
3.9.1 LPC1100最小系統(tǒng)117
3.9.2 LPC1114開發(fā)板122
3.9.3 ISP程序下載124
習(xí)題126
第4章 LPC1100系列處理器外設(shè)127
4.1 定時(shí)器/計(jì)數(shù)器127
4.1.1 定時(shí)器/計(jì)數(shù)器概述127
4.1.2 定時(shí)器/計(jì)數(shù)器寄存器129
4.1.3 定時(shí)器中斷設(shè)置137
4.1.4 定時(shí)器操作示例139
4.2 通用異步收發(fā)器142
4.2.1 UART概述142
4.2.2 UART接口引腳與配置144
4.2.3 UART寄存器145
4.2.4 RS-485/EIA-485模式的操作164
4.2.5 UART中斷165
4.2.6 UART接口電路設(shè)計(jì)168
4.2.7 UART程序設(shè)計(jì)示例170
4.3 I2C總線接口176
4.3.1 I2C總線接口描述176
4.3.2 I2C總線配置178
4.3.3 I2C寄存器與功能描述178
4.3.4 I2C接口中斷186
4.3.5 I2C操作模式詳解187
4.3.6 I2C狀態(tài)服務(wù)程序199
4.3.7 I2C總線接口應(yīng)用示例199
4.3.8 I2C程序設(shè)計(jì)201
4.4 SSP同步串行端口控制器211
4.4.1 引腳描述212
4.4.2 基本配置213
4.4.3 寄存器描述213
4.4.4 SPI幀格式217
4.4.5 SSI幀格式220
4.4.6 Microwire幀格式222
4.4.7 SSP接口中斷設(shè)置223
4.4.8 SPI接口應(yīng)用示例225
4.5 A-D轉(zhuǎn)換器230
4.5.1 A-D轉(zhuǎn)換器概述230
4.5.2 ADC引腳描述和配置230
4.5.3 ADC寄存器231
4.5.4 基本操作234
4.5.5 ADC中斷設(shè)置235
4.5.6 ADC操作與示例236
4.6 看門狗定時(shí)器239
4.6.1 看門狗定時(shí)器概述239
4.6.2 時(shí)鐘和功率控制240
4.6.3 看門狗定時(shí)器結(jié)構(gòu)240
4.6.4 看門狗定時(shí)器的配置241
4.6.5 看門狗定時(shí)器中斷243
4.6.6 看門狗定時(shí)器應(yīng)用示例243
4.7 電源管理單元246
4.7.1 功率控制246
4.7.2 功率控制相關(guān)寄存器246
4.7.3 電源管理單元及其相關(guān)寄存器247
4.7.4 節(jié)電工作模式的配置248
4.7.5 三種節(jié)電模式的比較251
4.7.6 功率控制注意事項(xiàng)251
4.7.7 CMSIS內(nèi)在函數(shù)252
習(xí)題252
第5章 基于CMSIS接口標(biāo)準(zhǔn)的軟件設(shè)計(jì)253
5.1 CMSIS標(biāo)準(zhǔn)簡(jiǎn)介253
5.2 CMSIS代碼規(guī)范255
5.3 CMSIS文件結(jié)構(gòu)258
5.4 CMSIS例子程序263
5.5 Startup_LPC11xx.s啟動(dòng)代碼266
5.5.1 啟動(dòng)代碼的作用266
5.5.2 Startup_LPC11xx.s啟動(dòng)代碼分析266
習(xí)題270
附錄271
附錄A Cortex-M0/M0+指令集271
A.1 指令