本書以ARM公司免費開放的CortexM0 DesignStart處理器 IP核為基礎(chǔ),以CortexM0處理器架構(gòu)、AMBA規(guī)范、外設(shè)、匯編語言、C語言、CMSIS、驅(qū)動程序開發(fā)以及RTX操作系統(tǒng)為主線,詳細(xì)介紹了通過Xilinx Vivado以及Keil Vision5集成開發(fā)環(huán)境構(gòu)建CortexM0全可編程嵌入式系統(tǒng)的硬件和軟件設(shè)計方法。
全書共分18章,主要內(nèi)容包括: 全可編程SoC設(shè)計導(dǎo)論、CortexM0 CPU結(jié)構(gòu)、CortexM0指令集、CortexM0低功耗特性、AHBLite總線結(jié)構(gòu)分析、CortexM0匯編語言編程基礎(chǔ)、CortexM0 DesignStart架構(gòu)、Xilinx Artix7 FPGA結(jié)構(gòu)、CortexM0嵌入式系統(tǒng)設(shè)計與實現(xiàn)、7段數(shù)碼管控制器設(shè)計與實現(xiàn)、中斷系統(tǒng)設(shè)計與實現(xiàn)、定時器設(shè)計與實現(xiàn)、UART串口控制器設(shè)計與實現(xiàn)、VGA控制器設(shè)計與實現(xiàn)、DDR3存儲器系統(tǒng)設(shè)計與實現(xiàn)、CortexM0 C語言編程基礎(chǔ)、CMSIS和驅(qū)動程序開發(fā)、RTX操作系統(tǒng)原理及應(yīng)用。
本書可作為講授ARM CortexM0嵌入式系統(tǒng)課程以及CortexM0可編程SoC系統(tǒng)設(shè)計課程的教學(xué)參考用書,也可作為學(xué)習(xí)Xilinx Vivado集成開發(fā)環(huán)境和Verilog HDL語言的參考用書。
1. 知識融合 將ARM公司開源的Cortex-M0 IP用于典型嵌入式系統(tǒng)設(shè)計,內(nèi)容涵蓋了處理器架構(gòu)、指令集、匯編語言、協(xié)議、接口、C語言、操作系統(tǒng)等方面的知識。2. 深入分析 在本書中,通過Xilinx 7系列現(xiàn)場可編程門陣列(FPGA)實現(xiàn)Cortex-M0嵌入式系統(tǒng)硬件設(shè)計;通過Keil Vision5集成開發(fā)環(huán)境,實現(xiàn)軟件程序設(shè)計。此外,通過軟件和硬件開發(fā)工具提供的仿真、調(diào)試和跟蹤功能,深度分析了處理器內(nèi)部架構(gòu)、處理器與存儲器和外設(shè)之間的通信機制,以及軟件和硬件協(xié)同設(shè)計方法。3. 知識權(quán)威 在編寫本書的過程中,ARM公司課程開發(fā)團隊提供了大量的教學(xué)參考資料,包括設(shè)計案例、教學(xué)課件以及技術(shù)文檔等。使得本書能從硬件和軟件兩個方面準(zhǔn)確反映Cortex-M0嵌入式系統(tǒng)的設(shè)計和實現(xiàn)方法。4. 實例豐富 提供了Cortex-M0典型應(yīng)用的設(shè)計案例、設(shè)計代碼和參考資料,便于讀者自學(xué),快速動手實踐。
何賓:著名的嵌入式技術(shù)和EDA技術(shù)專家,長期從事電子設(shè)計自動化方面的教學(xué)和科研工作,與全球多家知名的半導(dǎo)體廠商和EDA工具廠商大學(xué)計劃保持緊密合作。目前已經(jīng)出版嵌入式和EDA方面的著作30余部,內(nèi)容涵蓋電路仿真、電路設(shè)計、可編程邏輯器件、數(shù)字信號處理、單片機、嵌入式系統(tǒng)、片上可編程系統(tǒng)等。典型的代表作有《Xilinx FPGA設(shè)計權(quán)威指南》《Xilinx FPGA數(shù)字設(shè)計從門級到行為級的雙重描述》《Xilinx FPGA數(shù)字信號處理權(quán)威指南從HDL、模型到C的描述》《Xilinx All Programmable Zynq-7000 嵌入式系統(tǒng)設(shè)計與實現(xiàn)》《模擬與數(shù)字系統(tǒng)協(xié)同設(shè)計權(quán)威指南Cypress集成開發(fā)環(huán)境》《STC單片機原理及應(yīng)用》《STC單片機C語言程序設(shè)計》《Altium Designer 13.0電路設(shè)計、仿真與驗證權(quán)威指南》《Altium Designer 15.0電路仿真、設(shè)計、驗證與工藝實現(xiàn)權(quán)威指南》。
目錄
第1章全可編程SoC設(shè)計導(dǎo)論
1.1SoC基礎(chǔ)知識
1.1.1SoC的概念
1.1.2SoC與MCU及CPU的比較
1.1.3典型的商用SoC器件
1.2SoC設(shè)計流程
1.3SoC體系架構(gòu)
1.4全可編程SoC技術(shù)
1.4.1基于軟核的全可編程SoC
1.4.2基于硬核的全可編程SoC
1.5全可編程SoC設(shè)計流程
第2章CortexM0 CPU結(jié)構(gòu)
2.1ARM處理器類型
2.2CortexM系列處理器概述
2.2.1CortexM系列處理器的特點
2.2.2CortexM系列處理器的性能參數(shù)
2.3CortexM0處理器性能和結(jié)構(gòu)
2.3.1CortexM0處理器的性能
2.3.2CortexM0處理器的結(jié)構(gòu)
2.4CortexM0處理器寄存器組
2.4.1通用寄存器
2.4.2堆棧指針
2.4.3程序計數(shù)器
2.4.4鏈接寄存器
2.4.5組合程序狀態(tài)寄存器
2.4.6中斷屏蔽特殊寄存器
2.4.7特殊寄存器
2.5CortexM0存儲器空間映射
2.6CortexM0程序鏡像原理及生成方法
2.7CortexM0的端及分配
2.8CortexM0處理器異常及處理
2.8.1異常原理
2.8.2異常優(yōu)先級
2.8.3向量表
2.8.4異常類型
第3章CortexM0指令集
3.1Thumb指令集
3.2CortexM0匯編語言格式
3.3寄存器訪問指令: MOVE
3.4存儲器訪問指令: LOAD
3.5存儲器訪問指令: STORE
3.6多數(shù)據(jù)訪問指令: LDM和STM
3.7堆棧訪問指令: PUSH和POP
3.8算術(shù)運算指令
3.8.1加法指令
3.8.2減法指令
3.8.3乘法指令
3.8.4比較指令
3.9邏輯操作指令
3.10移位操作指令
3.10.1右移指令
3.10.2左移指令
3.11反序操作指令
3.12擴展操作指令
3.13程序流控制指令
3.14存儲器屏蔽指令
3.15異常相關(guān)指令
3.16休眠相關(guān)指令
3.17其他指令
3.18數(shù)據(jù)插入和對齊操作
第4章CortexM0低功耗特性
4.1低功耗要求
4.2CortexM0低功耗特性及優(yōu)勢
4.2.1CortexM0低功耗特性
4.2.2CortexM0低功耗結(jié)構(gòu)
4.3CortexM0休眠模式
4.4喚醒中斷控制器
4.5降低功耗的其他方法
第5章AHBLite總線結(jié)構(gòu)分析
5.1總線及分類
5.1.1總線的概念
5.1.2總線分類
5.2ARM AMBA系統(tǒng)總線
5.3AMBA3 AHBLite總線
5.3.1AHBLite概述
5.3.2AHBLite總線操作
5.4AHBLite總線結(jié)構(gòu)
5.4.1全局信號
5.4.2AHBLite主設(shè)備接口
5.4.3AHBLite從設(shè)備接口
5.4.4地址譯碼器和多路復(fù)用器
5.5AHBLite總線時序
5.5.1無等待基本讀傳輸
5.5.2有等待基本讀傳輸
5.5.3無等待基本寫傳輸
5.5.4有等待基本寫傳輸
5.6硬件實現(xiàn)
第6章CortexM0匯編語言編程基礎(chǔ)
6.1Keil MDK開發(fā)套件
6.1.1下載MDK開發(fā)套件
6.1.2安裝MDK開發(fā)套件
6.1.3MDK程序處理流程
6.2CortexM0匯編語言程序設(shè)計
6.2.1建立新設(shè)計工程
6.2.2工程參數(shù)設(shè)置
6.2.3添加匯編文件
6.2.4匯編語言語法
6.3.lst文件分析
6.4.map文件分析
6.5.hex文件分析
6.6軟件仿真和調(diào)試
6.6.1查看CortexM0寄存器內(nèi)容
6.6.2查看CortexM0存儲器內(nèi)容
6.6.3查看監(jiān)視窗口的內(nèi)容
6.7匯編語言其他常用語法介紹
6.7.1標(biāo)識符的命名規(guī)則
6.7.2變量
6.7.3常數(shù)
6.7.4EQU命令
6.7.5IMPORT/EXTERN命令
6.7.6子程序調(diào)用
6.7.7宏定義和使用
第7章CortexM0 DesignStart架構(gòu)
7.1獲取CortexM0
DesignStart
7.2CortexM0 DesignStart頂層符號
7.2.1中斷
7.2.2狀態(tài)輸出
7.2.3事件信號
7.3AHBLite接口
7.4將CortexM0
DesignStart集成到系統(tǒng)的方法
第8章XILINX Artix7 FPGA結(jié)構(gòu)
8.1Artix7器件邏輯資源
8.2可配置邏輯塊
8.2.1可配置邏輯塊概述
8.2.2查找表
8.2.3多路復(fù)用器
8.2.4進位邏輯
8.2.5存儲元素
8.2.6分布式RAM(只有SLICEM)
8.2.7只讀存儲器(ROM)
8.2.8移位寄存器(只有SLICEM)
8.3時鐘資源和時鐘管理單元
8.3.17系列FPGA時鐘資源
8.3.27系列內(nèi)部時鐘結(jié)構(gòu)
8.3.37系列FPGA時鐘管理模塊
8.4塊存儲器資源
8.5專用的DSP模塊
8.6輸入/輸出塊
8.6.1I/O特性概述
8.6.2Artix7中的I/O列和類型
8.6.3I/O電氣資源
8.6.4I/O邏輯資源
8.7XADC模塊
8.8吉比特收發(fā)器
8.9PCIE模塊
8.10配置模塊
8.11互連資源
第9章CortexM0嵌入式系統(tǒng)設(shè)計與實現(xiàn)
9.1設(shè)計目標(biāo)
9.2CortexM0 SoC系統(tǒng)的構(gòu)建
9.2.1啟動Vivado 2016集成開發(fā)環(huán)境
9.2.2創(chuàng)建新的設(shè)計工程
9.2.3添加CortexM0處理器源文件
9.2.4添加系統(tǒng)主時鐘IP核
9.3設(shè)計文件修改和分析
9.3.1AHB總線地址譯碼器
9.3.2AHB總線從設(shè)備多路復(fù)用器
9.3.3AHB片上存儲器外設(shè)
9.3.4AHB LED外設(shè)
9.3.5AHBLITE_SYS頂層文件
9.4程序代碼的編寫
9.4.1建立新設(shè)計工程
9.4.2工程參數(shù)設(shè)置
9.4.3添加和編譯匯編文件
9.4.4分析HEX文件與匯編文件的關(guān)系
9.4.5添加HEX文件到當(dāng)前工程
9.5RTL詳細(xì)描述和分析
9.6仿真原理和行為級仿真
9.6.1仿真實現(xiàn)的不同功能
9.6.2Vivado所支持的仿真工具
9.6.3行為級仿真實現(xiàn)
9.6.4添加信號并仿真
9.6.5仿真結(jié)果分析
9.7設(shè)計綜合和分析
9.7.1綜合過程的關(guān)鍵問題
9.7.2設(shè)計綜合選項
9.7.3Vivado支持的屬性
9.7.4執(zhí)行設(shè)計綜合
9.7.5查看綜合報告
9.8創(chuàng)建實現(xiàn)約束
9.8.1實現(xiàn)約束的原理
9.8.2I/O規(guī)劃器功能
9.8.3引腳位置約束的實現(xiàn)
9.9設(shè)計實現(xiàn)和分析
9.9.1實現(xiàn)過程原理
9.9.2設(shè)計實現(xiàn)選項
9.9.3設(shè)計實現(xiàn)
9.9.4查看布局布線后的結(jié)果
9.9.5查看實現(xiàn)后的報告
9.9.6功耗分析
9.9.7靜態(tài)時序分析
9.10實現(xiàn)后時序仿真
9.11生成編程文件
9.12下載比特流文件到FPGA
9.13生成并下載外部存儲器文件
第10章7段數(shù)碼管控制器設(shè)計與實現(xiàn)
10.1設(shè)計目標(biāo)
10.2打開前面的設(shè)計工程
10.3添加并分析7段數(shù)碼管控制器源文件
10.3.1添加7段數(shù)碼管控制器源文件
10.3.2分析7段數(shù)碼管控制器源文件
10.4修改并分析頂層設(shè)計文件
10.5編寫程序代碼
10.5.1建立新設(shè)計工程
10.5.2工程參數(shù)設(shè)置
10.5.3添加和編譯匯編文件
10.5.4添加HEX文件到當(dāng)前工程
10.6設(shè)計綜合
10.7添加約束條件
10.8設(shè)計實現(xiàn)
10.9下載比特流文件
10.10系統(tǒng)在線調(diào)試原理
10.11系統(tǒng)在線調(diào)試實現(xiàn)
10.11.1建立新的調(diào)試工程
10.11.2添加調(diào)試網(wǎng)絡(luò)
10.11.3在線測試分析
第11章中斷系統(tǒng)設(shè)計與實現(xiàn)
11.1設(shè)計目標(biāo)
11.2中斷控制器原理
11.2.1NVIC特點
11.2.2NVIC映射
11.2.3NVIC寄存器
11.3進入和退出異常句柄的過程
11.3.1進入中斷句柄的過程
11.3.2退出中斷句柄的過程
11.4打開前面的設(shè)計工程
11.5添加并分析按鍵消抖模塊源文件
11.5.1添加按鍵消抖模塊源文件
11.5.2分析按鍵消抖模塊源文件
11.6修改并分析頂層設(shè)計文件
11.7編寫程序代碼
11.7.1建立新設(shè)計工程
11.7.2工程參數(shù)設(shè)置
11.7.3軟件初始化中斷
11.7.4添加和編譯匯編文件
11.7.5添加HEX文件到當(dāng)前工程
11.8設(shè)計綜合
11.9添加約束條件
11.10設(shè)計實現(xiàn)
11.11下載比特流文件
第12章定時器設(shè)計與實現(xiàn)
12.1設(shè)計目標(biāo)
12.2打開前面的設(shè)計工程
12.3添加并分析定時器模塊源文件
12.3.1定時器模塊設(shè)計原理
12.3.2添加定時器源文件
12.3.3分析定時器源文件
12.4修改并分析頂層設(shè)計文件
12.5編寫程序代碼
12.5.1建立新設(shè)計工程
12.5.2工程參數(shù)設(shè)置
12.5.3添加和編譯匯編文件
12.5.4添加HEX文件到當(dāng)前工程
12.6設(shè)計綜合
12.7設(shè)計實現(xiàn)
12.8下載比特流文件
第13章UART串口控制器設(shè)計與實現(xiàn)
13.1設(shè)計目標(biāo)
13.2串行通信基礎(chǔ)
13.2.1串行和并行通信之間的比較
13.2.2串行通信的類型
13.3通用異步收發(fā)數(shù)據(jù)格式和編碼
13.3.1數(shù)據(jù)格式
13.3.2字符編碼規(guī)則
13.4UART串口控制器的實現(xiàn)原理
13.4.1UART發(fā)送器
13.4.2UART接收器
13.4.3發(fā)送器/接收器FIFO
13.5打開前面的設(shè)計工程
13.6添加并分析UART模塊源文件
13.6.1添加UART模塊源文件
13.6.2分析UART模塊源文件
13.7修改并分析頂層設(shè)計文件
13.8編寫程序代碼
13.8.1建立新設(shè)計工程
13.8.2工程參數(shù)設(shè)置
13.8.3添加和編譯匯編文件
13.8.4添加HEX文件到當(dāng)前工程
13.9設(shè)計綜合
13.10添加約束條件
13.11設(shè)計實現(xiàn)
13.12下載比特流文件
第14章VGA控制器設(shè)計與實現(xiàn)
14.1設(shè)計目標(biāo)
14.2VGA工作原理
14.2.1VGA連接器
14.2.2CRT原理
14.2.3VGA接口信號
14.2.4VGA時序
14.3VGA顯示硬件實現(xiàn)原理
14.3.1VGA圖像緩沖區(qū)
14.3.2VGA控制臺
14.3.3VGA控制器存儲器空間
14.4打開前面的設(shè)計工程
14.5添加并分析VGA模塊源文件
14.5.1添加VGA模塊源文件
14.5.2分析VGA模塊源文件
14.6修改其他設(shè)計
14.6.1添加并分析頂層設(shè)計文件
14.6.2修改時鐘生成器輸出頻率
14.6.3修改波特率時鐘
14.7編寫程序代碼
14.7.1建立新設(shè)計工程
14.7.2工程參數(shù)設(shè)置
14.7.3添加和編譯匯編文件
14.7.4添加HEX文件到當(dāng)前工程
14.8設(shè)計綜合
14.9添加約束條件
14.10設(shè)計實現(xiàn)
14.11下載比特流文件
第15章DDR3存儲器系統(tǒng)設(shè)計與實現(xiàn)
15.1計算機搭載的存儲器設(shè)備
15.2存儲器類型
15.2.1易失性存儲器
15.2.2非易失性存儲器
15.3系統(tǒng)設(shè)計目標(biāo)
15.3.1硬件構(gòu)建目標(biāo)
15.3.2軟件編程目標(biāo)
15.4DDR3 SDRAM控制器設(shè)計原理
15.4.1DDR3 SDRAM存儲器結(jié)構(gòu)
15.4.2DDR3 SDRAM控制器結(jié)構(gòu)
15.4.3DDR3 SDRAM的讀寫訪問時序
15.5DDR3 SDRAM控制器系統(tǒng)設(shè)計與實現(xiàn)
15.5.1打開前面的設(shè)計工程
15.5.2設(shè)計DDR3 SDRAM存儲器控制器
15.5.3修改系統(tǒng)設(shè)計文件
15.5.4編寫程序代碼
15.5.5設(shè)計綜合
15.5.6設(shè)計實現(xiàn)
15.5.7下載比特流文件
第16章CortexM0 C語言編程基礎(chǔ)
16.1C語言處理流程
16.2C語言鏡像文件內(nèi)容和存儲
16.2.1C語言鏡像文件的內(nèi)容
16.2.2C語言鏡像文件的存儲位置
16.3啟動代碼的分析
16.4C語言中數(shù)據(jù)的存儲空間
16.5C語言數(shù)據(jù)類型及實現(xiàn)
16.5.1C語言支持的數(shù)據(jù)類型
16.5.2數(shù)據(jù)類型修飾符
16.6C語言編程CortexM0
16.6.1定義中斷向量表
16.6.2定義堆和堆棧
16.6.3讀寫外設(shè)寄存器
16.6.4匯編調(diào)用C函數(shù)
16.6.5C語言調(diào)用匯編語言
16.6.6C語言嵌入?yún)R編語言
16.7C語言驅(qū)動的設(shè)計和實現(xiàn)
16.7.1打開前面的設(shè)計工程
16.7.2建立新的軟件設(shè)計工程
16.7.3軟件工程參數(shù)設(shè)置
16.7.4創(chuàng)建并添加匯編文件
16.7.5創(chuàng)建并添加頭文件
16.7.6創(chuàng)建并添加C文件
16.7.7添加HEX文件到當(dāng)前工程
16.7.8設(shè)計綜合
16.7.9設(shè)計實現(xiàn)
16.7.10下載比特流文件
16.8C語言重定向及實現(xiàn)
16.8.1打開前面的設(shè)計工程
16.8.2打開前面的軟件設(shè)計工程
16.8.3修改啟動引導(dǎo)文件
16.8.4導(dǎo)入并修改retarget.c文件
16.8.5修改C設(shè)計文件
16.8.6添加HEX文件到當(dāng)前工程
16.8.7設(shè)計綜合
16.8.8設(shè)計實現(xiàn)
16.8.9下載比特流文件
第17章CMSIS和驅(qū)動程序開發(fā)
17.1引入CMSIS的必要性
17.2CMSIS的優(yōu)勢
17.3CMSIS的框架
17.4使用CMSIS訪問不同資源
17.4.1訪問NVIC
17.4.2訪問特殊寄存器
17.4.3訪問特殊指令
17.4.4訪問系統(tǒng)
17.5軟件驅(qū)動程序的設(shè)計
17.5.1軟件驅(qū)動程序的功能
17.5.2AHB外設(shè)驅(qū)動設(shè)計
17.6動態(tài)圖形交互系統(tǒng)設(shè)計
17.6.1動態(tài)圖形交互硬件平臺
17.6.2觸摸屏顯示控制方法
17.6.3觸摸屏觸摸控制方法
17.6.4打開前面的設(shè)計工程
17.6.5觸摸屏控制器模塊的設(shè)計實現(xiàn)
17.6.6修改頂層設(shè)計文件
17.6.7C語言程序的設(shè)計和實現(xiàn)
17.6.8設(shè)計綜合
17.6.9添加約束條件
17.6.10設(shè)計實現(xiàn)
17.6.11下載比特流文件
第18章RTX操作系統(tǒng)原理及應(yīng)用
18.1RTOS的優(yōu)勢
18.2操作系統(tǒng)的概念
18.3操作系統(tǒng)支持特性
18.3.1SysTick定時器
18.3.2堆棧指針
18.3.3SVC
18.3.4PendSV
18.4RTX內(nèi)核架構(gòu)的特點
18.5RTX的具體實現(xiàn)過程
18.5.1實現(xiàn)目標(biāo)
18.5.2打開前面的工程
18.5.3修改工程屬性設(shè)置
18.5.4修改啟動代碼
18.5.5導(dǎo)入RTX_Config.c文件
18.5.6修改main.c文件
18.5.7軟件調(diào)試和測試
18.6RTX內(nèi)核功能
18.6.1定時器滴答中斷
18.6.2系統(tǒng)任務(wù)管理器
18.6.3任務(wù)管理
18.6.4空閑任務(wù)
18.6.5系統(tǒng)資源
18.6.6任務(wù)調(diào)度策略
18.6.7優(yōu)先級倒置
18.6.8堆棧管理
18.6.9用戶定時器
18.6.10中斷函數(shù)