当前位置:主页 > 计算机电子书 > 计算机理论 > ARM下载
ARM Cortex-M0权威指南

ARM Cortex-M0权威指南 PDF 高清版

  • 更新:2020-05-30
  • 大小:209 MB
  • 类别:ARM
  • 作者:姚文详(Joseph、Yiu)
  • 出版:清华大学出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

《ARM Cortex-M0XX指南》是全球首本系统论述ARM Cortex-M0处理器及其编程的图书。本书既有ARM Cortex-M0处理器内核、体系结构及其应用的详尽论述,也有指令集、编译器、软件开发的基本论述,甚至也涵盖如何定位程序代码中的错误和软件移植等方面的知识。本书适合的读者对象包括:嵌入式产品设计工程师、嵌入式软件开发人员、电子爱好者以及学习嵌入式系统课程(ARM Cortex-M0)的高年级本科生及研究生等。

目录

  • 译者序
  • 推荐序
  • 前言
  • 致谢
  • 本书约定
  • 缩写术语
  • 第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实用参考文档

资源下载

资源下载地址1:https://pan.baidu.com/s/1Pq7FfAUQd1rowOHbufnM8g

网友留言