第1章 緒論
      1.1為什麼要選擇Cortex?M0
      1.1.1能耗效率
      1.1.2代碼密度
      1.1.3易於使用
      1.2Cortex?M0處理器的應用
      1.3ARM和ARM處理器的背景
      1.4Cortex?M0處理器說明和ARM體系結構
      1.5ARM處理器和ARM生態系統
      1.6開始使用Cortex?M0處理器
      1.7本書的結構和資源
      第2章 Cortex?M0技術綜述
      2.1Cortex?M0處理器簡介
      2.2ARM Cortex?M0處理器的特性
      2.2.1系統特性
      2.2.2應用特性
      2.2.3調試特性
      2.2.4其他特性
      2.3Cortex?M0處理器的優勢
      2.3.1能耗效率
      2.3.28位和16位架構的局限性
      2.3.3易於使用,軟件可移植
      2.3.4選擇多樣化
      2.4低功耗應用
      2.4.1門數量低
      2.4.2高效率
      2.4.3低功耗特性
      2.4.4邏輯單元提升
      2.5Cortex?M0的軟件可移植性
      第3章 體系結構
      3.1概述
      3.2系統模型
      3.2.1操作模式和狀態
      3.2.2寄存器和特殊寄存器
      3.2.3R0?R12
      3.2.4R13,棧指針(SP)
      3.2.5R14,鏈接寄存器(LR)
      3.2.6R15,程序計數器(PC)
      3.2.7xPSR,組合程序狀態寄存器
      3.2.8應用程序狀態寄存器(APSR)的行為
      3.2.9PRIMASK: 中斷屏蔽特殊寄存器
      3.2.10CONTROL: 特殊寄存器
      3.3存儲器系統
      3.4棧空間操作
      3.5異常和中斷
      3.6嵌套向量中斷控制器(NVIC)
      3.6.1靈活的中斷管理
      3.6.2支持嵌套中斷
      3.6.3向量化的異常入口
      3.6.4中斷屏蔽
      3.7系統控制塊(SCB)
      調試系統
      3.8程序映像和啟動流程
      第4章 Cortex?M0編程入門
      4.1嵌入式系統編程入門
      4.1.1微控制器是如何啟動的
      4.1.2嵌入式程序設計
      4.2輸入和輸出
      4.3開發流程
      4.4C編程和匯編編程
      4.5什麼是程序映像
      4.5.1向量表
      4.5.2C啟動代碼
      4.5.3程序代碼
      4.5.4C庫代碼
      4.5.5RAM中的數據
      4.6C編程: 數據類型
      4.7用C語言操作外設
      4.8Cortex微控制器軟件接口標准(CMSIS)
      4.8.1CMSIS介紹
      4.8.2CMSIS中有什麼是標准化的
      4.8.3CMSIS的組織結構
      4.8.4使用CMSIS
      4.9CMSIS的優勢
      第5章 指令集
      5.1ARM和Thumb指令集的背景
      5.2匯編基礎
      5.2.1匯編語法一覽
      5.2.2后綴的使用
      5.2.3Thumb代碼和統一匯編語言(UAL)
      5.2.4指令列表
      5.2.5處理器內移動數據
      5.2.6存儲器訪問
      5.2.7棧空間訪問
      5.2.8算術運算
      5.2.9邏輯運算
      5.2.10移位和循環操作
      5.2.11展開和順序反轉操作
      5.2.12程序流控制
      5.2.13存儲器屏障指令
      5.2.14異常相關指令
      5.2.15休眠模式特性相關指令
      5.2.16其他指令
      5.3偽指令
      第6章 指令集使用實例
      6.1概述
      6.2程序控制
      6.2.1If?Else
      6.2.2循環
      6.2.3進一步了解跳轉指令
      6.2.4跳轉條件的典型用法
      6.2.5函數調用和函數返回
      6.2.6跳轉表
      6.3數據訪問
      6.3.1簡單數據訪問
      6.3.2使用存儲器訪問指令的例子
      6.4數據類型轉換
      6.4.1數據大小的轉換
      6.4.2大小端轉換
      6.5數據處理
      6.5.164位/128位加法
      6.5.264位/128位減法
      6.5.3整數除法
      6.5.4無符號整數開方根
      6.5.5位和位域運算
      第7章 存儲器系統
      7.1概述
      7.2存儲器映射
      7.3程序存儲器,Boot Loader和存儲器重映射
      7.4數據存儲器
      7.5支持小端和大端
      7.5.1數據類型
      7.5.2硬件行為對編程的影響
      7.5.3數據對齊
      7.5.4訪問非法地址
      7.5.5多寄存器加載和存儲指令的使用
      7.6存儲器屬性
      第8章 異常和中斷
      8.1什麼是異常和中斷
      8.2Cortex?M0處理器的異常類型
      8.2.1不可屏蔽中斷(NMI)
      8.2.2硬件錯誤
      8.2.3SVC(請求管理調用)
      8.2.4PendSV(可掛起的系統調用)
      8.2.5系統節拍
      8.2.6中斷
      8.3異常優先級定義
      8.4向量表
      8.5異常流程概述
      8.5.1接受異常請求
      8.5.2壓棧和出棧
      8.5.3異常返回指令
      8.5.4末尾連鎖
      8.5.5延遲到達
      8.6EXC_RETURN
      8.7異常入口流程的細節
      8.7.1壓棧
      8.7.2取出向量並更新PC
      8.7.3寄存器更新
      8.8異常退出流程的細節
      8.8.1寄存器出棧
      8.8.2從返回地址取值並執行
      第9章 中斷控制和系統控制
      9.1NVIC和系統控制塊特性
      9.2中斷使能和清除使能
      9.3中斷掛起和清除掛起
      9.4中斷優先級
      9.5中斷控制的通用匯編代碼
      9.5.1使能和禁止中斷
      9.5.2設置和清除中斷掛起狀態
      9.5.3設置中斷優先級
      9.6異常屏蔽寄存器(PRIMASK)
      9.7中斷輸入和掛起行為
      簡單的中斷處理
      9.8中斷等待
      9.9系統異常的控制寄存器
      9.10系統控制寄存器
      9.10.1CPU ID基址寄存器
      9.10.2應用中斷和復位控制寄存器
      9.10.3配置和控制寄存器
      第10章 支持操作系統的特性
      10.1支持操作系統的特性概述
      為什麼要使用嵌入式操作系統
      10.2SysTick定時器
      10.3SysTick寄存器
      10.3.1設置SysTick
      10.3.2SysTick用於時間測量
      10.4進程棧和進程棧指針
      10.5SVC
      10.6PendSV
      第11章 低功耗特性
      11.1低功耗嵌入式系統概述
      11.2Cortex?M0處理器的低功耗優勢
      11.3低功耗特性概述
      11.4休眠模式
      11.5等待事件(WFE)和等待中斷(WFI)
      11.5.1等待事件(WFE)
      11.5.2等待中斷(WFI)
      11.5.3喚醒條件
      11.6退出休眠特性
      11.7喚醒中斷控制器
      第12章 錯誤處理
      12.1錯誤異常概述
      錯誤是怎麼發生的
      12.2分析錯誤
      12.3意外切換至ARM狀態
      12.4實際應用中的錯誤處理
      12.5鎖定
      12.5.1鎖定的原因
      12.5.2鎖定期間發生了什麼
      12.6防止鎖定
      第13章 調試特性
      13.1軟件開發和調試特性
      13.2調試特性一覽
      13.3調試接口
      13.4暫停模式和調試事件
      13.5調試系統
      第14章 Keil MDK入門
      14.1Keil MDK介紹
      14.2使用Keil MDK的
      第一步
      14.2.1創建Blinky工程
      14.2.2創建工程代碼
      14.2.3工程設置
      14.2.4編譯和建立程序
      14.2.5使用調試器
      14.3其他的工程配置
      14.3.1目標,源文件組
      14.3.2編譯器和代碼生成選項
      14.3.3模擬器
      14.3.4在RAM中運行
      14.4定制Keil中的啟動代碼
      14.5使用Keil中的分散加載特性
      第15章 簡單應用程序開發
      15.1使用CMSIS
      15.2將SysTick用作單發定時器
      15.3UART示例
      15.3.1簡單的輸入和輸出
      15.3.2重定向
      15.3.3開發自己的輸入和輸出函數
      15.4簡單中斷編程
      15.4.1中斷編程概述
      15.4.2度盤控制接口實例
      15.4.3中斷控制函數
      15.5CMSIS的不同版本
      第16章 匯編工程和C與匯編混合工程
      16.1用匯編開發工程
      16.2匯編編程的建議規則
      16.3匯編函數的結構
      16.4簡單的匯編工程實例
      16.5為變量分配數據空間
      16.6用匯編實現UART
      16.7其他的文字輸出函數
      復雜的跳轉處理
      16.8混合語言工程
      16.8.1在匯編中調用C函數
      16.8.2在C代碼中調用匯編函數
      16.9嵌入匯編
      16.10使用特殊指令
      16.11習語識別
      第17章 在編程中使用低功耗特性
      17.1概述
      17.2Cortex?M0處理器的休眠模式回顧
      17.3在程序中使用WFE和WFI
      17.4使用掛起發送事件特性
      17.5使用退出休眠特性
      17.6喚醒中斷控制器(WIC)特性
      17.7事件通信接口
      17.8開發低功耗應用程序
      17.9LPC111x的低功耗特性使用示例
      第18章 使用SVC、PendSV和Keil RTX Kernel
      18.1概述
      18.2使用SVC異常
      18.3使用PendSV異常
      18.4使用嵌入式OS
      18.5Keil RTX實時內核
      18.6OS啟動流程
      18.6.1簡單的OS實例
      18.6.2任務間通信
      18.6.3事件通信
      18.6.4互斥體
      18.6.5信號量
      18.6.6信箱消息
      18.6.7周期時間間隔
      18.6.8其他的RTX特性
      18.6.9應用程序實例
      第19章 ARM RealView開發組件入門
      19.1概述
      19.2簡單的應用程序實例
      19.3使用分散加載文件
      19.4用C實現的含有向量表的實例
      19.5在RVDS中使用MicroLIB
      19.6在RVDS中使用匯編進行應用程序開發
      19.7Flash編程
      19.8使用RealView調試器進行調試
      19.9使用RealView調試器的串行線調試
      19.10RVDS中的重定向
      第20章 GNU C編譯器入門
      20.1概述
      20.2典型的開發流程
      20.3簡單的C程序開發
      20.4CodeSourcery通用啟動代碼
      20.5使用用戶定義的向量表
      20.6在gcc中使用Printf
      20.7內聯匯編
      20.8gcc中的SVC實例
      20.9硬件錯誤異常實例
      20.10Flash編程和調試
      第21章 軟件移植
      21.1概述
      21.2ARM處理器
      21.3ARM7TDMI和Cortex?M0之間的差異
      21.3.1操作模式
      21.3.2寄存器
      21.3.3指令集
      21.3.4中斷
      21.4從ARM7TDMI向Cortex?M0移植軟件
      21.4.1啟動代碼和向量表
      21.4.2中斷
      21.4.3C程序代碼
      21.4.4匯編代碼
      21.4.5原子操作
      21.4.6優化
      21.5Cortex?M1和Cortex?M0之間的差異
      21.5.1指令集
      21.5.2NVIC
      21.5.3系統級特性
      21.6在Cortex?M0和Cortex?M1之間移植軟件
      21.7Cortex?M3和Cortex?M0之間的差異
      21.7.1系統模型
      21.7.2NVIC和異常
      21.7.3指令集
      21.7.4系統級特性
      21.7.5調試特性
      21.8在Cortex?M0和Cortex?M3之間移植軟件
      21.9在Cortex?M0和Cortex?M4處理器之間移植軟件
      21.10從8位機/16位機往Cortex?M0移植程序
      21.10.1通用改動
      21.10.2存儲器需求
      21.10.38位機和16位機不再適用的優化
      21.10.4實例: 從8051移植到ARM Cortex?M0
      第22章 Cortex?M0產品
      22.1概述
      22.2微控制器產品和專用標准產品(ASSP)
      22.2.1NXP Cortex?M0微控制器
      22.2.2NuMicro微控制器
      22.2.3Mocha?1 ARM Cortex?M0可配置陣列
      22.2.4Melfas MCS?7000系列觸摸屏控制器
      22.3編譯器和軟件開發組件
      22.3.1Keil微控制器開發套件(MDK)
      22.3.2TASKING VX?Toolset for ARM
      22.3.3IAR Embedded Workbench for ARM
      22.3.4CrossWorks for ARM
      22.3.5Red Suite
      22.3.6LabVIEW C代碼生成器
      22.4開發板
      22.4.1LPCXpresso
      22.4.2IAR的LPC1114入門套件
      22.4.3LPC1114 Cortex?M0模塊
      22.4.4Keil Cortex?M0開發板
      附錄ACortex?M0指令集
      附錄BCortex?M0異常類型快速參考
      B.1異常類型
      B.2異常壓棧后的棧內容
      附錄C軟件接口標准(CMSIS)快速參考
      C.1數據類型
      C.2異常枚舉
      C.3NVIC操作函數
      C.4系統和SysTick操作函數
      C.5內核寄存器操作函數
      C.6特殊指令操作函數
      附錄DNVIC、SCB以及SysTick寄存器快速參考
      D.1NVIC寄存器一覽
      D.2中斷設置使能寄存器(NVIC->ISER)
      D.3中斷清除使能寄存器(NVIC->ICER)
      D.4中斷設置掛起寄存器(NVIC->ISPR)
      D.5中斷清除掛起寄存器(NVIC->ICPR)
      D.6中斷優先級寄存器(NVIC->IRP[0]到NVIC->IRP[7])
      D.7SCB寄存器一覽
      D.8CPU ID基地址寄存器(SCB->CPUID)
      D.9中斷控制狀態寄存器(SCB->ICSR)
      D.10應用中斷和控制狀態寄存器(SCB->AIRCR)
      D.11系統控制寄存器(SCB->SCR)
      D.12配置控制寄存器(SCB->CCR)
      D.13系統處理優先級寄存器2(SCB->SHR[0])
      D.14系統處理優先級寄存器3(SCB->SHR[1])
      D.15系統處理控制和狀態寄存器
      D.16SysTick寄存器一覽
      D.17SysTick控制和狀態寄存器(SysTick->CTRL)
      D.18SysTick重裝載值寄存器(SysTick->LOAD)
      D.19SysTick當前值寄存器(SysTick->VAL)
      D.20SysTick校准值寄存器(SysTick->CALIB)
      附錄E調試寄存器快速參考
      E.1概述
      E.2內核調試寄存器
      E.3斷點單元
      E.4數據監視點單元
      E.5ROM表寄存器
      附錄F調試接頭分配
      F.110針Cortex調試連接頭
      F.220針Cortex調試+ETM接頭
      F.3老式的20針IDC接頭排列
      附錄GCodeSourcery G++ Lite的鏈接器腳本
      附錄H實例代碼文件
      H.1system_LPC11xx.c
      H.2system_LPC11xx.h
      H.3LPC11xx.hs
      H.4uart_test.s
      H.5RTX_config.c
      附錄I疑難解答
      I.1程序不運行/啟動
      I.1.1向量表丟失或位置錯誤
      I.1.2使用了錯誤的C啟動代碼
      I.1.3復位向量中的值錯誤
      I.1.4程序映像沒有正確地編程到Flash中
      I.1.5錯誤的工具鏈配置
      I.1.6錯誤的棧指針初始值
      I.1.7錯誤的大小端設置
      I.2程序啟動,卻進入了硬件錯誤
      I.2.1非法存儲器訪問
      I.2.2非對齊數據訪問
      I.2.3從總線返回錯誤
      I.2.4異常處理中的棧被破壞
      I.2.5程序在某些C函數中崩潰
      I.2.6意外地試圖切換至ARM狀態
      I.2.7在錯誤的優先級上執行SVC
      I.3休眠問題
      I.3.1執行WFE不進入休眠
      I.3.2退出休眠過早地引起休眠
      I.3.3中斷已經在掛起態時SEVONPEND不工作
      I.3.4由於休眠模式可能禁止了某些時鍾,處理器無法喚醒
      I.3.5競態
      I.4中斷問題
      I.4.1執行了多余的中斷處理
      I.4.2執行了額外的SysTick處理
      I.4.3在中斷處理中禁止中斷
      I.4.4錯誤的中斷返回指令
      I.4.5異常優先級設置的數值
      I.5其他問題
      I.5.1錯誤的SVC參數傳遞方法
      I.5.2調試連接受到I/O設置或低功耗模式的影響
      I.5.3調試協議選擇
      I.5.4使用事件輸出作為脈沖I/O
      附錄J實用參考文檔