描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302467571丛书名: 电子设计与嵌入式开发实践丛书
本书提供了网上教学资源,内含所有底层驱动构件源程序、测试实例、文档资料、教学课件及常用软件工具。网上教学资源下载地址: http://sumcu.suda.edu.cn。本书内容还制作了MOOC,供读者选用。
本书适用于高等学校嵌入式系统的教学或技术培训,也可供ARM CortexM0 应用工程师作为技术研发参考。
目录
第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输出格式举例
参考文献
网上教学资源文件夹结构
该教学资源可在网站http://sumcu.suda.edu.cn下载。
本章导读: 本章简要概述了KL25/26的存储映像、中断源与硬件小系统,有助于读者了解KL25/26软硬件系统的大致框架,以便开始KL25/26的软硬件设计。3.1节简要介绍了Kinetis全系列微控制器产品分类及应用领域; 3.2节给出KL系列MCU的型号标识、基本特点及体系结构概述; 3.3节给出KL25/26系列芯片的存储映像及中断源,存储映像主要包括Flash区、片内RAM区,以便于配置链接文件; 3.4节将引脚分为硬件小系统引脚及对外提供服务的引脚两类,并介绍其各自的功能; 3.5节给出了KL25/26硬件小系统的原理图及简明分析。本章参考资料: 3.1节主要参考自官网Kinetis的简介; 3.2节主要参考自官网资料KL系列介绍以及《KL参考手册》本书随后所说的《KL参考手册》均分别指《KL25参考手册》《KL26参考手册》。; 3.3节的KL25/26系列存储映像与中断源参考自《KL参考手册》的第3章; 3.4节的KL25/26的引脚功能,参考自《KL参考手册》的第10章。3.1恩智浦Kinetis系列微控制器简介飞思卡尔(2015年与恩智浦合并)在2010年飞思卡尔技术论坛(FTF2010)美国站推出了Kinetis系列微控制器,这是基于新ARM CortexM4处理器的90nm 32位MCU,开创了其微控制器领先地位的新纪元。它基于低功率混合信号ARM CortexM4处理器,是业内扩展能力强的MCU系列之一。面向不同应用领域,Kinetis系列基于不同的ARM CortexM内核陆续推出了Kinetis K系列、L系列、M系列、W系列、E系列、EA系列以及V系列。了解这些系列概况有助于应用时选型。1. K系列Kinetis K系列产品组合有超过两百种基于ARM CortexM4结构的低功耗、高性能、可兼容的微控制器。这个系列产品集成度高,它包含多种快速16位ADC、DAC和可编程增益放大器以及强大、经济有效的信号转换器。目标应用领域是便携式医疗设备、仪器仪表、工业控制及测量设备等。2. KL系列Kinetis L系列(KL系列)MCU不仅汲取了新型ARM CortexM0 处理器的卓越能效和易用性、功耗更低、价格更低、效率更高,而且体现了Kinetis产品优质的性能、多元化的外设、广泛的支持和可扩展性。目标应用领域是8/16位MCU应用领域的升级换代,适用于价格敏感、能效比相对较高的领域,如手持设备、智能终端等。3. KM系列KM系列也是基于32位ARM CortexM0 内核的MCU。所有KM系列MCU都包含一个模拟前端,使CPU的电源计算可以达到0.1%的精确度。它包含4个24位ΣΔ模数转换器、两个低噪声可编程增益放大器,温度漂移范围小和具有相对补偿的精密参考电压,以简化精确的功率计算。目标应用领域是经济高效的单相或两相电表设计中。4. KW系列KW系列MCU扩展了K系列基于ARM CortexM4的成功之处。KW20无线MCU集成了领先的RF收发器和ARM CortexM4内核,并且支持一个强大的、安全的、可靠的和低功耗的IEEE 802.15.4的无线解决方案。KW系列是一个性能优越的无线MCU选择方案,可以提供良好的混合性能、集成、连通性和安全性。KW01超低功耗无线MCU是基于ARM CortexM0 内核的智能无线解决方案,旨在解决低于1GHz(290~1020MHz)的无线连接应用。目标应用领域是智能电表、传感器控制网络、工业控制、数据采集等。5. KE系列KE系列产品可在复杂电气噪声环境和要求高可靠性的应用中保持高稳定性,而且有丰富的存储器、外设和产品包可供选择。它们具有通用的外设和引脚数量,使开发人员能够轻松实现相同MCU系列内或多个MCU系列间的迁移,以利用更多存储器或特性集成。这种可扩展性使开发人员能够在KE系列上实现其终端产品平台的标准化,程度地提高硬件和软件的再利用,并加快产品上市速度。6. KEA系列KEA系列32位MCU广泛适用于质量要求和长期供货保证要求都很高的汽车和工业应用。KEA系列是广泛的ARM生态合作体系的入门级产品,拥有出色的EMC/ESD兼容性,能够适应高温环境,并且辐射排放较低。恩智浦为KEA系列提供可扩展、稳定可靠的高性能解决方案,适合成本敏感型汽车应用。此外恩智浦还提供了丰富的参考设计、工具和应用说明,程度缩短设计开发时间,加快产品上市速度。7. KV系列KV系列MCU基于ARM CortexM0 、CortexM4和CortexM7内核,专为各种BLDC、PMSM和ACIM电机控制以及数字电源转换应用而设计。凭借飞思卡尔逾二十年的电机控制处理器专长,推出针对电机控制和数字功率的MCU是顺理成章的事。KV系列凭借出色的性能/价格比、量身定制的外设和捆绑型电机套件,可以使开发人员比以前更快、更容易地进行高效的设计。3.2KL系列MCU简介与体系结构概述3.2.1KL系列MCU简介
KL系列MCU于2012年6月提供样片,2013年正式上市。该系列MCU是业内首款基于ARM CortexM0 内核的MCU,具有超低功耗、应用设计方便、扩展性好、系列品种齐全等特点。目标市场是传统8位MCU应用领域的32位升级换代。Kinetis L系列MCU面向家用电器、便携式医疗系统、智能电表、照明、电源、电机控制及工业控制系统等,对稳定性、功耗、成本和易用性等方面有较严格要求的市场。该系列的设计充分考虑了应用的简约性,使得应用工程师可以像使用8位机一样进行32位机的应用开发。同时,KL系列MCU和基于ARM CortexM4内核的K系列MCU完全兼容,包括引脚。为提高性能、扩大闪存和未来集成提供了扩展途径,也使得软件、硬件的可复用性与可移植性得到了较宽的延伸。KL系列MCU具有多个低功率操作模式,包括新的门控时钟,该模式在要求功耗时通过关闭总线、系统时钟减少动态功耗,外设仍可在一个可选异步时钟源下继续运作; 在未唤醒内核情况下,UART、SPI、I2C、ADC、DAC、TPM、LPT和DMA等可支持低功耗模式。KL系列MCU主要特点如下: CPU工作频率48MHz、支持直接存储器访问(Direct Memory Access,DMA),位操作引擎(Bit Manipulation Engine,BME)、内核单周期访问内存速度可达1.77CoreMark/MHz、单周期访问I/O、关键外设速度比标准I/O提高50%; 2级流水线设计减少了指令周期数(CPI),提高跳转指令和执行ISR中断服务例程速度; 与8位、16位MCU相比具有更精简的代码密度,减少Flash空间、系统资源及功耗; 更精简的指令系统优化访问程序存储空间,完全兼容ARM CortexM0,兼容CortexM3/M4指令集子集。执行跟踪缓冲区: 实现轻量级追踪解决方案,更快定位修正bug。1. KL系列MCU的型号标识
恩智浦Kinetis系列MCU的型号众多,但同一子系列的CPU核是相同的,多种型号只是为了适用于不同的应用场合。为了方便选型或订购,需记忆MCU型号标识的基本含义。KL系列命名格式为: “QKL##AFFFRTPPCC(N)”,其中,各字段说明如表31所示,本书使用的芯片命名为MKL25Z128VLK4。
表31KL系列芯片命令字段说明
字段说明取值
Q质量状态M=正式发布芯片; P=工程测试芯片KL##Kinetis系列号KL25A内核属性Z=CortexM0 FFF程序Flash大小32=32KB; 64=64KB; 128=128KB; 256=256KBR硅材料版本(空) =主要使用的版本; A=主要使用版本的更新T运行温度范围V=-40~105℃PP封装类型FM=32 QFN(5mm×5mm); FT=48 QFN(7mm×7mm);
LH=64 LQFP(10mm×10mm); LK=80 LQFP(12mm×12mm)CCCPU频率4=48MHzN包装类型R=卷包装; (空)=盒包装
2. KL系列MCU的共性KL系列MCU由5个子系列组成,分别是KL0x、KL1x、KL2x、KL3x、KL4x,表32给出了KL系列芯片的简明资源。所有KL系列MCU均具有低功耗与丰富的混合信号控制外设,提供了不同的闪存容量和引脚数量,供实际应用选型。从应用的角度而言,KL0x属于入门级芯片,KL1x属于通用型芯片,而KL2x、KL3x、KL4x则更具针对性,KL2x系列具有USB OTG技术,KL3x系列支持段式LCD,KL4x系列为KL的旗舰系列,支持功能也丰富。
表32KL系列芯片的简明资源
系列Flash大小引脚数量低功耗模拟信号USB段式LCD备注
KL4x128~256KB64~121√√√√
KL3x64~256KB64~121√√
√
KL2x32~256KB32~121√√√
本书选用KL1x32~256KB32~80√√
KL0x8~32KB16~48√√
KL系列MCU在内核、低功耗、存储器、模拟信号、人机接口、安全性、定时器及系统特性等方面具有一些共同特点,简要总结在表33中。
表33KL系列MCU的共性
项目特点
超低功耗32位ARM CortexM0 内核具有超低功耗内存可扩展内存: 8KB Flash/1KB SRAM至128KB Flash/16KB SRAM; 内含64B高速缓冲存储区,可优化总线宽度和Flash的执行性能(KL02系列除外) 模拟信号快速、高精度16/12位ADC; 12位DAC; 高速比较器人机接口低功率触摸感应界面通信所有UART支持DMA传输,总线检测到数据也能触发传输; UART0支持4~32倍的采样速率; 在STOP/VLPS模式,也能运行异步传输和接收操作; 支持两路SPI; 支持两路I2C; 支持全速USB OTG片内传输控制设备可靠性、安全性内部看门狗监控定时控制器强大的定时模块支持通用/PWM/电机控制功能; 可用于RTOS任务调度、ADC转换或定时的周期中断定时器系统特性GPIO支持引脚中断; 宽泛的工作电压: 1.71~ 3.6V; Flash编程电压、模拟外设电压低至1.71V; 运行温度范围: -40℃~ 105℃
3. KL25/26子系列MCU简明资源本书以KL25与KL26子系列为蓝本阐述嵌入式技术基础,至本书出版时,该系列各共有12个具体芯片型号。共同特点有: CPU工作频率为48MHz; 工作电压为1.71~ 3.6V; 运行温度范围为-40℃~105℃; 具有64B的Cache; 具有USB OTG、定时器、DMA、UART、SPI、I2C、TSI、16位ADC、12位DAC等模块。在Flash容量、RAM容量、I/O引脚数及封装形式等有差异,见表34,带底纹的型号为本书选用。具体应用时,需查询芯片的数据手册。
表34KL25/26子系列MCU简明资源
引脚数封装Flash/KBSRAM/KBKL25型号KL26型号
32QFN32 4 MKL25Z32VFM4(R)MKL26Z32VFM4(R)64 8 MKL25Z64VFM4(R)MKL26Z64VFM4(R)128 16 MKL25Z128VFM4(R)MKL26Z128VFM4(R)48QFN32 4 MKL25Z32VFT4(R)MKL26Z32VFT4(R)64 8 MKL25Z64VFT4(R)MKL26Z64VFT4(R)128 16 MKL25Z128VFT4(R)MKL26Z128VFT4(R)
续表
引脚数封装Flash/KBSRAM/KBKL25型号KL26型号
64LQFP32 4 MKL25Z32VLH4(R)MKL26Z32VLH4(R)64 8 MKL25Z64VLH4(R)MKL26Z64VLH4(R)128 16 MKL25Z128VLH4(R)MKL26Z128VLH4(R)80LQFP32 4 MKL25Z32VLK4(R)MKL26Z32VLK4(R)64 8 MKL25Z64VLK4(R)MKL26Z64VLK4(R)128 16 MKL25Z128VLK4(R)MKL26Z128VLK4(R)
3.2.2KL系列MCU体系结构概述KL系列MCU是以AMBA总线规范为架构的片上系统(System On Chip,SOC),如图31所示。一般来说,AMBA架构包含高性能系统总线(Advanced High Performance Bus,AHB)和低速、低功耗的高级外设总线(Advanced PeriPheral Bus,APB)。高性能系统总线AHB是负责连接ARM内核、DMA控制器、片内存储器或其他需要高带宽的模块。而外设总线APB则是用来连接系统的外围慢速模块,其协议规则相对系统总线AHB来说较为简单,它与系统总线AHB之间则通过总线桥(Bus Bridge)相连,期望能减少系统总线的负载。
图3132位MCU系统、外围总线模块图
1. AMBA总线规范ARM公司定义了AMBA(Advanced Microcontroller Bus Architecture)总线规范,它是一组针对基于ARM内核、片内系统之间通信而设计的标准协议。在AMBA总线规范中,定义三种总线,分别是: ①高性能总线,用于高性能系统模块的连接,支持突发模式数据传输和事务分割; ②高级系统总线(Advanced System Bus,ASB),也用于高性能系统模块的连接,支持突发模式数据传输,这是较老的系统总线格式,后来由高性能总线AHB替代; ③高级外设总线(Advanced PeriPheral Bus,APB),用于较低性能外设的简单连接,一般是接在AHB或ASB系统总线上的第二级总线。初的AMBA总线是ASB和APB。在它的第二个版本中,ARM引入了AHB。2. 总线桥总线桥(Bus Bridge),在《KL参考手册》中也被称为外设桥(Peripheral Bridge),给外设桥的名字是AIPSLite,即图31中的Bus Bridge。外设桥的作用是把交叉开关(Crossbar Switch)接口协议,转换成私有外设总线协议(IPS/APB)。本书中MCU外设桥以外设槽(Slot)形式,多可连接128个外设,给每个外设分配4KB的寄存器映像空间。外设桥为每个外设槽提供了独立时钟,以便更好地支持低速外设。3. 交叉开关交叉开关(Crossbar Switch)将总线主机与总线从机相连,该结构允许多达4路主机同时访问不同总线从机。所谓总线主机是指其可在总线上产生与控制所有时序。当总线主机试图通过交叉开关访问从机端口,若该端口处于空闲状态,则执行访问,访问速度可达单周期或零等待; 若从机端口处于忙状态或被其他总线主机占用,总线主机插入查询等待状态直到目的从机响应服务主机请求。响应服务延迟时间取决于每个主机各自优先级以及访问目的从机时间。但若同时访问相同从机时,交叉开关提供仲裁机制确定访问顺序,仲裁机制包括优先级固定算法和优先级轮转算法。3.3KL25/26系列存储映像与中断源3.3.1KL25/26系列存储映像
所谓存储映像(Memory Mapping)在这里可以直观地理解为,M0 寻址的4GB地址空间(0x0000_0000~0xFFFF_FFFF)0x00000000书写成0x0000_0000仅仅是为了清晰,便于阅读。被如何使用,都对应了哪些实际的物理介质。有的给了Flash存储器使用,有的给了RAM使用,有的给了外设模块使用。下面利用GPIO模块来阐述有关概念。GPIO模块使用了0x400F_F000~0x400F_FFFF地址空间,这些空间内的GPIO寄存器与CPU(即M0 内核)内部寄存器(如R0、R1等)不同,访问GPIO寄存器需要使用直接地址进行访问,也就是说需要使用三总线(地址总线、数据总线、控制总线)。而访问CPU内部寄存器,不需经过三总线(汇编语言直接使用R0、R1等名称即可),没有地址问题。由于访问CPU内部寄存器不经过三总线,所以比访问GPIO寄存器(对应直接地址)来得快。为区别于CPU内部寄存器,GPIO寄存器也被称为“映像寄存器”(Mapping Register),相对应的地址被称为“映像地址”(Mapping Address)。整个可直接寻址的空间被称为“映像地址空间”(Mapping Address Space)。KL25/26把M0 内核之外的模块,用类似存储器编址的方式,统一分配地址。在4GB的映像地址空间内,分布着片内Flash、SRAM、系统配置寄存器以及其他外设等,以便CPU通过直接地址进行访问。表35给出了本书中介绍的MKL25Z128VLK4(简称KL25,下同)和MKL26Z128VLH4(简称KL26,下同)存储映像空间分配。
表35KL25/26存储映像空间分配
32位地址范围目 的 从 机说明
0x0000_0000~0x07FF_FFFF可编程Flash和只读数据128KB(0x0000_0000~0x0001 FFFF) 0x0800_0000~0x1FFF_EFFF保留—0x1FFF_F000~0x1FFF_FFFFSRAM_L: Lower SRAM16KB RAM区0x2000_0000~0x2000_2FFFSRAM_U: Upper SRAM0x2000_3000~0x3FFF_FFFF保留—0x4000_0000~0x4007_FFFFAIPS外围设备串口、定时器、模块配置等0x4008_0000~0x400F_EFFF保留—0x400F_F000~0x400F_FFFF通用输入/输出(GPIO)GPIO模块0x4010_0000~0x43FF_FFFF保留—0x4400_0000~0x5FFF_FFFF BME访问外设槽0127只能对特定的区域位操作0x6000_0000~0xDFFF_FFFF保留—0xE000_0000~0xE00F_FFFF私有外设系统时钟、中断控制器、调试接口0xE010_0000~0xEFFF_FFFF保留~0xF000_0000~0xF000_0FFFMTB(微型跟踪缓存)寄存器—0xF000_1000~0xF000_1FFFMTB数据查看和跟踪寄存器—0xF000_2000~0xF000_2FFFROM表存放存储映射信息0xF000_3000~0xF000_3FFF杂项控制模块—0xF000_4000~0xF7FF_FFFF保留—0xF800_0000~0xFFFF_FFFFIOPORT: GPIO(单周期访问)可被内核直接访问
对于此表,主要记住片内Flash区及片内RAM区存储映像。因为中断向量、程序代码、常数放在片内Flash中,源程序编译后的链接阶段需要使用的链接文件中需含有目标芯片Flash的地址范围及用途等信息,才能顺利生成机器码。链接文件中还需包含RAM的地址范围及用途等信息,以便生成机器码确切定位全局变量、静态变量的地址及堆栈指针。1. 片内Flash区存储映像KL25/26片内Flash大小为128KB,地址范围是: 0x0000_0000 ~ 0x0001_FFFF,一般被用来存放中断向量、程序代码、常数等,其中前192B为中断向量表。2. 片内RAM区存储映像KL25/26片内RAM为静态随机存储器SRAM,大小为16KB,地址范围是: 0x1FFF_F000~0x2000_2FFF,一般被用来存储全局变量、静态变量、临时变量(堆栈空间)等。这16KB的RAM,在物理上被划分为SRAM_L和SRAM_U两个部分将SRAM划分为SRAM_L和SRAM_U。SRAM_U不仅可以作为普通RAM来操作,还可以支持两种途径的位操作,分别是位带别名区、位操作引擎(BME),供特殊功能下高级编程使用。,分为SRAM_L: 0x1FFF_F000~0x1FFF_FFFF(4KB); SRAM_U: 0x2000_0000~0x2000_2FFF(12KB)。该芯片的堆栈空间的使用方向是向小地址方向进行的,因此,堆栈的栈顶应该设置为RAM地址的值 1。这样,全局变量及静态变量从RAM的小地址向大地址方向开始使用,堆栈从RAM的地址向小地址方向使用,可以减少重叠错误。3. 其他存储映像其他存储映像,如外设区存储映像(外设桥、GPIO、位操作引擎等)、私有外设总线存储映像、系统保留段存储映像等,只需了解即可,实际使用时,由芯片头文件给出宏定义。需特殊说明的是位操作引擎BME: 支持BME位操作引擎存储区地址位于0x4400_0000~0x5FFF_FFFF。用于对外设的位操作,位操作引擎技术由硬件支持,可使用CortexM指令集中基本的加载、存储指令完成对外设地址空间内存的读、改、写操作。具体用法见13.4节。3.3.2KL25/26中断源中断是计算机发展中一个重要的技术,它的出现很大程度上解放了处理器,提高了处理器的执行效率。所谓中断,是指MCU在正常运行程序时,由于MCU内核异常或者MCU各模块发出请求事件,引起MCU停止正在运行的程序,而转去处理异常或执行处理外部事件的程序(又称中断服务程序)。这些引起MCU中断的事件称为中断源。KL25/26的中断源分为两类,如表36所示,一类是内核中断,另一类是非内核中断。内核中断主要是异常中断,也就是说,当出现错误的时候,这些中断会复位芯片或是做出其他处理。非内核中断是指MCU各个模块被中断源引起的中断,MCU执行完中断服务程序后,又回到刚才正在执行的程序,从停止的位置继续执行后续的指令。非内核中断又称可屏蔽中断,这类中断可以通过编程控制,开启或关闭该中断。
表36KL25/26的中断源
中 断 类 型中断向量号IRQ中断号IPR寄存器号中断源中断源说明
内核中断0~3
ARM内核
4~10
预留
11
ARM内核
12,13
预留
14,15
ARM内核
非内核中断16~190~30DMADMA通道0~3传输完成或错误2041预留
2151FTFA命令完成或者读冲突2261PMC低电压检测和警告中断2371LLWU低漏唤醒24,258,92I2C0,I2C1I2C0,I2C1中断26,2710,112SPI0,SPI1SPI0,SPI1中断28~3012~143UART0~2UART0~2状态和错误中断31153ADC0ADC转换完成中断32164ACMP0ACMP中断33~3517~194TPM0~2TPM0~2中断36205RTCRTC定时报警中断37215RTCRTC秒中断38225PITPIT中断
续表
中 断 类 型中断向量号IRQ中断号IPR寄存器号中断源中断源说明
非内核中断39235I2S0KL25中无I2S模块
40246USBOTG
41256DAC0
42266TSI0
43276MCG
44287LPTMR0
45297预留
46307端口控制模块端口A引脚检测47317端口控制模块端口C,D引脚检测
表36中还给出了各中断源的中断向量序号,非内核中断的中断请求(Interrupt Request)号(简称IRQ中断号),以及非内核中断的优先级设置的寄存器号(简称IPR寄存器号)。中断向量序号是每一个中断源的固定编号,由芯片设计生产时决定,编程时不能更改,它代表了中断服务程序入口地址在中断向量表的位置。IRQ中断号是非内核中断源的编号,每一个编号代表一个非内核中断源。6.3节将讲述中断的基本编程方法。
3.4KL25/26的引脚功能本书以80引脚LQFP封装的MKL25Z128VLK4芯片与64引脚LQFP封装的MKL26Z128VLH4芯片为例阐述ARM CortexM0 架构的Kinetis MCU的编程和应用。若没有特殊说明,本书的KL25均指MKL25Z128VLK4芯片,KL26均指MKL26Z128VLH4芯片。图32给出了80引脚LQFP封装的MKL25Z128VLK4的引脚图来自《KL25参考手册》第10章图102,该章还给出了KL25的64引脚LQFP封装及48引脚QFN封装的引脚图。,图33给出的是64引脚LQFP封装的MKL26Z128VLH4的引脚图来自《KL26参考手册》第10章图102,该章还给出了KL26的121引脚BGA封装、100引脚LQFP封装、64引脚MAPBGA封装、48引脚QFN封装及32引脚QFN封装的引脚图。。
图3280引脚LQFP封装MKL25Z128VLK4引脚图
每个引脚都可能有多个复用功能,有的引脚有两个复用功能,有的有4个复用功能,实际嵌入式产品的硬件系统设计时必须注意只能使用其中的一个功能。进行硬件小系统设计时,一般以引脚的功能作为引脚名进行原理图设计,若实际使用的是其另一功能,可以用括号加以标注,这样设计的硬件小系统就比较通用。下面从需求与供给的角度把MCU的引脚分为“硬件小系统引脚”与“I/O端口资源类引脚”两大类。3.4.1硬件小系统引脚KL25/26硬件小系统引脚是我们需要为芯片提供服务的引脚,包括电源类引脚、复位引脚、晶振引脚等,表37中给出了KL25/26的小系统引脚。KL25/26芯片电源类引脚,LQFP封装12个。芯片使用多组电源引脚分别为内部电压调节器、I/O引脚驱动、AD转换电路等电路供电,内部电压调节器为内核和振荡器等供电。为了提供稳定的电源,MCU内部包含多组电源电路,同时给出多处电源引出脚,便于外接滤波电容。为了电源平衡,MCU提供了内部有共同接地点的多处电源引脚,供电路设计使用。
表37KL25/26硬件小系统引脚表
分类引脚名引脚号KL25KL26功 能 描 述
电源输入VDD7、38、603、30、48电源,典型值: 3.3VVSS8、39、594、31、47地,典型值: 0VVDDA,VSSA17、2013、16AD模块的输入电源,典型值: (3.3V、0V)VREFH,VREFL18、1914、15AD模块的参考电压,典型值: (3.3V、0V)VREGIN128USB模块的参考电压,典型值: 5VVOUT33117USB模块电源稳压器输出的电压,典型值: 3.3V
续表
分类引脚名引脚号KL25KL26功 能 描 述
复位RESET4234双向引脚。有内部上拉电阻。作为输入,拉低可使芯片复位拉低脉冲宽度需维持1.5个总线时钟周期以上,方能完成复位。作为输出,复位开始后,芯片内部电路驱动该引脚至少维持34个总线时钟周期的低电平。上电复位后,该引脚默认为RESET功能,复位完成后,可通过系统选项寄存器SIM_SOPT0的RSTPE位配置为其他功能,一般不建议这样做,好就做复位引脚。晶振EXTAL,XTAL40、4132、33分别为无源晶振输入、输出引脚
SWD接口SWD_CLK2622SWD时钟信号线SWD_DIO2925SWD数据信号线
引脚个数统计硬件小系统引脚均为17个
图3364引脚LQFP封装MKL26Z128VLH4引脚图
3.4.2对外提供服务的引脚
除了需要我们为芯片服务的引脚(小硬件系统引脚)之外,芯片的其他引脚为我们提供服务,也可称之为I/O端口资源类引脚,见表38。这些引脚一般具有多种复用功能,附录A给出了KL25、KL26芯片引脚功能复用表。实际硬件设计时,必须依据该表,仔细斟酌引脚功能的使用,软件编程时,依据所使用的功能设定复用功能中的一种。因此,读者需重点掌握该表的应用方法。
表38KL25/26对外提供I/O端口资源类引脚表
KL25KL26
端口名引脚数(63)引脚名引脚数(49)引脚名
A10PTA[1~2、4~5],PTA[12~17]8PTA[0~5],PTA12,PTA13B12PTB[0~3],PTB[8~11],PTB[16~19]8PTB[0~3],PTB[16~19]C16PTC[0~13],PTC[16~17]12PTC[0~11]D8PTD[0~7]8PTD[0~7]E15PTE[0~5],PTE[20~25],PTE[29~31]11PTE[0~1],PTE[20~25],PTE[29~31]其他2USB0_DM,USB0_DP2USB0_DM,USB0_DP
说明这里统计I/O引脚不包括已被小系统使用的引脚,但包含两个SWD的引脚。I/O端口引脚输入电压为0.7×VDD; 输出电压VDD,输出总电流100mA。具体技术指标参见《KL26数据手册》
KL25(80引脚LQFP封装)具有63个I/O引脚(包含两个SWD的引脚),KL26(64引脚LQFP封装)具有49个I/O引脚(包含两个SWD的引脚)写入器SWD使用的两个引脚在硬件小系统表中与对外提供I/O端口资源类引脚表中重复列出,是因为这两个引脚在运行过程中作为其他功能使用是合适的。。这些引脚均具有多个功能,在复位后,会立即被配置为高阻状态,且为通用输入引脚,有内部上拉功能。随后各章以KL25为主进行讲解,但其内容完全适用于KL26,网上教学资源中给出了KL26的程序。选用KL26的读者可使用这部分程序进行实验与实践。3.5KL25/26硬件小系统原理图MCU的硬件小系统是指包括电源、晶振、复位、写入调试器接口等可使内部程序得以运行的、规范的、可复用的核心构件系统。使用一个芯片,必须完全理解其硬件小系统。当MCU工作不正常时,首先就要查找小系统中可能出错的元件。一般情况下,MCU的硬件小系统由电源、晶振及复位等电路组成。芯片要能工作,必须有电源与工作时钟; 至于复位电路则提供不掉电情况下MCU重新启动的手段。随着Flash存储器制造技术的发展,大部分芯片提供了在板或在线系统(On System)的写入程序功能,即把空白芯片焊接到电路板上后,再通过写入器把程序下载到芯片中。这样,硬件小系统应该把写入器的接口电路也包含在其中。基于这个思路,KL25/26芯片的硬件小系统包括电源电路、复位电路、与写入器相连的SWD接口电路及可选晶振电路。附录B给出了KL25/26硬件小系统原理图。读者需彻底理解该原理图的基本内涵。3.5.1电源及其滤波电路电路中需要大量的电源类引脚用来提供足够的电流容量同时保持芯片电流平衡,所有的电源引脚必须外接适当的滤波电容抑制高频噪声。电源(VDDx)与地(VSSx)包括很多引脚,如VDDA、VSSA、VDD、VSS、VREFH和VREFL等。至于外接电容,是由于集成电路制造技术所限,无法在IC内部通过光刻的方法制造这些电容。去耦是指对电源采取进一步的滤波措施,去除两级间信号通过电源互相干扰的影响,电源滤波电路可改善系统的电磁兼容性,降低电源波动对系统的影响,增强电路工作的稳定性。为标识系统通电与否,可以增加一个电源指示灯。需要强调的是,虽然硬件小系统原理图(附录B)中的许多滤波电容被画在了一起,但实际布板时,需要各自接到靠近芯片的电源与地之间,才能起到良好的效果。3.5.2复位电路及复位功能复位,意味着MCU一切重新开始。复位引脚为RESET。若复位引脚有效(低电平),则会引起MCU复位。复位电路原理如下: 正常工作时,复位引脚RESET通过一个10kΩ的电阻接到电源正极,所以应为高电平。若按下复位按钮,则RESET脚接地为低电平,导致芯片复位。若是系统重新上电,芯片内部电路会使RESET脚拉低,使芯片复位。KL25/26的复位引脚是双向引脚,作为输入引脚,拉低可使芯片复位,作为输出引脚,上电复位期间有低脉冲输出,表示芯片已经复位完成。从引起MCU复位的内部与外部因素来区分,复位可分为外部复位和内部复位两种。外部复位有上电复位、按下复位按钮复位。内部复位有看门狗定时器复位、低电压复位、软件复位等(见13.6节)。从复位时芯片是否处于上电状态来区分,复位可分为冷复位和热复位。芯片从无电状态到上电状态的复位属于冷复位,芯片处于带电状态时的复位叫热复位。冷复位后,MCU内部RAM的内容是随机的。而热复位后,MCU内部RAM的内容会保持复位前的内容,即热复位并不会引起RAM中内容的丢失。从CPU响应快慢来区分,复位还可分为异步复位与同步复位。异步复位源的复位请求一般表示一种紧要的事件,因此复位控制逻辑不等到当前总线周期结束,复位立即有效。异步复位源有上电、低电压复位等。同步复位的处理方法与异步复位不同: 当一个同步复位源给出复位请求时,复位控制器并不使之立即起作用,而是等到当前总线周期结束之后,这是为了保护数据的完整性。在该总线周期结束后的下一个系统时钟的上升沿时,复位才有效。同步复位源有看门狗定时器、软件等。3.5.3晶振电路
KL25/26芯片可使用内部晶振或外部晶振两种方式为MCU提供工作时钟。
KL25/26芯片含有内部时钟源(IRC),频率分为慢速32.768kHz和快速4MHz,慢速内部时钟误差在0.6%以内,而快速内部时钟误差在3%以内。
图34晶振电路
通过编程,可产生48MHz内核时钟及24MHz总线时钟。使用内部时钟源可略去外部晶振电路。
若时钟源需要更高的精度,可自行选用外部晶振,例如图34给出外接8MHz无源晶振的晶振电路接法,晶振连接在晶振输入引脚EXTAL0、晶振输出引脚XTAL0之间。有关配置及具体编程见第13.1节(时钟系统)。
3.5.4SWD接口电路KL25/26芯片的调试接口SWD是基于CoreSight架构,该架构在限制输出引脚和其他可用资源情况下,提供了的灵活性。CoreSight是ARM定义的一个开放体系结构,以使SOC设计人员能够将其他IP内核的调试和跟踪功能添加到CoreSight基础结构中。通过SWD接口可以实现程序下载和调试功能。SWD接口只需两根线,数据输入/输出线(DIO)和时钟线(CLK)。附录B小硬件系统原理图中,给出了SWD调试接口电路,连接到KL25/26芯片的SWD_DIO与SWD_CLK两个引脚。可根据实际需要增加地、电源以及复位信号线。小结本章主要给出了KL25/KL26存储映像、中断源、引脚图及引脚表,重点是给出了硬件小系统,完成了MCU的基础硬件入门。(1) 基于ARM CortexM内核的Kinetis系列微控制器,主要有K、L、M、W、E、EA及V系列,这些系列的特点各不相同,适用于不同应用领域。(2) KL系列的一个具体MCU型号标识含有质量状态、系列号、内核类型、内部Flash大小、温度范围、封装类型、CPU频率、包装类型等信息。(3) 关于KL25/26系列的存储映像与中断源。其片内Flash大小为128KB,地址范围: 0x0000_0000 ~ 0x0001_FFFF,用来存放中断向量、程序代码、常数等; 片内RAM大小16KB,地址范围: 0x1FFF_F000~0x2000_2FFF,用来存储全局变量、临时变量(堆栈空间)等; KL25/26多支持48个中断源,为中断向量表中提供物理基础,由于中断的内容会在后面章节详细介绍,本章了解即可。(4) 关于硬件小系统。一个芯片的硬件小系统是指可以使内部程序运行所必需的规模的外围电路,也可以包括写入器接口电路。使用一个芯片,必须完全理解其硬件小系统。硬件小系统引脚是我们必须为芯片提供服务的引脚,包括电源、晶振、复位、SWD接口。读者需充分理解附录B的硬件小系统原理图。该图可从5个部分来理解,,首先需要为芯片提供电源,直流3.3V,所有的电源引出脚与地之间应在靠近芯片的地方接滤波电容(去耦电容),因为电容有通交流阻直流的特性,因此用来抑制高频噪声,使供电更加稳定; 第二,需要给芯片提供晶振,芯片工作需要一个由晶振提供的时钟信号; 第三,复位引脚要加上拉电阻,平时电平拉高,需要复位时与地导通使电平拉低,让芯片复位,从而使芯片复位; 第四,是SWD写入器接口,为了将程序写入芯片,需要写入器接口引脚; 第五,其他引脚引出虚线之外,就为我们提供服务了。(5) 学习第5章之后,再回头来理解为什么这样画原理图。我们的目标是,所有使用该芯片的应用系统,硬件小系统原理图可复用,第5章称之为“核心构件”。习题 1. 简述ARM CortexM0 KL系列MCU的型号标识。 2. 给出所学芯片的RAM、Flash的地址范围,说明堆栈空间、全局变量、常量、程序分别存放于RAM中还是Flash中。芯片初始化时,SP值应为何值,说明原因。 3. 简要阐述硬件电路中滤波电路、耦合电路的具体作用。 4. 解释小硬件系统概念,并结合所学芯片的开发板,归纳实现小系统需要的引脚资源。 5. 所学芯片的开发板中使用什么标准调试接口?具体如何实现? 6. 所学芯片的开发板中具有哪些功能接口?如何进行测试? 7. 概要给出所学芯片的小系统原理图的各部分基本原理。 8. 自行找一个型号MCU,给出设计硬件小系统的基本步骤,并参考本章样例画出原理图。
评论
还没有评论。