本书很好地把握通用知识与芯片相关知识之间的平衡。书中对于嵌入式“通用知识”的基本原理, 以应用为立足点, 进行语言简洁、逻辑清晰的阐述, 同时注意与芯片相关知识之间的衔接, 使读者在更好地理解基本原理的基础上, 理解芯片应用的设计, 同时反过来, 加深对通用知识的理解。
(1)把握通用知识与芯片相关知识之间的平衡。
(2)把握硬件与软件的关系。
(3)对底层驱动进行构件化封装。
(4)设计合理的测试用例。书
(5)网上光盘提供了所有模块完整的底层驱动构件化封装程序与测试用例。
(6)提供硬件核心板、写入调试器,方便读者进行实践与应用。同时提供了核心板与苏州大学恩智浦嵌入式中心设计的扩展板对接,以满足教学实验需要。
嵌入式计算机系统简称为嵌入式系统,其概念*初源于传统测控系统对计算机的需求。随着以微处理器(MPU)为内核的微控制器(MCU)制造技术的不断进步,计算机领域在通用计算机系统与嵌入式计算机系统这两大分支分别得以发展。通用计算机已经在科学计算、通信、日常生活等各个领域产生重要影响。在后PC时代,嵌入式系统的广泛应用是计算机发展的重要特征。一般来说,嵌入式系统的应用范围可以粗略地分为两大类: 一类是电子系统的智能化(如工业控制、汽车电子、数据采集、测控系统、家用电器、现代农业、传感网应用等),这类应用也被称为微控制器MCU领域。另一类是计算机应用的延伸(如平板电脑、手机、电子图书等),这类应用也被称为应用处理器MAP领域。在ARM产品系列中,ARM CortexM系列与ARM CortexR系列适用于电子系统的智能化类应用,即微控制器领域; ARM CortexA系列适用于计算机应用的延伸,即应用处理器领域。不论如何分类,嵌入式系统的技术基础是不变的,即要完成一个嵌入式系统产品的设计,需要有硬件、软件及行业领域相关知识。但是,随着嵌入式系统中软件规模日益增大,对嵌入式底层驱动软件的封装提出了更高的要求,可复用性与可移植性受到特别的关注,嵌入式软硬件构件化开发方法逐步被业界所重视。
2015年12月7日,恩智浦和飞思卡尔完成合并,合并后的公司名称仍为“恩智浦半导体”,成为全球汽车和安全半导体解决方案*大供应商以及全球第四大非存储类半导体企业。公司持续为互联汽车、物联网设备端到端安全与数据保护等领域提供更为完善的解决方案,旨在帮助人们实现“智慧生活,安全连接”。目前,恩智浦在北京、上海、深圳、苏州等设有办事处或研发中心,在大中华区员工总数超过11000人。
该公司的微控制器及应用处理器系列,由不同位数、不同封装形式、不同温度范围、所含模块不同等构成了庞大的产品系列,广泛地应用于汽车电子、消费电子、工业控制、网络、无线市场及视频等嵌入式系统各个领域,为嵌入式系统各种应用提供了选择与解决方案,使得用户可以各取所需。不论是电子系统智能化还是计算机应用延伸的嵌入式应用设计,无论需要怎样的系统功能和集成度,总能从这个庞大产品系列中选取一款合适的芯片进行应用开发。这正是嵌入式系统产品设计者所期望的,也节省了嵌入式学习者的时间,可以加快开发进度,提高开发质量。
本书以该公司于2012年开始推出的32位ARM CortexM0+内核的KL系列MCU为蓝本阐述嵌入式应用。本书第二版、第三版为普通高等教育“十一五”国家级规划教材,本版为普通高等教育“十二五”国家级规划教材、江苏省高等学校重点教材。本版是在2013年出版的第三版基础上重新撰写。主要变化有: 在ARM CortexM0+内核不变的前提下,增加了KL26芯片,重新梳理了通用知识要素,优化了底层构件封装; 将大部分驱动的使用方法提前阐述,而驱动构件的设计方法后置,目的是先学会使用进行实际编程,后理解构件的设计方法。因构件设计方法部分有一定难度,对于不同要求的教学场景,也可不要求学生理解全部构件的设计方法,讲解一两个即可。
随着作者多年教学与开发的经验积累,本书以嵌入式硬件构件及底层软件构件设计为主线,基于嵌入式软件工程的思想,按照“通用知识—驱动构件使用方法—测试实例—芯片编程结构—构件的设计方法”的路线,逐步阐述电子系统智能化嵌入式应用的软件与硬件设计。
本书具有以下特点。
(1) 把握通用知识与芯片相关知识之间的平衡。书中对于嵌入式“通用知识”的基本原理,以应用为立足点,进行语言简洁、逻辑清晰的阐述,同时注意与芯片相关知识之间的衔接,使读者在更好地理解基本原理的基础上,理解芯片应用的设计,同时反过来,加深对通用知识的理解。
(2) 把握硬件与软件的关系。嵌入式系统是软件与硬件的综合体,嵌入式系统设计是一个软件、硬件协同设计的工程,不能像通用计算机那样,软件、硬件完全分开来看。特别是对电子系统智能化嵌入式应用来说,没有对硬件的理解就不可能写好嵌入式软件,同样没有对软件的理解也不可能设计好嵌入式硬件。因此,本书注重把握硬件知识与软件知识之间的关系。
(3) 对底层驱动进行构件化封装。书中对每个模块均给出根据嵌入式软件工程基本原则并按照构件化封装要求编制底层驱动程序,同时给出详细、规范的注释及对外接口,为实际应用提供底层构件,方便移植与复用,可以为读者进行实际项目开发节省大量时间。
(4) 设计合理的测试用例。书中所有源程序均经测试通过,并保留测试用例在本书的网上光盘中,避免了因例程的书写或固有错误给读者带来烦恼。这些测试用例,也为读者验证与理解带来方便。
(5) 网上教学资源提供了所有模块完整的底层驱动构件化封装程序与测试用例。需要使用PC的程序的测试用例,还提供了PC的C#源程序。网上教学资源中还提供了阅读资料、开发环境的简明使用方法、写入器驱动与使用方法、部分工具软件、有关硬件原理图等。网上教学资源的版本将会适时更新。
(6) 提供硬件核心板、写入调试器,方便读者进行实践与应用。同时提供了核心板与苏州大学恩智浦嵌入式中心设计的扩展板对接,以满足教学实验需要。
本书由王宜怀负责编制提纲和统稿工作,并撰写第1~6章、第14章。吴瑾撰写第7~10章、文瑾撰写第11~13章。研究生王绍丹、徐达、刘锴、陆伟国、司萧俊、白聪、胡唯唯等协助书稿整理及程序调试工作,他们卓有成效的工作,使本书更加实用。恩智浦公司的马莉女士一直关心支持苏州大学恩智浦嵌入式中心的建设,为本书的撰写提供了硬件及软件资料,并提出了许多宝贵建议。恩智浦公司的许多技术人员提供了技术支持。清华大学出版社为本书的出版给予了大力的支持,在此一并表示诚挚的谢意。
鉴于作者水平有限,书中难免存在不足和疏漏之处,恳望读者提出宝贵意见和建议,以便再版时改进。
苏州大学王宜怀2017年3月
第1章概述
1.1嵌入式系统的定义、发展简史、分类及特点
1.1.1嵌入式系统的定义
1.1.2嵌入式系统的由来及发展简史
1.1.3嵌入式系统的分类
1.1.4嵌入式系统的特点
1.2嵌入式系统的学习困惑、知识体系及学习建议
1.2.1嵌入式系统的学习困惑
1.2.2嵌入式系统的知识体系
1.2.3基础阶段的学习建议
1.3微控制器与应用处理器简介
1.3.1微控制器简介
1.3.2以MCU为核心的嵌入式测控产品的基本组成
1.3.3应用处理器简介
1.4嵌入式系统常用术语
1.4.1与硬件相关的术语
1.4.2与通信相关的术语
1.4.3与功能模块相关的术语
1.5嵌入式系统常用的C语言基本语法概要
1.5.1C语言的运算符与数据类型
1.5.2程序流程控制
1.5.3函数
1.5.4数据存储方式
1.5.5编译预处理
小结
习题
第2章ARM CortexM0+处理器
2.1ARM CortexM0+处理器简介
2.1.1ARM CortexM0+处理器内部结构概要
2.1.2ARM CortexM0+处理器存储器映像
2.1.3ARM CortexM0+处理器的寄存器
2.2ARM CortexM0+处理器的指令系统
2.2.1ARM CortexM0+指令简表与寻址方式
2.2.2数据传送类指令
2.2.3数据操作类指令
2.2.4跳转控制类指令
2.2.5其他指令
2.3ARM CortexM0+指令集与机器码对应表
2.4GNU汇编语言的基本语法
2.4.1ARMGNU汇编语言格式
2.4.2伪指令
小结
习题
第3章存储映像、中断源与硬件*小系统
3.1恩智浦Kinetis系列微控制器简介
3.2KL系列MCU简介与体系结构概述
3.2.1KL系列MCU简介
3.2.2KL系列MCU体系结构概述
3.3KL25/26系列存储映像与中断源
3.3.1KL25/26系列存储映像
3.3.2KL25/26中断源
3.4KL25/26的引脚功能
3.4.1硬件*小系统引脚
3.4.2对外提供服务的引脚
3.5KL25/26硬件*小系统原理图
3.5.1电源及其滤波电路
3.5.2复位电路及复位功能
3.5.3晶振电路
3.5.4SWD接口电路
小结
习题
第4章GPIO及程序框架
4.1通用I/O接口基本概念及连接方法
4.2端口控制模块与GPIO模块的编程结构
4.2.1端口控制模块——决定引脚复用功能
4.2.2GPIO模块——对外引脚与内部寄存器
4.2.3GPIO基本编程步骤与基本打通程序
4.3GPIO驱动构件封装方法与驱动构件封装规范
4.3.1设计GPIO驱动构件的必要性及GPIO驱动构件封装要点分析
4.3.2底层驱动构件封装规范概要与构件封装的前期准备
4.3.3KL25的GPIO驱动构件源码及解析
4.4利用构件方法控制小灯闪烁
4.4.1Light构件设计
4.4.2Light构件测试工程主程序
4.5工程文件组织框架与*个C语言工程分析
4.5.1工程框架及所含文件简介
4.5.2链接文件常用语法及链接文件解析
4.5.3机器码文件解析
4.5.4芯片上电启动运行过程解析
4.6*个汇编语言工程: 控制小灯闪烁
4.6.1汇编工程文件的组织
4.6.2汇编语言GPIO构件及使用方法
4.6.3汇编语言Light构件及使用方法
4.6.4汇编语言Light测试工程主程序及汇编工程运行过程
小结
习题
第5章嵌入式硬件构件与底层驱动构件基本规范
5.1嵌入式硬件构件
5.1.1嵌入式硬件构件概念与嵌入式硬件构件分类
5.1.2基于嵌入式硬件构件的电路原理图设计简明规则
5.2嵌入式底层驱动构件的概念与层次模型
5.2.1嵌入式底层驱动构件的概念
5.2.2嵌入式硬件构件和软件构件的层次模型
5.3底层驱动构件的封装规范
5.3.1构件设计的基本思想与基本原则
5.3.2编码风格基本规范
5.3.3公共要素文件
5.3.4头文件的设计规范
5.3.5源程序文件的设计规范
5.4硬件构件及底层软件构件的重用与移植方法
小结
习题
第6章串行通信模块及*个中断程序结构
6.1异步串行通信的通用基础知识
6.1.1串行通信的基本概念
6.1.2RS232总线标准
6.1.3TTL电平到RS232电平转换电路
6.1.4串行通信编程模型
6.2KL25/26芯片UART驱动构件及使用方法
6.2.1KL25/26芯片UART引脚
6.2.2UART驱动构件基本要素分析与头文件
6.2.3printf的设置方法与使用
6.3ARM CortexM0+中断机制及KL25/26中断编程步骤
6.3.1关于中断的通用基础知识
6.3.2ARM CortexM0+非内核模块中断编程结构
6.3.3KL25/26中断编程步骤——以串口接收中断为例
6.4UART驱动构件的设计方法
6.4.1UART模块编程结构
6.4.2UART驱动构件源码
小结
习题
第7章定时器相关模块
7.1ARM CortexM0+内核定时器
7.1.1SysTick模块的编程结构
7.1.2SysTick构件设计及测试工程
7.2脉宽调制、输入捕捉与输出比较通用基础知识
7.2.1脉宽调制PWM通用基础知识
7.2.2输入捕捉与输出比较通用基础知识
7.3TPM模块的驱动构件及使用方法
7.3.1TPM模块的脉宽调制、输入捕捉、输出比较引脚
7.3.2TPM构件头文件
7.3.3TPM测试工程
7.4TPM模块驱动构件的设计方法
7.4.1TPM模块的编程结构
7.4.2TPM驱动构件的设计
7.5周期中断定时器PIT模块
7.5.1周期中断定时器PIT模块功能概述
7.5.2PIT驱动构件及使用方法
7.5.3PIT驱动构件设计
7.6低功耗定时器LPTMR模块
7.6.1低功耗定时器LPTMR模块功能概述
7.6.2LPTMR驱动构件及使用方法
7.6.3LPTMR驱动构件的设计
7.7实时时钟RTC模块
7.7.1RTC模块功能概述
7.7.2RTC驱动构件及使用方法
7.7.3RTC驱动构件的设计
小结
习题
第8章GPIO应用——键盘、LED及LCD
8.1键盘基础知识与键盘驱动构件设计
8.1.1键盘模型及接口
8.1.2键盘编程基本问题、扫描编程原理及键值计算
8.1.3键盘驱动构件的设计
8.2LED数码管基础知识与LED驱动构件设计
8.2.1LED数码管基础知识
8.2.2LED驱动构件设计及使用方法
8.3LCD基础知识与LCD驱动构件设计
8.3.1LCD的特点和分类
8.3.2点阵字符型LCD模块控制器HD44780
8.3.3LCD构件设计
8.4键盘、LED及LCD驱动构件测试实例
小结
习题
第9章Flash在线编程
9.1Flash驱动构件及使用方法
9.1.1Flash在线编程的基本概念
9.1.2KL25/26芯片Flash构件头文件及使用方法
9.2Flash保护与加密
9.2.1Flash保护含义及保护函数的使用说明
9.2.2Flash加密方法与去除密码方法
9.3Flash驱动构件的设计方法
9.3.1Flash模块编程结构
9.3.2Flash驱动构件设计技术要点
9.3.3Flash驱动构件封装要点分析
9.3.4Flash驱动构件的源程序代码
小结
习题
第10章ADC、DAC与CMP模块
10.1模拟/数字转换器ADC
10.1.1模/数转换器ADC的通用基础知识
10.1.2ADC驱动构件及使用方法
10.1.3ADC模块的编程结构
10.1.4ADC驱动构件的设计
10.2数字/模拟转换器DAC
10.2.1数/模转换器DAC的通用基础知识
10.2.2DAC驱动构件及使用方法
10.2.3DAC驱动构件的编程结构
10.2.4DAC驱动构件的设计
10.3比较器CMP
10.3.1比较器CMP的通用基础知识
10.3.2CMP驱动构件及使用方法
10.3.3CMP驱动构件的编程结构
10.3.4CMP驱动构件的设计
小结
习题
第11章SPI、I2C与TSI模块
11.1串行外设接口SPI模块
11.1.1串行外设接口SPI的通用基础知识
11.1.2SPI驱动构件头文件及使用方法
11.1.3SPI模块的编程结构
11.1.4SPI驱动构件的设计
11.2集成电路互连总线I2C模块
11.2.1集成电路互连总线I2C的通用基础知识
11.2.2I2C驱动构件头文件及使用方法
11.2.3I2C模块的编程结构
11.2.4I2C驱动构件的设计
11.3触摸感应接口TSI模块
11.3.1触摸感应接口TSI的通用基础知识
11.3.2TSI驱动构件头文件及使用方法
11.3.3TSI模块的编程结构
11.3.4TSI驱动构件的设计
小结
习题
第12章USB编程
12.1USB应用开发基础知识
12.1.1USB的物理特性
12.1.2USB主机与设备的概念与特性
12.1.3USB中断概述
12.2USB设备(从机)的应用编程方法
12.2.1USB设备(从机)驱动构件及使用方法
12.2.2USB设备(从机)方MCU编程实例
12.2.3USB设备(从机)PC驱动问题
12.2.4与USB设备(从机)通信的PC方程序设计
12.3USB主机的应用编程方法
12.3.1USB主机驱动构件及使用方法
12.3.2USB主机方MCU编程实例
12.4设计微控制器的USB驱动构件应掌握的基础知识
12.4.1USB底层编程涉及的基本概念
12.4.2USB底层编程涉及的描述符及设备请求
12.4.3USB设备状态
12.4.4USB总线的枚举过程
12.5KL25/26芯片USB模块的编程结构
12.5.1USB模块寄存器
12.5.2USB模块中断详解
12.5.3USB设备(从机)编程结构
12.5.4USB主机编程结构
12.6KL25/26芯片作为USB设备(从机)的驱动构件设计
12.7KL25/26芯片作为USB主机的驱动构件设计
第13章系统时钟与其他功能模块
13.1时钟系统
13.1.1时钟系统概述
13.1.2时钟模块概要与编程要点
13.1.3时钟模块测试实例
13.2电源模块
13.2.1电源模式控制
13.2.2电源模式转换
13.3低漏唤醒单元
13.4看门狗
13.5复位模块
13.5.1上电复位
13.5.2系统复位源
13.5.3调试复位
13.6位操作引擎技术及应用方法
13.6.1位操作引擎概述
13.6.2位操作引擎的应用机制解析
13.6.3位操作引擎对GPIO部分的使用说明
13.6.4位操作引擎使用注意点
13.6.5测试实例
小结
习题
第14章进一步学习指导
14.1关于更为详细的技术资料
14.2关于实时操作系统RTOS
14.3关于嵌入式系统稳定性问题
附录AKL25/26芯片引脚复用功能
A.1KL25引脚复用功能
A.2KL26引脚复用功能
附录BKL25/26硬件*小系统原理图
B.1KL25硬件*小系统原理图
B.2KL26硬件*小系统原理图
附录Cprintf的常用格式
C.1printf调用的一般格式
C.2格式字符串
C.3输出格式举例
参考文献