ARM Cortex-M0 全可編程SoC原理及實現——面向處理器、協議、外設、編程和操( 簡體 字) | |
作者:何賓 | 類別:1. -> 電腦組織與體系結構 -> 嵌入式系統 -> Cortex |
出版社:清華大學出版社 | 3dWoo書號: 46268 詢問書籍請說出此書號! 有庫存 NT售價: 395 元 |
出版日:3/1/2017 | |
頁數:478 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787302457329 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1章全可編程SoC設計導論
1.1SoC基礎知識 1.1.1SoC的概念 1.1.2SoC與MCU及CPU的比較 1.1.3典型的商用SoC器件 1.2SoC設計流程 1.3SoC體系架構 1.4全可編程SoC技術 1.4.1基于軟核的全可編程SoC 1.4.2基于硬核的全可編程SoC 1.5全可編程SoC設計流程 第2章CortexM0CPU結構 2.1ARM處理器類型 2.2CortexM系列處理器概述 2.2.1CortexM系列處理器的特點 2.2.2CortexM系列處理器的性能參數 2.3CortexM0處理器性能和結構 2.3.1CortexM0處理器的性能 2.3.2CortexM0處理器的結構 2.4CortexM0處理器寄存器組 2.4.1通用寄存器 2.4.2堆棧指針 2.4.3程序計數器 2.4.4鏈接寄存器 2.4.5組合程序狀態寄存器 2.4.6中斷屏蔽特殊寄存器 2.4.7特殊寄存器 2.5CortexM0存儲器空間映射 2.6CortexM0程序鏡像原理及生成方法 2.7CortexM0的端及分配 2.8CortexM0處理器異常及處理 2.8.1異常原理 2.8.2異常優先級 2.8.3向量表 2.8.4異常類型 第3章CortexM0指令集 3.1Thumb指令集 3.2CortexM0匯編語言格式 3.3寄存器訪問指令:MOVE 3.4存儲器訪問指令:LOAD 3.5存儲器訪問指令:STORE 3.6多數據訪問指令:LDM和STM 3.7堆棧訪問指令:PUSH和POP 3.8算術運算指令 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異常相關指令 3.16休眠相關指令 3.17其他指令 3.18數據插入和對齊操作 第4章CortexM0低功耗特性 4.1低功耗要求 4.2CortexM0低功耗特性及優勢 4.2.1CortexM0低功耗特性 4.2.2CortexM0低功耗結構 4.3CortexM0休眠模式 4.4喚醒中斷控制器 4.5降低功耗的其他方法 第5章AHBLite總線結構分析 5.1總線及分類 5.1.1總線的概念 5.1.2總線分類 5.2ARMAMBA系統總線 5.3AMBA3AHBLite總線 5.3.1AHBLite概述 5.3.2AHBLite總線操作 5.4AHBLite總線結構 5.4.1全局信號 5.4.2AHBLite主設備接口 5.4.3AHBLite從設備接口 5.4.4地址譯碼器和多路復用器 5.5AHBLite總線時序 5.5.1無等待基本讀傳輸 5.5.2有等待基本讀傳輸 5.5.3無等待基本寫傳輸 5.5.4有等待基本寫傳輸 5.6硬件實現 第6章CortexM0匯編語言編程基礎 6.1KeilMDK開發套件 6.1.1下載MDK開發套件 6.1.2安裝MDK開發套件 6.1.3MDK程序處理流程 6.2CortexM0匯編語言程序設計 6.2.1建立新設計工程 6.2.2工程參數設置 6.2.3添加匯編文件 6.2.4匯編語言語法 6.3.lst文件分析 6.4.map文件分析 6.5.hex文件分析 6.6軟件仿真和調試 6.6.1查看CortexM0寄存器內容 6.6.2查看CortexM0存儲器內容 6.6.3查看監視窗口的內容 6.7匯編語言其他常用語法介紹 6.7.1標識符的命名規則 6.7.2變量 6.7.3常數 6.7.4EQU命令 6.7.5IMPORT/EXTERN命令 6.7.6子程序調用 6.7.7宏定義和使用 第7章CortexM0DesignStart架構 7.1獲取CortexM0DesignStart 7.2CortexM0DesignStart頂層符號 7.2.1中斷 7.2.2狀態輸出 7.2.3事件信號 7.3AHBLite接口 7.4將CortexM0DesignStart集成到系統的方法 第8章XILINXArtix7FPGA結構 8.1Artix7器件邏輯資源 8.2可配置邏輯塊 8.2.1可配置邏輯塊概述 8.2.2查找表 8.2.3多路復用器 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系列內部時鐘結構 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吉比特收發器 8.9PCIE模塊 8.10配置模塊 8.11互連資源 第9章CortexM0嵌入式系統設計與實現 9.1設計目標 9.2CortexM0SoC系統的構建 9.2.1啟動Vivado2016集成開發環境 9.2.2創建新的設計工程 9.2.3添加CortexM0處理器源文件 9.2.4添加系統主時鐘IP核 9.3設計文件修改和分析 9.3.1AHB總線地址譯碼器 9.3.2AHB總線從設備多路復用器 9.3.3AHB片上存儲器外設 9.3.4AHBLED外設 9.3.5AHBLITE_SYS頂層文件 9.4程序代碼的編寫 9.4.1建立新設計工程 9.4.2工程參數設置 9.4.3添加和編譯匯編文件 9.4.4分析HEX文件與匯編文件的關系 9.4.5添加HEX文件到當前工程 9.5RTL詳細描述和分析 9.6仿真原理和行為級仿真 9.6.1仿真實現的不同功能 9.6.2Vivado所支持的仿真工具 9.6.3行為級仿真實現 9.6.4添加信號并仿真 9.6.5仿真結果分析 9.7設計綜合和分析 9.7.1綜合過程的關鍵問題 9.7.2設計綜合選項 9.7.3Vivado支持的屬性 9.7.4執行設計綜合 9.7.5查看綜合報告 9.8創建實現約束 9.8.1實現約束的原理 9.8.2I/O規劃器功能 9.8.3引腳位置約束的實現 9.9設計實現和分析 9.9.1實現過程原理 9.9.2設計實現選項 9.9.3設計實現 9.9.4查看布局布線后的結果 9.9.5查看實現后的報告 9.9.6功耗分析 9.9.7靜態時序分析 9.10實現后時序仿真 9.11生成編程文件 9.12下載比特流文件到FPGA 9.13生成并下載外部存儲器文件 第10章7段數碼管控制器設計與實現 10.1設計目標 10.2打開前面的設計工程 10.3添加并分析7段數碼管控制器源文件 10.3.1添加7段數碼管控制器源文件 10.3.2分析7段數碼管控制器源文件 10.4修改并分析頂層設計文件 10.5編寫程序代碼 10.5.1建立新設計工程 10.5.2工程參數設置 10.5.3添加和編譯匯編文件 10.5.4添加HEX文件到當前工程 10.6設計綜合 10.7添加約束條件 10.8設計實現 10.9下載比特流文件 10.10系統在線調試原理 10.11系統在線調試實現 10.11.1建立新的調試工程 10.11.2添加調試網絡 10.11.3在線測試分析 第11章中斷系統設計與實現 11.1設計目標 11.2中斷控制器原理 11.2.1NVIC特點 11.2.2NVIC映射 11.2.3NVIC寄存器 11.3進入和退出異常句柄的過程 11.3.1進入中斷句柄的過程 11.3.2退出中斷句柄的過程 11.4打開前面的設計工程 11.5添加并分析按鍵消抖模塊源文件 11.5.1添加按鍵消抖模塊源文件 11.5.2分析按鍵消抖模塊源文件 11.6修改并分析頂層設計文件 11.7編寫程序代碼 11.7.1建立新設計工程 11.7.2工程參數設置 11.7.3軟件初始化中斷 11.7.4添加和編譯匯編文件 11.7.5添加HEX文件到當前工程 11.8設計綜合 11.9添加約束條件 11.10設計實現 11.11下載比特流文件 第12章定時器設計與實現 12.1設計目標 12.2打開前面的設計工程 12.3添加并分析定時器模塊源文件 12.3.1定時器模塊設計原理 12.3.2添加定時器源文件 12.3.3分析定時器源文件 12.4修改并分析頂層設計文件 12.5編寫程序代碼 12.5.1建立新設計工程 12.5.2工程參數設置 12.5.3添加和編譯匯編文件 12.5.4添加HEX文件到當前工程 12.6設計綜合 12.7設計實現 12.8下載比特流文件 第13章UART串口控制器設計與實現 13.1設計目標 13.2串行通信基礎 13.2.1串行和并行通信之間的比較 13.2.2串行通信的類型 13.3通用異步收發數據格式和編碼 13.3.1數據格式 13.3.2字符編碼規則 13.4UART串口控制器的實現原理 13.4.1UART發送器 13.4.2UART接收器 13.4.3發送器/接收器FIFO 13.5打開前面的設計工程 13.6添加并分析UART模塊源文件 13.6.1添加UART模塊源文件 13.6.2分析UART模塊源文件 13.7修改并分析頂層設計文件 13.8編寫程序代碼 13.8.1建立新設計工程 13.8.2工程參數設置 13.8.3添加和編譯匯編文件 13.8.4添加HEX文件到當前工程 13.9設計綜合 13.10添加約束條件 13.11設計實現 13.12下載比特流文件 第14章VGA控制器設計與實現 14.1設計目標 14.2VGA工作原理 14.2.1VGA連接器 14.2.2CRT原理 14.2.3VGA接口信號 14.2.4VGA時序 14.3VGA顯示硬件實現原理 14.3.1VGA圖像緩沖區 14.3.2VGA控制臺 14.3.3VGA控制器存儲器空間 14.4打開前面的設計工程 14.5添加并分析VGA模塊源文件 14.5.1添加VGA模塊源文件 14.5.2分析VGA模塊源文件 14.6修改其他設計 14.6.1添加并分析頂層設計文件 14.6.2修改時鐘生成器輸出頻率 14.6.3修改波特率時鐘 14.7編寫程序代碼 14.7.1建立新設計工程 14.7.2工程參數設置 14.7.3添加和編譯匯編文件 14.7.4添加HEX文件到當前工程 14.8設計綜合 14.9添加約束條件 14.10設計實現 14.11下載比特流文件 第15章DDR3存儲器系統設計與實現 15.1計算機搭載的存儲器設備 15.2存儲器類型 15.2.1易失性存儲器 15.2.2非易失性存儲器 15.3系統設計目標 15.3.1硬件構建目標 15.3.2軟件編程目標 15.4DDR3SDRAM控制器設計原理 15.4.1DDR3SDRAM存儲器結構 15.4.2DDR3SDRAM控制器結構 15.4.3DDR3SDRAM的讀寫訪問時序 15.5DDR3SDRAM控制器系統設計與實現 15.5.1打開前面的設計工程 15.5.2設計DDR3SDRAM存儲器控制器 15.5.3修改系統設計文件 15.5.4編寫程序代碼 15.5.5設計綜合 15.5.6設計實現 15.5.7下載比特流文件 第16章CortexM0C語言編程基礎 16.1C語言處理流程 16.2C語言鏡像文件內容和存儲 16.2.1C語言鏡像文件的內容 16.2.2C語言鏡像文件的存儲位置 16.3啟動代碼的分析 16.4C語言中數據的存儲空間 16.5C語言數據類型及實現 16.5.1C語言支持的數據類型 16.5.2數據類型修飾符 16.6C語言編程CortexM0 16.6.1定義中斷向量表 16.6.2定義堆和堆棧 16.6.3讀寫外設寄存器 16.6.4匯編調用C函數 16.6.5C語言調用匯編語言 16.6.6C語言嵌入匯編語言 16.7C語言驅動的設計和實現 16.7.1打開前面的設計工程 16.7.2建立新的軟件設計工程 16.7.3軟件工程參數設置 16.7.4創建并添加匯編文件 16.7.5創建并添加頭文件 16.7.6創建并添加C文件 16.7.7添加HEX文件到當前工程 16.7.8設計綜合 16.7.9設計實現 16.7.10下載比特流文件 16.8C語言重定向及實現 16.8.1打開前面的設計工程 16.8.2打開前面的軟件設計工程 16.8.3修改啟動引導文件 16.8.4導入并修改retarget.c文件 16.8.5修改C設計文件 16.8.6添加HEX文件到當前工程 16.8.7設計綜合 16.8.8設計實現 16.8.9下載比特流文件 第17章CMSIS和驅動程序開發 17.1引入CMSIS的必要性 17.2CMSIS的優勢 17.3CMSIS的框架 17.4使用CMSIS訪問不同資源 17.4.1訪問NVIC 17.4.2訪問特殊寄存器 17.4.3訪問特殊指令 17.4.4訪問系統 17.5軟件驅動程序的設計 17.5.1軟件驅動程序的功能 17.5.2AHB外設驅動設計 17.6動態圖形交互系統設計 17.6.1動態圖形交互硬件平臺 17.6.2觸摸屏顯示控制方法 17.6.3觸摸屏觸摸控制方法 17.6.4打開前面的設計工程 17.6.5觸摸屏控制器模塊的設計實現 17.6.6修改頂層設計文件 17.6.7C語言程序的設計和實現 17.6.8設計綜合 17.6.9添加約束條件 17.6.10設計實現 17.6.11下載比特流文件 第18章RTX操作系統原理及應用 18.1RTOS的優勢 18.2操作系統的概念 18.3操作系統支持特性 18.3.1SysTick定時器 18.3.2堆棧指針 18.3.3SVC 18.3.4PendSV 18.4RTX內核架構的特點 18.5RTX的具體實現過程 18.5.1實現目標 18.5.2打開前面的工程 18.5.3修改工程屬性設置 18.5.4修改啟動代碼 18.5.5導入RTX_Config.c文件 18.5.6修改main.c文件 18.5.7軟件調試和測試 18.6RTX內核功能 18.6.1定時器滴答中斷 18.6.2系統任務管理器 18.6.3任務管理 18.6.4空閑任務 18.6.5系統資源 18.6.6任務調度策略 18.6.7優先級倒置 18.6.8堆棧管理 18.6.9用戶定時器 18.6.10中斷函數 本書以ARM公司免費開放的CortexM0 DesignStart處理器 IP核為基礎,以CortexM0處理器架構、AMBA規范、外設、匯編語言、C語言、CMSIS、驅動程序開發以及RTX操作系統為主線,詳細介紹了通過Xilinx Vivado以及Keil μVision5集成開發環境構建CortexM0全可編程嵌入式系統的硬件和軟件設計方法。
全書共分18章,主要內容包括: 全可編程SoC設計導論、CortexM0 CPU結構、CortexM0指令集、CortexM0低功耗特性、AHBLite總線結構分析、CortexM0匯編語言編程基礎、CortexM0 DesignStart架構、Xilinx Artix7 FPGA結構、CortexM0嵌入式系統設計與實現、7段數碼管控制器設計與實現、中斷系統設計與實現、定時器設計與實現、UART串口控制器設計與實現、VGA控制器設計與實現、DDR3存儲器系統設計與實現、CortexM0 C語言編程基礎、CMSIS和驅動程序開發、RTX操作系統原理及應用。 本書可作為講授ARM CortexM0嵌入式系統課程以及CortexM0可編程SoC系統設計課程的教學參考用書,也可作為學習Xilinx Vivado集成開發環境和Verilog HDL語言的參考用書。 在當今社會中,嵌入式系統的應用越來越廣泛,例如以智能手機為代表的嵌入式系統應用已經融入人們的日常生活中。英國ARM公司作為全球知名的嵌入式處理器IP核供應商,其所提供的CortexM、CortexR和CortexA三大系列處理器IP核以及基于這些IP核所構建的生態系統,已經成為當今嵌入式系統設計和應用的基礎。
由于保護知識產權的需要,一直以來ARM公司對其處理器設計技術進行嚴格保密,這使得掌握Cortex處理器架構并熟練高效應用Cortex處理器變得異常困難。此外,ARM Cortex處理器架構和指令集也比較復雜。這些因素都使得一個嵌入式系統設計人員很難從處理器架構、接口、外設、編程語言和操作系統等方面全面徹底掌握嵌入式系統設計知識。 近年來,國內很多高校都相繼開設了嵌入式系統相關的課程。但是,由于前面所提到的諸多因素,在市面上已經出版的ARM嵌入式系統教材并沒有全面系統地從處理器架構、AMBA規范、接口、外設、編程語言和操作系統等方面全方位系統地對設計嵌入式系統所需要的知識進行解讀,這給ARM嵌入式系統技術在國內教育界的普及推廣造成很大困難。目前,國內嵌入式系統課程的教學大都局限在APP開發,API函數調用的層面,與工業界對培養高素質嵌入式人才的要求有相當大的差距。 去年,ARM公司做了一件讓中國教育界非常高興的事情,它提供了免費開放的CortexM0 DesignStart內核等效RTL級設計代碼,可用于中國高校的嵌入式系統課程教學。通過ARM大學計劃經理陳瑋先生的幫助,本書作者得到了這個免費開放的CortexM0 DesignStart內核RTL級等效設計代碼。通過這個免費開放的CortexM0 DesignStart IP核以及Xilinx的Vivado 2016.1集成開發環境,作者在Xilinx最新的7系列FPGA內構建了CortexM0嵌入式系統硬件,同時,通過Keil μVision5集成開發環境為該嵌入式系統硬件開發了軟件應用程序。 與傳統采用專用CortexM處理器介紹嵌入式系統設計的教學模式相比,采用在FPGA內構建CortexM0嵌入式系統的方法可以為嵌入式系統課程的教學帶來以下好處: (1) 當采用開放的CortexM0內核構建嵌入式系統時,教師和學生可以清楚地理解CortexM0的運行機制,包括處理器架構、指令集、存儲器空間映射和中斷機制。 (2) 通過對AHBLite規范的詳細介紹和說明,教師和學生可以清楚地知道在一個芯片內將CortexM0嵌入式處理器與外設模塊和存儲器系統連接的方法。 (3) 通過使用Verilog HDL對實現特定功能外設的寄存器傳輸級RTL描述,教師和學生可以清楚地理解軟件寄存器與硬件邏輯行為之間的關系,也就是將軟件命令轉換成硬件邏輯行為的方法。 (4) 通過為所定制的CortexM0嵌入式系統硬件編寫軟件應用,教師和學生可以徹底理解和掌握軟件和硬件協同設計、協同仿真和協同調試的方法。 (5) 基于開放的CortexM0 DesignStart IP核,教師和學生可以從硬件底層逐步完成嵌入式系統的構建,以深入理解和全面掌握嵌入式系統的設計流程。 正是由于這種方法在未來嵌入式系統課程教學中有著無可比擬的巨大優勢,使得作者可以從處理器架構、指令集、AHBLite規范、匯編語言、C語言、外設、CMSIS和驅動,以及操作系統等幾個方面,全方位地對嵌入式系統的構建方法進行介紹,以期解決目前國內高校嵌入式系統課程教學所面臨的困境,并且為學習更高層次的嵌入式系統設計和應用拋磚引玉。 本書的最大特色就是將嵌入式系統的設計理論和實踐深度融合,通過典型且完整的設計案例多角度全方位地解讀嵌入式系統的設計方法。為了方便老師的教學和學生的自學,本書提供了教學課件和設計實例的完整代碼,以及公開的視頻教學資源,這些資源的獲取方式詳見書中的學習說明。 本書的編寫得到了ARM大學計劃經理陳瑋先生的大力支持和幫助,他為本書申請了免費開放的CortexM0 DesignStart IP核設計資源以及教學資源。此外,Xilinx公司的FAE對作者設計案例時遇到的問題進行了耐心細致的回答。作者的研究生李寶隆編寫了本書第1章的內容,張艷輝編寫了本書第2章的內容,作者的本科生湯宗美編寫并整理了本書的配套教學課件,王中正對本書的部分設計案例進行了驗證。此外,在本書編寫期間,平涼職業技術學院的惠小軍和唐海天老師進行了相關內容的學習,并幫助作者編寫了第17章和第18章的內容。他們的支持和幫助是作者高質量按時完成該書的重要保證,在此一并向他們表示感謝。 在本書出版的過程中,也得到了清華大學出版社各位編輯的幫助和指導,在此也表示深深的謝意。由于編者水平有限,編寫時間倉促,書中難免有疏漏之處,敬請讀者批評指正。 作者 2017年1月于北京 |