第3版 ARM Cortex-M3与Cortex-M4权威指南


第3版 ARM Cortex-M3与Cortex-M4权威指南

文章插图
ARM Cortex-M3与Cortex-M4权威指南(第3版)【第3版 ARM Cortex-M3与Cortex-M4权威指南】本书介绍了ARM Cortex-M3与Cortex-M相关知识的权威指南 , 目前基本上所有的CortexM设备驱动库都用上了CMSISCore , 而且CMSIS项目也扩展为DSP库软体等多个方面 。
基本介绍书名:ARM Cortex-M3与Cortex-M4权威指南(第3版)
作者:Joseph Yiu、吴常玉、曹孟娟、王丽红
ISBN:9787302402923
定价:89元
出版社:清华大学出版社
出版时间:2015.11.01
目录第1章ARMCortexM处理器简介1.1什幺是ARMCortexM处理器1.1.1CortexM3和CortexM4处理器1.1.2CortexM处理器家族1.1.3处理器和微控制器的区别1.1.4ARM和微控制器供应商1.1.5选择CortexM3和CortexM4微控制器1.2CortexM处理器的优势1.2.1低功耗1.2.2性能1.2.3能耗效率1.2.4代码密度1.2.5中断1.2.6易于使用1.2.7可扩展性1.2.8调试特性1.2.9OS支持1.2.10多种系统特性1.2.11软体可移植性和可重用性1.2.12选择(设备、工具和OS等)1.3ARMCortexM处理器套用1.4ARM处理器和ARM微控制器的资源1.4.1ARM网站上有什幺1.4.2微控制器供应商提供的文档1.4.3工具供应商提供的文档1.4.4其他资源1.5背景和历史1.5.1ARM简史1.5.2ARM处理器的发展1.5.3ThumbISA的架构版本1.5.4处理器命名1.5.5关于ARM生态系统第2章嵌入式软体开发简介2.1ARM微控制器是怎样构成的2.2开始时需要準备什幺2.2.1开发组件2.2.2开发板2.2.3调试适配器2.2.4软体设备驱动2.2.5例子2.2.6文档和其他资源2.2.7其他设备2.3软体开发流程2.4编译应用程式2.5软体流程2.5.1轮询2.5.2中断驱动2.5.3多任务系统2.6C程式中的数据类型2.7输入、输出和外设访问2.8微控制器接口2.9Cortex微控制器软体接口标準(CMSIS)2.9.1CMSIS简介2.9.2CMSISCore所做的标準化2.9.3CMSISCore的组织结构2.9.4如何使用CMSISCore2.9.5CMSIS的优势2.9.6CMSIS的多个版本第3章技术综述3.1CortexM3和CortexM4处理器的一般信息3.1.1处理器类型3.1.2处理器架构3.1.3指令集3.1.4模组框图3.1.5存储器系统3.1.6中断和异常支持3.2CortexM3和CortexM4处理器的特性3.2.1性能3.2.2代码密度3.2.3低功耗3.2.4存储器系统3.2.5存储器保护单元3.2.6中断处理3.2.7OS支持和系统级特性3.2.8CortexM4的特殊特性3.2.9易于使用3.2.10调试支持3.2.11可扩展性3.2.12兼容性第4章架构4.1架构简介4.2编程模型4.2.1操作模式和状态4.2.2暂存器4.2.3特殊暂存器4.2.4浮点暂存器4.3应用程式状态暂存器4.3.1整数状态标誌4.3.2Q状态标誌4.3.3GE位4.4存储器系统4.4.1存储器系统特性4.4.2存储器映射4.4.3栈存储4.4.4存储器保护单元(MPU)4.5异常和中断4.5.1什幺是异常4.5.2嵌套向量中断控制器(NVIC)4.5.3向量表4.5.4错误处理4.6系统控制块(SCB)4.7调试4.8复位和复位流程第5章指令集5.1ARMCortexM处理器指令集的背景简介5.2ARMCortexM处理器间的指令集比较5.3理解彙编语言语法5.4指令后缀的使用5.5统一彙编语言(UAL)5.6指令集5.6.1处理器内传送数据5.6.2存储器访问指令5.6.3算术运算5.6.4逻辑运算5.6.5移位和循环移位指令5.6.6数据转换运算(展开和反序)5.6.7位域处理指令5.6.8比较和测试5.6.9程式流控制5.6.10饱和运算5.6.11异常相关指令5.6.12休眠模式相关指令5.6.13存储器屏障指令5.6.14其他指令5.6.15不支持的指令5.7CortexM4特有的指令5.7.1CortexM4的增强DSP扩展简介5.7.2SIMD和饱和指令5.7.3乘法和MAC指令5.7.4打包和解包5.7.5浮点指令5.8桶形移位器5.9在编程中访问特殊暂存器和特殊指令5.9.1简介 5.9.2内在函式5.9.3内联彙编和嵌入彙编5.9.4使用其他的编译器相关的特性5.9.5访问特殊暂存器第6章存储器系统6.1存储器系统特性简介6.2存储器映射6.3连线处理器到存储器和外设6.4存储器需求6.5存储器的端6.6数据对齐和非对齐数据访问支持6.7位段操作6.7.1简介6.7.2位段操作的优势6.7.3不同数据大小的位段操作6.7.4C程式实现的位段操作6.8默认的存储器访问许可权6.9存储器访问属性6.10排他访问6.11存储器屏障6.12微控制器中的存储器系统第7章异常和中断7.1异常和中断简介7.2异常类型7.3中断管理简介7.4优先权定义7.5向量表和向量表重定位7.6中断输入和挂起行为7.7异常流程简介7.7.1接受异常请求7.7.2异常进入流程7.7.3执行异常处理7.7.4异常返回7.8中断控制用的NVIC暂存器细节7.8.1简介7.8.2中断使能暂存器7.8.3设定中断挂起和清除中断挂起7.8.4活跃状态7.8.5优先权7.8.6软体触发中断暂存器7.8.7中断控制器类型暂存器7.9用于异常和中断控制的SCB暂存器细节7.9.1SCB暂存器简介7.9.2中断控制和状态暂存器(ICSR)7.9.3向量表偏移暂存器(VTOR)7.9.4套用中断和复位控制暂存器(AIRCR)7.9.5系统处理优先权暂存器(SCB>SHP[0~11])7.9.6系统处理控制和状态暂存器(SCB>SHCSR)7.10用于异常或中断禁止的特殊暂存器细节7.10.1PRIMASK7.10.2FAULTMASK7.10.3BASEPRI7.11设定中断的步骤示例7.11.1简单情况7.11.2向量表重定位时的情况7.12软体中断7.13要点和提示第8章深入了解异常处理8.1简介8.1.1关于本章8.1.2C实现的异常处理8.1.3栈帧8.1.4EXC_RETURN8.2异常流程8.2.1异常进入和压栈8.2.2异常返回和出栈8.3中断等待和异常处理最佳化8.3.1什幺是中断等待8.3.2多周期指令执行时的中断8.3.3末尾连锁8.3.4延迟到达8.3.5出栈抢占8.3.6惰性压栈 第9章低功耗和系统控制特性9.1低功耗设计9.1.1低功耗对微控制器有什幺意义9.1.2低功耗系统需求9.1.3CortexM3和CortexM4处理器的低功耗特点9.2低功耗特性9.2.1休眠模式9.2.2系统控制暂存器(SCR)9.2.3进入休眠模式9.2.4唤醒条件9.2.5退出时休眠特性9.2.6挂起传送事件(SEVONPEND)9.2.7休眠扩展/唤醒延迟9.2.8唤醒中断控制器(WIC)9.2.9事件通信接口9.3在编程中使用WFI和WFE9.3.1何时使用WFI9.3.2使用WFE9.4开发低功耗套用9.4.1降低动态功耗9.4.2降低活跃周期9.4.3减小休眠模式电流9.5SysTick定时器9.5.1为什幺要有SysTick定时器9.5.2SysTick定时器操作9.5.3使用SysTick定时器9.5.4其他考虑9.6自复位9.7CPUID基本暂存器9.8配置控制暂存器9.8.1CCR简介9.8.2STKALIGN位9.8.3BFHFNMIGN位9.8.4DIV_O_TRP位9.8.5UNALIGN_TRP位9.8.6USERSETMPEND位9.8.7NONBASETHRDENA位9.9辅助控制暂存器9.10协处理器访问控制暂存器第10章OS支持特性10.1OS支持特性简介10.2影子栈指针10.3SVC异常10.4PendSV异常10.5实际的上下文切换10.6排他访问和嵌入式OS第11章存储器保护单元11.1MPU简介11.1.1关于MPU11.1.2使用MPU11.2MPU暂存器11.2.1MPU类型暂存器11.2.2MPU控制暂存器11.2.3MPU区域编号暂存11.2.4MPU基地址暂存器11.2.5MPU区域基本属性和大小暂存器11.2.6MPU别名暂存器11.3设定MPU11.4存储器屏障和MPU配置11.5使用子区域禁止11.5.1允许高效的存储器划分11.5.2减少所需的区域总数11.6使用MPU时的注意事项11.6.1程式代码11.6.2数据存储器11.6.3外设11.7MPU的其他用法11.8与CortexM0+处理器中的MPU间的差异第12章错误异常和错误处理12.1错误异常简介12.2错误的原因12.2.1存储器管理(MemManage)错误12.2.2汇流排错误 12.2.3使用错误12.2.4HardFault12.3使能错误处理12.3.1MemManage错误12.3.2汇流排错误12.3.3使用错误12.3.4HardFault12.4错误状态暂存器和错误地址暂存器12.4.1简介12.4.2MemManage错误信息12.4.3汇流排错误信息12.4.4使用错误信息12.4.5HardFault状态暂存器12.4.6调试错误状态暂存器(DFSR)12.4.7错误地址暂存器MMFAR和BFAR12.4.8辅助错误状态暂存器12.5分析错误12.6异常处理相关的错误12.6.1压栈12.6.2出栈12.6.3惰性压栈12.6.4取向量12.6.5非法返回12.6.6优先权和压栈或出栈错误12.7锁定12.7.1什幺是锁定12.7.2避免锁定12.8错误处理12.8.1用于调试的HardFault12.8.2错误禁止12.9其他信息12.9.1运行具有两个栈的系统12.9.2检测栈溢出第13章浮点运算13.1关于浮点数13.1.1简介13.1.2单精度浮点数13.1.3半精度浮点数13.1.4双精度浮点数13.1.5CortexM处理器中的浮点支持13.2CortexM4浮点单元(FPU)13.2.1浮点单元简介13.2.2浮点暂存器简介13.2.3CPACR暂存器13.2.4浮点暂存器组13.2.5浮点状态和控制暂存器(FPSCR)13.2.6浮点上下文控制暂存器(FPU>FPCCR)13.2.7浮点上下文地址暂存器(FPU>FPCAR)13.2.8浮点默认状态控制暂存器(FPU>FPDSCR)13.2.9介质和浮点特性暂存器(FPU>MVFR0、FPU>MVFR1)13.3惰性压栈详解13.3.1惰性压栈特性的关键点13.3.2第1种情况:被打断的任务中没有浮点上下文13.3.3第2种情况:被打断的任务中有浮点上下文 , ISR中没有13.3.4第3种情况:被打断的任务和ISR中都有浮点上下文13.3.5第4种情况:中断嵌套 , 且第2箇中断处理中存在浮点上下文13.3.6第5种情况:中断嵌套 , 且两个中断处理中都存在浮点上下文13.3.7惰性压栈的中断13.3.8浮点指令的中断 13.4使用浮点单元13.4.1CMSISCore中的浮点支持13.4.2用C语言实现浮点编程13.4.3编译器命令行选项13.4.4ABI选项:Hardvfp和Softvfp13.4.5特殊的FPU模式13.5浮点异常13.6要点和提示13.6.1微控制器的运行时库13.6.2调试操作第14章调试和跟蹤特性14.1调试和跟蹤特性简介14.1.1什幺是调试特性14.1.2什幺是跟蹤特性14.1.3调试和跟蹤特性总结14.2调试架构14.2.1CoreSight调试架构14.2.2处理器调试接口14.2.3调试连线埠(DP)、访问连线埠(AP)和调试访问连线埠(DAP)14.2.4跟蹤接口14.2.5CoreSight的特点14.3调试模式14.4调试事件14.5断点特性14.6调试部件简介14.6.1处理器调试支持14.6.2Flash补丁和断点(FPB)单元14.6.3数据监视点和跟蹤(DWT)单元14.6.4指令跟蹤宏单元14.6.5嵌入式跟蹤宏单元(ETM)14.6.6跟蹤连线埠接口单元(TPIU)14.6.7ROM表14.6.8AHB访问连线埠(AHBAP)14.7调试操作14.7.1调试连线14.7.2Flash编程14.7.3断点第15章KeilARM微控制器开发套件入门15.1简介15.2典型的程式编译流程15.3μVision入门15.4工程选项15.4.1Device选项15.4.2Target选项15.4.3Output选项15.4.4Listing选项15.4.5User选项15.4.6C/C++选项15.4.7Asm选项15.4.8Linker选项15.4.9Debug选项15.4.10Utilities选项15.5使用IDE和调试器15.6使用指令集模拟器15.7在SRAM中运行程式15.8最佳化选项15.9其他信息和要点15.9.1栈和堆存储大小配置15.9.2其他信息第16章IAREmbeddedWorkbenchforARM入门16.1IAREmbeddedWorkbenchforARM简介16.2典型的程式编译流程16.3创建简单的blinky工程16.4工程选项16.5提示和要点第17章GCC入门17.1GCC工具链17.2典型开发流程 17.3创建简单的blinky工程17.4命令行选项简介17.5Flash编程17.5.1使用KeilMDKARM17.5.2使用第三方Flash编程工具17.6KeilMDKARM和ARM嵌入式处理器GNU工具一起使用17.7CoIDE和ARM嵌入式处理器GNU工具一起使用17.8基于gcc的商业版开发组件17.8.AtollicTrueSTUDIOforARM17.8.2RedSuite17.8.3CrossWorksforARM第18章输入和输出软体实例18.1产生输出18.2重定向到指令跟蹤宏单元(ITM)18.2.1简介18.2.2KeilMDKARM18.2.3IAREmbeddedWorkbench18.2.4GCC18.3半主机18.4重定向到外设第19章使用嵌入式作业系统19.1嵌入式OS简介19.1.1什幺是嵌入式OS19.1.2何时使用嵌入式OS19.1.3CMSISRTOS的作用19.2KeilRTXRealTimeKernel19.2.1关于RTX19.2.2特性简介19.2.3RTX和CMSISRTOS19.2.4执行绪19.3CMSISRTOS实例19.3.1具有两个执行绪的简单CMSISRTOS19.3.2执行绪间通信简介19.3.3信号事件通信19.3.4互斥体(MUTEX)19.3.5信号量19.3.6讯息伫列19.3.7邮件伫列19.3.8记忆体池管理特性19.3.9通用等待函式和逾时数值19.3.10定时器特性19.3.11访问非特权设备19.4OS感知调试19.5疑难解答19.5.1栈大小和栈对齐19.5.2特权等级19.5.3其他问题第20章彙编和混合语言工程20.1彙编代码在工程中的使用20.2C和彙编间的互动20.3彙编函式的结构20.4例子20.4.1ARM工具链的简单例子(KeilMDKARM、DS5)20.4.2ARM嵌入式处理器GNU工具的简单例子20.4.3访问特殊暂存器20.4.4数据存储器20.4.5Helloworld20.4.6显示十六进制和十进制的数据20.4.7NVIC中断控制20.4.8无符号整数平方根20.5混合语言工程20.5.1从彙编中调用C函式20.5.2从C中调用彙编函式20.5.3嵌入彙编(KeilMDKARM/ARMDS5professional) 20.5.4内联彙编20.6内在函式20.7习语识别第21章ARMCortexM4和DSP套用21.1微控制器上的DSP21.2点积实例21.3传统DSP处理器的架构21.4CortexM4的DSP指令21.4.1暂存器和数据类型21.4.2小数运算21.4.3SIMD数据21.4.4载入和存储指令21.4.5算术指令21.4.6CortexM4的一般最佳化策略21.4.7指令限制21.5为CortexM4编写最佳化的DSP代码21.5.1Biquad滤波器21.5.2快速傅立叶变换21.5.3FIR滤波器第22章使用ARMCMSISDSP库22.1DSP库简介22.2预构建的二进制代码22.3函式命令规则22.4获得帮助22.5例1:DTMF解调22.5.1产生正弦波22.5.2使用FIR滤波器进行解析22.5.3使用FFT进行解析22.5.4使用Biquad滤波器进行解析22.5.5DTMF示例代码22.6例2:最小二乘法运动跟蹤第23章高级话题23.1决断和跳转23.1.1条件跳转23.1.2複杂的判决树23.2性能考虑23.3双字栈对齐23.4信号量设计的各种方法23.4.1用SVC服务实现信号量23.4.2使用位段实现信号量23.5非基本执行绪使能23.6中断服务的重入23.7C语言实现的位数据处理23.8启动代码23.9栈溢出检测23.9.1工具链的栈分析23.9.2栈的测试分析23.9.3根据栈布局检测栈溢出23.9.4使用MPU23.9.5使用DWT和调试监控异常23.9.6OS上下文切换中的栈检查23.10Flash补丁特性23.11CortexM3和CortexM4处理器的版本23.11.1简介23.11.2CortexM3r0p0到r1p0/r1p1的变动23.11.3CortexM3r1p1到r2p0的变动23.11.4CortexM3r2p0到r2p1的变动23.11.5CortexM4r0p0到r0p1的变动第24章软体移植24.1简介24.2从8位/16位MCU移植到CortexMMCU24.2.1架构差异24.2.2一般调整24.2.3存储器大小需求24.2.48位或16位微控制器不再适用的最佳化24.2.5例子:从8051移植到ARMCortexM 24.3从ARM7TDMI到CortexM3/M4的软体移植24.3.1硬体差异简介24.3.2彙编语言档案24.3.3C语言档案24.3.4预编译的目标档案和库24.3.5最佳化24.4不同CortexM处理器间的软体移植24.4.1不同CortexM处理器间的差异24.4.2所需的软体变动24.4.3嵌入式OS24.4.4创建CortexM处理器的可移植程式代码