本书是全球首本系统论述ARM Cortex-M0处理器及其编程的图书。本书既有ARM Cortex-M0处理器内核、体系结构及其应用的详尽论述,也有指令集、编译器、软件开发的基本论述,甚至也涵盖如何定位程序代码中的错误和软件移植等方面的知识。本书适合的读者对象包括:嵌入式产品设计工程师、嵌入式软件开发人员、电子爱好者以及学习嵌入式系统课程(ARM Cortex-M0)的高年级本科生及研究生等。
Joseph Yiu是英国ARM公司微控制器系统级设计专家,是ARM Cortex-M3和Cortex-M0设计者,作者高屋建瓴,创作了基于Cortex-M0的重量级作品——《ARM Cortex-M0指南》,这也是全球首本系统论述Cortex-M0的内核、体系结构、指令集、编译器、程序设计及软件移植的经典。作者配套提供了大量源代码(可到图书封底网址下载)。本书得到了五大专业机构六位知名专家的鼎力推荐。非常值得开发者珍藏!
Joseph Yiu 英国ARM公司博学专家,12年半导体行业从业经历(在ARM公司工作10年之余)。曾参与多个处理器设计项目,包括ARM Cortex-M3和Cortex-M0,并参与了多种ARM IP(知识产权)产品的开发。Joseph Yiu为微控制器系统级设计专家,并涉猎了诸多相关领域,包括ARM Cortex-M系列微控制器软件开发、微控制器市场以及片上系统设计技术。其他代表性著作有《The Definitive Guide to the ARM Cortex-M3, 2nd Edition》、《The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors, 3rd Edition》(中文翻译版即将由清华大学出版社出版发行)。
译者序
推荐序
前言
致谢
本书约定
缩写术语
第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使能和禁
21.5 Cortex-M1和Cortex-M0之间的差异
Cortex-M1和Cortex-M0都是基于ARMv6-M架构的,所以它们之间的差别要相对小一些。
21.5.1 指令集
在Cortex-M1处理器中,WFI、WFE和SEV指令就像NOP一样,目前的Cortex-M1处理器不具备休眠特性。
SVC指令在Cortex-M1上也是可选的(根据FPGA设计者的不同配置),而对于Cortex-M0处理器,SVC指令总是可用的。
21.5.2 NVIC
SVC和PendSV在Cortex-M1上是可选的,而在Cortex-M0上却总是存在的。两个处理器间的中断等待也是不同的,一些和中断等待有关的优化(如零误差)在目前的Cortex-M1上就是不成立的了。
21.5.3 系统级特性
为了实现和FPGA之间的高速访问,Cortex-M1上具有高速缓存(TCM),这样FPGA上的存储块就可以直接连到Cortex-M1,相比较而言,Cortex-M0则具有像WIC(唤醒中断控制器)之类的低功耗支持特性。
这两种处理器在配置选项上也有很多区别,并且这些选项只适用于FPGA设计者(Cortex-M1用户)或者ASIC设计者(Cortex-M0微控制器供应商)。例如,Cortex-M1具有串行线和JTAG两种调试接口,而Cortex-M0微控制器一般只支持其中的一种。
21.6 在Cortex-M0和Cortex-M1之间移植软件
总体而言,在Cortex-M0和Cortex-M1之间移植软件非常容易,除了外设编程模型的区别以外,其他需要改动的就很少了。
由于两个处理器基于相同的指令集以及同版本的架构,移植时软件代码往往可以直接使用,的例外是软件代码可能需要使用休眠特性。由于Cortex-M1不支持休眠模式,使用了WFI和WFE的应用程序代码就需要修改了。
由于执行时间的差异,软件代码可能需要一些小的调整。
写这本书的时候,Cortex-M1还没有可用的CMSIS软件包,不过由于两者基于相同的ARMv6-M架构,你可以将Cortex-M0的文件原样用到Cortex-M1编程中。 21.5 Cortex-M1和Cortex-M0之间的差异
Cortex-M1和Cortex-M0都是基于ARMv6-M架构的,所以它们之间的差别要相对小一些。
21.5.1 指令集
在Cortex-M1处理器中,WFI、WFE和SEV指令就像NOP一样,目前的Cortex-M1处理器不具备休眠特性。
SVC指令在Cortex-M1上也是可选的(根据FPGA设计者的不同配置),而对于Cortex-M0处理器,SVC指令总是可用的。
21.5.2 NVIC
SVC和PendSV在Cortex-M1上是可选的,而在Cortex-M0上却总是存在的。两个处理器间的中断等待也是不同的,一些和中断等待有关的优化(如零误差)在目前的Cortex-M1上就是不成立的了。
21.5.3 系统级特性
为了实现和FPGA之间的高速访问,Cortex-M1上具有高速缓存(TCM),这样FPGA上的存储块就可以直接连到Cortex-M1,相比较而言,Cortex-M0则具有像WIC(唤醒中断控制器)之类的低功耗支持特性。
这两种处理器在配置选项上也有很多区别,并且这些选项只适用于FPGA设计者(Cortex-M1用户)或者ASIC设计者(Cortex-M0微控制器供应商)。例如,Cortex-M1具有串行线和JTAG两种调试接口,而Cortex-M0微控制器一般只支持其中的一种。
21.6 在Cortex-M0和Cortex-M1之间移植软件
总体而言,在Cortex-M0和Cortex-M1之间移植软件非常容易,除了外设编程模型的区别以外,其他需要改动的就很少了。
由于两个处理器基于相同的指令集以及同版本的架构,移植时软件代码往往可以直接使用,的例外是软件代码可能需要使用休眠特性。由于Cortex-M1不支持休眠模式,使用了WFI和WFE的应用程序代码就需要修改了。
由于执行时间的差异,软件代码可能需要一些小的调整。
写这本书的时候,Cortex-M1还没有可用的CMSIS软件包,不过由于两者基于相同的ARMv6-M架构,你可以将Cortex-M0的文件原样用到Cortex-M1编程中。
……
"对于微控制器使用者来说,现在是让人非常兴奋的时期,许多供应商推出的ARMCortex-M设备的种类越来越多,而且应用范围也越来越广泛。许多使用8位和16位控制器的用户转而使用基于ARMCortex-M的设备,有了对ARMCortex-M0的介绍,他们都很惊讶这些设备这么容易使用而且32位机的性价比会这么高。因此,我很荣幸JosephYiu为用户写了这样一份ARM Cortex-M0设备指南,作为之前的8位机用户以及ARMCortex-M家族的,Joseph在指导新用户接触ARMCortex微控制器,以及给高级用户分享Cortex-M0的细节知识方面,确实有独到之处。
——Dominic Pajak博士 (ARM Cortex-M0产品经理)
"对于微控制器使用者来说,现在是让人非常兴奋的时期,许多供应商推出的ARM Cortex-M设备的种类越来越多,而且应用范围也越来越广泛。许多使用8位和16位控制器的用户转而使用基于ARM Cortex-M的设备,有了对ARM Cortex-M0的介绍,他们都很惊讶这些设备这么容易使用而且32位机的性价比会这么高。因此,我很荣幸Joseph Yiu为用户写了这样一份ARM Cortex-M0设备指南,作为之前的8位机用户以及ARM Cortex-M家族的,Joseph在指导新用户接触ARM Cortex微控制器,以及给高级用户分享Cortex-M0的细节知识方面,确实有独到之处。
——Dominic Pajak博士 (ARM Cortex-M0产品经理)
《ARM Cortex-M0指南》的作者Joseph Yiu在ARM公司剑桥总部的处理器部门担任MCU技术专家多年,他对Cortex-M系列的理解正如书名所述,可谓。因此本书的英文版一经推出即在使用Cortex-M0处理器的技术人员中广受好评和追捧。书中深度解析了Cortex-M0处理器的各个技术方面及应用开发,提供了很多高级技术细节,并配套了大量作者编写的源码供理解和参考,堪称内核分析与实战开发的结合。本书的中文版经过清华出版社和译者的精心工作后,现在终于推出,相信对于高校师生、嵌入式研发人员和爱好者、甚至半导体公司的技术人员,本书都是一本不可多得的宝典!
——时昕博士(ARM大中华区大学计划)
《ARM Cortex-M0指南》的作者Joseph Yiu是ARM公司微控制器系统级设计专家,本书的性毋庸置疑!该书首次揭秘Cortex-M0的内核,剖析介绍其体系结构与开发方法,并不吝篇幅介绍从其他架构处理器进行软件移植的方法,包括ARM7TDMI、ARM Cortex-M3以及8051微控制器移植的实例。,并配套提供作者亲自编写的大量实例源码,堪称一本Cortex-M0芯片内核分析与编程实战的学习解决方案!必将成为广大嵌入式产品设计工程师、嵌入式软件开发人员、电子爱好者以及嵌入式课程学习者的阅读“圣经”!
——与非网 创始人(苏公雨)
ARM Cortex-M0指南》终于有了中文版,这是学习ARM Cortex-M0人的福音!该书深度剖析了系统模型、指令集以及中断处理,把握ARM Cortex-M0的工作方式;综合运用汇编语言和C语言实现的丰富的ARM Cortex-M0编程案例,便于读者快速动手实践;并系统论述软件的开发流程,并以常用软件开发工具为例,介绍程序设计的实战案例;涵盖如何定位程序代码中的bug和软件移植等方面的知识;尤其适合真正想从事Cortex-M0系统设计实战的开发人员阅读学习。
——电子发烧友网站(陈峰)
《ARM Cortex-M0指南》细致入微地介绍了ARM公司Cortex-M0处理器。本书的亮点就是讲述了如何将从基于传统MCU的嵌入式设计过渡到基于Cortex-M0的嵌入式设计。该书的出版将极大推动Cortex-M0在中国嵌入式设计领域的应用,为中国“智造”添砖加瓦。
——何宾博士(畅销书《Xilinx FPGA设计指南》作者)