内容简介
本书是本系统论述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处理器
摘要与插图
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编程中。
……