ARMCortexM4嵌入式系统开发实践2.docx
《ARMCortexM4嵌入式系统开发实践2.docx》由会员分享,可在线阅读,更多相关《ARMCortexM4嵌入式系统开发实践2.docx(28页珍藏版)》请在冰豆网上搜索。
ARMCortexM4嵌入式系统开发实践2
1.5基于硬件构件的嵌入式底层软件构件的编程方法
嵌入式系统是软件与硬件的综合体,硬件设计和软件设计相辅相成。
嵌入式系统中的驱动程序是直接工作在各种硬件设备上的软件,是硬件和高层软件之间的桥梁。
正是通过驱动程序,各种硬件设备才能正常运行,达到既定的工作效果。
1.5.1嵌入式硬件构件和软件构件的层次模型
嵌入式软件构件(EmbeddedSoftwareComponent,ESC)是实现一定嵌入式系统功能的一组封装的、规范的、可重用的、具有嵌入特性的软件单元,是组织嵌入式系统的功能单位。
。
IO)。
由图1-6可看出,底层外设构件可以调用底层内部构件,如LCD构件可以调用GPIO构件、PCF8563构件(时钟构件)可以调用I2C构件等。
而高层构件可以调用底层外设构件和底层内部构件中的功能构件,而不能直接调用GPIO构件。
另外,考虑到几乎所有的底层内部构件都涉及到MCU各种寄存器的使用,因此将MCU的所有寄存器定义组织在一起,形成MCU头文件,以便其它构件头文件中包含该头文件。
1.5.2底层构件的实现方法与编程思想
底层构件是与硬件直接打交道的软件,由头文件和源程序文件两部分组成。
头文件中的内容主要有:
包含下层构件头文件的#include语句、用以描述构件属性的宏定义语句以及对外接口函数原型说明。
在头文件中使用函数原型,对于建立代码模块和外部接口的规范,便于他人使用,都是很有帮助的。
使用这些函数的用户,不需要查找源代码去了解参数的具体类型,直接查看函数原型即可。
源程序文件中存放构件的内部函数和外部函数的定义,即函数的实现代码,以完成函数所要实现的功能。
在对底层构件进行设计时,最关键的工作是要对构件的共性和个性进行分析,抽取出构件的属性和对外接口函数。
尽量做到:
的头文件,对于构件的源程序文件则不必修改或改动很小。
例如,串行通信模块SCI是大多数MCUMCU串行通信程序发现:
在查询方式下,各种MCU接收到数据和数据是否发送完毕,这就是SCI,该状态寄存器的名称可能不同,这两个标志位的位号也有可能不同。
此外,和个性之后,就可以抽取出SCI内容参见第五章。
(1
(2
(3)对MCUMCU时,只要修改重定
(4作用域仅限于定义该函数的文件。
外部在定义外部函数时,应该对函数名、函数功能、必须借助于该构件提供的接口操作函数来实现。
(5这样做不但使得接口简洁,更加避免了全局变量可能引发的安全隐患。
1.5.3硬件构件及底层软件构件的重用与移植方法
重用是指在一个系统中,同一构件可被重复使用多次。
移植是指将一个系统中使用到的构件应用到另外一个系统中。
1.硬件构件的重用与移植
对于以单MCU为核心的嵌入式应用系统而言,当用硬件构件“组装”硬件系统时,核心构件(即最小系统)有且只有一个,而中间构件和终端构件可有多个,并且相同类型的构
件可出现多次。
下面以终端构件LCD为例,介绍硬件构件的移植方法。
(aLCD构件在系统A中的应用B
图1-7LCD在应用系统A中,若LCD的数据线(LCD-D0~LCD-D78位MCU)芯片的通用IO口的B口相连,C口作为LCD寄存器选择信号LCD-RS与C口第0引脚连接,读写信号LCD-RWC口第LCD_E与C口第2引脚连接,则LCD1-7(a虚线框左边的文字(如PTC0、PTC1等)为接口网标,虚线框右边的文字、等)为接口注释。
在应用系统B中,若LCD的数据线((32位MCU)芯片的通用IO口的AN口相连,、2LCD-RS、读写信号LCD-RW、使能信号LCD_ELCD1-7(b所示。
2
其头文件和程序文件是否MCU型号改变)
相对应的底层构件头文件LCD.h可如下编写。
#include―GPIO.h‖//包含GPIO构件头文件
//显示数据传送口
//控制信号传送口
//寄存器选择信号
//读写信号
//使能信号
//液晶显示初始化
//填充LCD,可实现清屏
//画线#defineLCD_DataGPIO_PORTB#defineLCD_CtrlGPIO_PORTC#defineLCD_RS0#defineLCD_RW1#defineLCD_E2voidLCD_Init(void;voidLCD_Fill(INT8Ua;voidLCD_PutDot(INT8Ux,INT8Uy;//画点voidLCD_PutLine(INT8Ux1,INT8Uy1,INT8Ux2,INT8Uy2;
voidLCD_PutChar(INT8Ua;//显示一个字符
voidLCD_PutString(INT8Ustr[];//显示一串字符
当LCD硬件构件发生如图1-7(b所示的移植时,显示数据传送口和控制信号传送口发生了改变,此时,只要将上面的第1和第2条宏定义语句修改成:
#defineLCD_DataGPIO_PORTAN
//显示数据传送口
#defineLCD_CtrlGPIO_PORTTA//控制信号传送口
必须申明的是,本书提出构件化设计方法的目的是,在进行软硬件移植时,设计人员所做的改动要尽量小,而不是不作任何改动。
希望改动在头文件中进行,而不希望改动程序文件,事实上,不作任何改动是不现实的。
第2章Kinetis概述与MK60N512VMD100硬件最小系
统
本章简要概述Kinetis系列微处理器,给出K60系列微控制器存储器映像与编程结构、寻址方式、异常向量表;重点指出学习一个新MCU芯片比较快速的学习过程;给出K60N512的引脚功能与硬件最小系统电路。
本章的重点是:
存储空间的地址分配、中断结构、硬件最小系统电路。
2.1ARM公司的发展史及ARM架构的发展
1.ARM公司的历史
ARM今天ARM30年全球最有影响力的10家公司之一。
ARM11原名AdvancedRISCMachine有限公司,是苹果电脑、Acorn的合资企业。
Acorn曾推出世界首个商用单芯片RISCRISC技术应用于自身系统,ARMARMRISC架构,迅速在市场上崭露头角,与此同时理器的RISC结构。
1991年ARMTM系列处理器,不久VLSI率先获1993年德州仪器和CirrusLogic亦签ARM1993年NipponInvestment(ARMARM开始向全球拓展,分别在亚洲、美国和欧洲设
被Dataquest誉为世界第一的知识产权供20率先推出32位RISC微处理器芯片系统(SoC)知识产权公开授权概念。
现在,20亿片以上。
不像很多其他的半导体公司,ARM而是把处理器的设计授权给相关的商务合作伙伴,让他们根据自己的强项设计具体的芯片。
更重要的是ARM开创了电子新纪元:
采用ARM技术的微处理器遍及各类电子产品,在汽车、消费、娱乐、成像、工业控制、网络、存储、安保和无线等市场中,ARM技术无处不在。
2.ARM架构发展史
ARM的设计历史起源是Acorn电脑公司(AcornComputersLtd)于1983年开始的开发计划。
这个团队由RogerWilson和SteveFurber带领,着手开发一种新架构,类似进阶的MOSTechnology6502处理器。
设计团队在1985年时开发出ARM1Sample版,而首颗“真
正”的产能型ARM2于次年量产。
ARM2具有32位的数据总线、26位的寻址空间,并提供64MB的寻址范围与16个32位的寄存器。
这些寄存器其中有一个作为程序计数器,其前面6位和后面2位用来保存处理器状态标记。
ARM2可能是全世界最简单实用的32位微处理器,其仅容纳了30,000个晶体管。
之所以精简的原因在于它不含微码,而与现今大多数的CPU不同,它没有包含任何高速缓存。
这个精简的特色使它只需消耗很少的电能,却能发挥比Intel80286更好的效能。
后继的处理器ARM3更备有4KB的告诉缓存,使它能发挥更佳的效能。
1991年,ARM技术首次发布,然后苹果电脑使用ARM6架构的ARM610当作其AppleNewtonPDA的基础。
1994年,Acorn使用ARM610作为其RISCPC电脑内的CPU。
随着ARM2到ARM6的技术进阶发展,内核部分却大多维持一样的大小。
ARM2有30,000个晶体管,但ARM6只增长到35,000。
主要概念是以ODMARM核心能搭配一些选配的零件而制成一颗完整的CPU本的方式达到很大的效能。
随着技术的不断发展,ARM架构,要说明的是,架构版本号和名字中的数字并不是一码事。
比如,ARMv4T架构的(T表示支持Thumb指令)。
ARMv7架构采用Thumb-2的Thumb代码压缩技术的基础上发展起来的,并且保持了对现存Thumb-2技术比纯32位代码少使用31%基于Thumb技术的解决方案高出38%的性能。
架构还采用了NEON技术,将DSP和媒体处理能力提高了近43D图形、游戏物理应内核架构首次从单一款式变成三种款式。
●款式A
●款式R●款式M
◆款式A)。
支持大型嵌入式操作
、Linux,以及微软的WindowsCE和智能手。
◆◆款式M():
认准了旧时代单片机应用而量身定制。
在这些应用中,尤其是
Cortex系列是架构的第一次亮相。
其中Cortex-M4就是按款式M设计的。
ARM架构发展版本如表2-1所示。
表2-0-1ARM架构发展版本
18
19
20
21
不完整,只支持通用功能,必要时仍需要使用ARM指令,如进入异常时。
其指令的格式与使用方式与ARM指令集类似,而且使用并不频繁
(2)Jazelle
Jazelle是ARM体系结构的一种相关技术,用于在处理器指令层次对JAVA加速。
ARM还开发出一项技术,JazelleDBX(DirectBytecodeeXecution,允许它们在某些架构的硬件上加速执行Javabytecode,就如其他执行模式般,当呼叫一些无法支援bytecodes的特殊软件时,能提供某些bytecodes的加速执行。
它能在现存的ARM与Thumb模式之间互相执行。
首颗具备Jazelle技术的处理器是ARM926EJ-S:
Jazelle以一个英文字母'J'标示于CPU
22
名称中。
它用来让手机制造商能够加速执行JavaME的游戏和应用程式,也因此促使了这项技术不断地发展。
(3)Thumb-2
Thumb-2技术首先见于ARM1156核心,并于2003年发表。
Thumb-2扩充了受限的16位Thumb指令集,以额外的32位指令让指令集的使用更广泛。
因此Thumb-2的预期目标是要达到近乎Thumb的编码密度,但能表现出近乎ARM指令集在32位内存下的效能.Thumb-2至今也从ARM和Thumb指令集中派生出多种指令,包含位段操作、分支跳转和条件执行等功能。
(4)ThumbEE
ThumbEE,也就是所谓的Thumb-2EE,,业界称为JazelleRCT技术,于2005年发表,首见于Cortex-A8处理器。
ThumbEE提供从Thumb-2环境(ExecutionEnvironment)的编码产生(例如即时编译)。
Thumb-2EE是专为一些语言如Limbo、和Python,并能让即时编译器
ThumbEE种可以执行阵列范围检查的指令,并能够分支到分类器((5)高级SIMD(NEON)
高级SIMD延伸集,业界称为NEON64和128bit的SIMD(SingleInstructionMultipleData具备标准化加速的能力。
NEON的上执行MP3音效解码,且可以执行13MHz频率以下的语音编码。
NEON具有一组广NEON支援8-,16-,32-和64-bit讯的部分。
SIMD在它具备同时多项处理功能。
在NEON技术中,SIMD
(6)VFP架构的衍生技术。
它提供低成本的单精度和倍精度浮二进制浮点算数标准。
VFP提供大多智慧手机、语音压缩与解压、3D图像以及数位音效、VFP架构也支援SIMD(单指令多重数据)平行化的短
在ARM-basedSIMD的协同处理器还包括了FPA,FPE,iwMMXtVFP的功能但在opcode层面上来说并不具有相容性。
(7TrustZone)
TrustZone(TM技术出现在ARMv6KZ以及较晚期的应用核心架构中。
它提供了一种低成本的方案,针对系统单芯片(SoC)内加入专属的安全核心,由硬件建构的存取控制方式支援两颗虚拟的处理器。
这个方式可使得应用程式核心能够在两个状态之间切换(通常改称为领域(worlds)以避免和其他功能领域的名称混淆),在此架构下可以避免资讯从较可信的核心领域泄漏至较不安全的领域。
这种内核领域之间的切换通常是与处理器其他功能完全无关联性(orthogonal),因此各个领域可以各自独立运作但却仍能使用同一颗内核。
内存和周边装置也可因此得知目前内核运作的领域为何,并能针对这个方式来提供对装置的机密和编码进行存取控制。
典型的TrustZone技术应用是要能在一个缺乏安全性的环境下完整地执行操作系统,并在可信的环境下能有更少的安全性的编码。
Cortex-M4处理器是由ARM专门开发的最新嵌入式处理器,它完美融合了高效的信号处理能力以及Cortex-M系列处理器诸多无可比拟的优势,包括低功耗、低成本和易于使用,旨在满足那些新兴的、灵活多变的解决方案的需求。
飞思卡尔Kinetis系列使用ARMCortex-M4处理器,下一节将阐述Kinetis系列。
2.2Kinetis系列微处理器概述
Kinetis系列微控制器是飞思卡尔公司于2010年下半年推出的基于ARMCortex-M4内核的微控制器,是业内首款Cortex-M4内核芯片。
Kinetis系列微控制器采用了飞思卡尔90纳米薄膜存储器(TFS闪存技术和Flex存储器功能(可配置的内嵌EEPROM,支持超过1000万
•ARMCortex-M4内核带DSP指令,性能可达1.25DMIPS/MHz(部分Kinetis
系
列提供浮点单元
•多达32通道的DMA可用于外设和存储器数据传输并减少CPU干预
•提供不同级别的CPU频率,有50MHz、72MHz和100MHz(部分Kinetis系列提
供120MHz和150MHz
•极低的功耗:
•10种低功耗操作模式用于优化外设活动和唤醒时间以延长电池的寿命
•低漏唤醒单元、低功耗定时器和低功耗RTC可以更加灵活地实现低功耗
•行业领先的快速唤醒时间
•存储器:
•内存空间可扩展,从32KB闪存/8KBRAM到1MB闪存/128KBRAM。
多
个独立的闪存模块使同时进行代码执行和固件升级成为可能
•可选的16KB缓存用于优化总线带宽和闪存执行性能
•Flex存储器具有高达512KB的FlexNVM和高达16KB的FlexRAM。
FlexNVM
能够被分区以支持额外的程序闪存(例如引导加载程序)、数据闪存(例如存储
大表或者EEPROM备份。
FlexRAM支持EEPROM字节写/字节擦除操作,并且指示最大EEPROM空间
•EEPROM最高超过一千万次的使用寿命
•EEPROM擦除/写速度远高于传统的EEPROM
•模拟混合信号:
•快速、高精度的16位ADC、12位DAC
•人机接口(HMI:
••连接性和通信:
•UART支持ISO7816和IrDA,I2SCAN、I和SPI
•可靠性和安全性:
•
•独立时钟工作的COP•外部看门狗监控
•定时和控制:
•强大的
•
•ADC转换和可编程延迟模块提
供触发源
••LCD的接口
•
•的宽操作电压范围,闪存编程电压低至1.71V,并且此时
•°C到105°C
2-2列出了各Kinetis系列所特有的性能。
调试器下载到目标MCU中,在目标板上,观察运行情况。
随后,可进一步利用嵌入式软件的打桩调试技术,即在被测程序代码中插入一些函数或语句,利用这些函数或语句产生可在硬件板上显示物理现象,供观察程序运行情况之用。
(8)从整个工程组成、各个文件、写入Flash存储器的机器码等角度,透彻理解第一工程的执行过程。
(9)理解第一个带有中断过程的C语言工程结构,理解主循环与中断两条程序执行路线各自的作用。
至此,以上学习过程已经覆盖学习一个新MCU硬件设计与软件编程的基本要素。
完成了以上学习步骤,就完成了“基本入门”过程。
随后,可以在此框架下,结合嵌入式构件方
法,逐个模块学习就方便了。
本章给出上述过程的
(1)—(4)步,下一章给出上述过程的(5)—(8)步。
这两章完成了“基本入门”的前8步。
“基本入门”的第9步(第一个中断例程)将在第4章阐述。
为了规范编程,符合嵌入式软件工程的基本要求,提高硬件及底层驱动软件的可复用与可移植性。
2.3.1K60系列MCU性能概述与内部结构简图
K60微控制器系列具有IEEE1588以太网,全速和高速USB2.0On-The-Go带设备充电探测,硬件加密和防窜改探测能力,具有丰富的模拟、通信、定时和控制外设,从100
MK60N256VMD100、MK60X256VMD100和MK60N512VMD100。
这些芯片的CPU频率与引脚数都一样,但是在封装、Flash容量、程序空间等方面还是有差别的。
表2-2给出了可选芯片的MCU简要描述,供选型参考之用。
28
29
据的开发者提供非常多样化和强大的解决方案。
Flex存储器和SRAM一样简单快速,当用作高耐久性擦写EEPROM时,在完成程序运行和擦除功能时不需要用户或者系统干预。
Flex存储器同时能提供平行于主程序闪存的额外闪存(FlexNVM用于数据或者程序存储。
Flex存储器使您能完全配置FlexNVM和FlexRAM模块,从而为应用提供最均衡的存储器资源。
用户可配置的参数包括:
EEPROM大小、擦写次数、写大小和额外程序/数据闪存的大小。
FlexNVM能被用作EEPROM配置的一部分、额外的程序或者数据闪存。
也可以一部分用作闪存同时另一部分被用作增强型EEPROM备份
片上RAM分为SRAM_L和SRAM_U,从表2-5可见它们是连续的存储映射。
对于SRAM_L和SRAM_U如果处于片外时,在请求主机访问总线时将会产生一个错误。
外设存储映射在0x4000_0000到0x400F_FFFF区有两个从机端口,实现了2个外设桥(AIPS-Lite0和AIPS-Lite1:
AIPS-Lite0占512KB,AIPS-Lite1占508KB,4KB的GPIO。
AIPS-Lite0
30
连接到从机端口2,可访问区间是0x4000_0000到0x4007_FFFF。
AIPS-Lite1和GPIO共享从机端口3,AIPS-Lite1的可访问区间是0x4008_0000到0x400F_EFFF,GPIO的4KB可访问区间是0x400F_F000到0x400F_FFFF。
它可直接连接到闩开关提供的主机不需要等待AIPS-Lite控制器的状态。
本模块的时钟是由SIM寄存器的AIPS控制位控制的。
访问任何未实现或未使能的外设桥信号将产生错误。
对于可编程模块访问外设桥,只有4KB的实现空间。
2.4K60的引脚功能与硬件最小系统
本书以144引脚LQFP封装的MK60N512VMD100芯片为例介绍K60的编程和应用。
表2-6按引脚功能分类列出了MK60N512VMD100的工作支撑引脚。
31
除去需要服务的引脚外,其它引脚可以为实际系统提供I/O服务。
芯片提供服务的引脚
也可称为I/O端口资源类引脚。
MK60N512VMD100(144引脚LQFP封装)的有多达100个I/O引脚。
其中A口26个,B口20个,C口20个,D口16个,E口18个,详细情况见表2-7所示。
32
表2-7I/O端口资源表
33
34
35
36
37
MCU的硬件最小系统是指可以使内部程序运行的所必须的外围电路,也可以包括写入器接口电路。
使用一个芯片,必须完全理解其硬件最小系统。
当MCU工作不正常时,首先查找最小系统中可能出错的元件。
一般情况下,MCU的硬件最小系统由电源、晶振及复位等电路组成。
芯片要能工作,必须有电源与工作时钟,至于复位电路则提供不掉电情况下MCU重新启动的手段。
由于Flash存储器制造技术的发展,大部分芯片提供了在板或在系统(OnSystem)写入程序功能,即把空白芯片焊接到电路板上后,再通过写入器把程序下载到芯片中。
这样,硬件最小系统应该把写入器的接口电路也包含在其中。
基于这个思路,MK60N512VMD100芯片的硬件最小系统包括电源电路、复位电路、晶振电路及JTAG接口电路。
下面分别对这些电路给出简明分析。
1.电源及其滤波电路
电路中需要大量的电源类引脚用来提供足够的电流容量。
所有的电源引脚必须外接适当的滤波电容抑制高频噪音。
图2-5给出了MK60N512VMD100硬件最小系统的电源和地连接图。
电源(VDDx)与地(VSSx)包括很多引脚,如VDDA、VSSA、VDD1~VDD6、VSS1~VSS8、VREAFH和VREAFL等。
一些电源与地引脚仅用于外接滤波电容,内部已经连接到电源与地,芯片参考手册指出不需要再外接电源。
至于电容外接,是由于集成电路制造技术所限,无法在IC内部通过光刻的方法制造这些电容。
电源滤波电路,用于改善系统的电磁兼容性,电源指示灯。
电源电路
2硬件最小系统的复位电路。
复位,意味着MCU一切重
信号有效新开始。
若RESET(低电平),MCU复位。
复位电路原理如下:
通过一个10K的电阻接到电源正极,所以应为高电平。
若按脚接地,为低电平,导致芯片复位。
下复位按钮,则从引起MCU位有上电复位、按下“复位按钮”复位。
内部复位有看门狗定时器复位、低电压复位、低漏唤醒(LLWU复位、MCG丢失时钟复位、软件复位、锁定复位、EzPort复位等。
从复位时芯片是否处于上电状态区分,复位可分为冷复位与热复位。
芯片从无电状态上电的复位属于冷复位,芯片处于带电状态的复位叫热复位。
冷复位后,MCU内部RAM的内容是随机的。
而热复位后,MCU内部RAM的内容保持复位前的内容,即热复位并不会引起RAM中内容的丢失。
从CPU响应快慢区分,复位可分为异步复位与同步复位。
异步复位源提出的复位请求一般表示一种紧要的事件,因此复位控制逻辑不等到当前总线周期结束,复位立即有效。
异步复位源有上电、丢失时钟、低压检测LVD、失去锁定等。
同步复位的处理方法与异步复位不同,当一个