《实验教程初稿.doc》由会员分享,可在线阅读,更多相关《实验教程初稿.doc(133页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一章 基础理论1.1 单片机程序设计与应用系统开发过程单片机的行为是受程序控制的,因此开发与使用单片机必然会遇到程序设计的问题,单片机设计是一个硬件与软件结合的问题,而其软件设计的工作往往占有更多的成分。一个完整的嵌入式系统开发过程,除了硬件电路的设计外,软件工作包括程序编辑、汇编或编译、程序下载、程序调试、脱机验证等过程。程序的编辑就是按照一定的格式,采用汇编或者C等高级语言进行编写。早期的单片机程序设计在DOS环境下符合一定的格式编辑,然后采用一个合适的软件汇编,生成二进制等CPU能识别的目标代码,将单片机(内带程序存储器的情形)或程序存储器放入编程器,编程器通过串口或USB等接口与PC
2、机相连,将PC机存放的CPU能识别的代码下载到单片机或程序存储器中。图1-1是一个简单的说明。图1-1程序设计过程采用以上方式进行开发的情形下,单片机必须是能从电路板上取下来,这对贴片封装的单片机就无能为力了。此时为了能在线仿真调试,需要昂贵的仿真头和仿真电缆与软件,而且几乎没有仿真器能做到100%的功能仿真,甚至有的问题正是来自于仿真器。随着技术的发展,采用ISP技术,只要在目标电路板上预留一个接口,通过一个很小的下载器,与PC机串、并口或USB口相连,就可以进行程序的调试与下载,尤其是有的单片机具有JTAG接口,下载调试更加方便,调试尽可能少占用单片机资源,更有甚者,像freescale的
3、单片机,内置背景调试控制器(BDC ,Background Debug Controller),支持一线ISP和程序调试。目前程序开发需要的各种软件,如编辑、汇编、编译、链接、调试、下载等都集成到一个环境下(集成开发环境IDE),这些开发环境有的是针对某种单片机,由单片机厂商提供,有的则比较通用一些,这些开发环境如Silicon Laboratories,AVR Studio,Keil uVision,Freescale CodeWarrior等。对于单片机初学者而言,进行单片机入门级的学习,建议手头具备如下材料:(1)某款单片机的完整的数据手册。需要搞清楚存储器配置情况,程序应该放在哪,数据
4、与变量应该放在哪,程序是如何放入单片机中的(如果单片机中有程序存储器的话),如果单片机支持ISP功能,最好动手做一个下载器;(2)拥有使用单片机的完整的指令系统,寻址方式如果不太好掌握,先看指令。建议采用C等高级语言编程,这样可以避免学习枯燥难记的汇编指令。最好有一些例程,以及若干能完成某种功能的程序模块,包括对单片机管脚的电平控制程序。必须掌握程序的总体结构、变量的定义、程序开始位置、中断入口与处理方法、单片机I/O口的控制,单片机寄存器的控制等;(3)选择并确定合适的程序设计开发环境与编译器,了解程序设计中辅助汇编与编译的伪指令,通过实例了解程序设计中应该包含的头文件和库文件;了解集成开发
5、环境中的程序调试与模拟仿真方法;(4)如果条件允许,选择合适的开发板与程序下载调试的方式,程序调试与监控手段。(5) 尽可能多的看别人写的完整的实例程序。(6) 如果是要进行系统开发,则需要在系统开发工具与开发语言的选择上下一番功夫。 1.1.1 单片机应用系统开发工具的选择单片机系统的开发离不开相应的开发工具,包括编程器、实时仿真器、虚拟仿真软件、编译软件等。开发工具的主要作用包括系统硬件电路的诊断与检查、程序的输入与修改、程序的调试、程序的固化等。编程器的作用就是将单片机程序的机器码烧写到单片机的存储器中,也称为程序的下载、烧写或固化。对于支持ISP功能的单片机,只需要下载电缆(或下载器)
6、就可以完成。实时仿真器包括相应的软件和硬件,一般是通过PC机,用软件监视程序在单片机中的实际情况。有的时候,程序实际是在PC机上运行,当需要与硬件交换信息的时候,才通过适当的接口实现PC机与目标板的信息交换。仿真器的主要功能是实时运行程序,在程序中设置断点,通过仿真接口,监视和控制程序的运行,查看和修改内部寄存器和数据存储器等。除了硬件实时仿真器,另一种做法就是软件监控程序的方法,在单片机的程序存储器中开辟一块地方,预先下载一段代码,该代码与PC机通讯,接受PC机的命令,同时接管单片机正常的中断,读取单片机内部寄存器与存储器信息,并发送到PC机,以达到程序监控的目的。针对支持ISP功能的单片机
7、,可以通过实时仿真器或监控软件完成程序的下载工作。虚拟仿真软件主要在没有单片机硬件情况下进行软件程序调试。通常这种系统是通过模拟开发软件和计算机平台构成。在仿真软件的支持下,可方便地实现对单片机硬件模拟、指令模拟和运行状态模拟,从而完成软件开发的全过程。目前比较典型的产品有英国Labcenter electronics公司的proteus软件和NI multisim软件。虚拟仿真软件借助PC机比单片机性能高得多的特点,以及各种器件模型,模拟数字电路和模拟电路以及单片机等需要程序控制的电路。虚拟软件仿真的结果可以直接应用于实际,唯一需要注意的是,虚拟软件对电源、地线、时钟等很多在实际电路中必须注
8、意的问题,竟然可以忽略,这种特性需要初学者在实际应用中提高警惕。编译器包括汇编编译器和高级语言编译器,是将高级语言或者汇编语言的程序编译、链接最后生成机器码的软件。所有的单片机都有自己的汇编语言开发软件,支持汇编程序的开发。高级语言功能强大,可以缩短开发时间,所以很多单片机有高级语言开发软件。例如,目前常用的C语言开发软件就有51系列的Keil 51、PIC系列的MPLAB、MSP430系列的IAR,AVR使用的GCC和ICC,支持C/C+的Freescale CodeWarrior等。有的厂商可以提供单片机开发的集成开发环境,集成了程序编辑器、编译器、硬件仿真器和软件仿真器等功能。源程序的编
9、辑、编译、下载、仿真全部可以在一个环境下完成,从而提高了开发效率。进行简单的系统开发,可以使用简单的开发流程:编写程序固化程序验证功能,只需要编译器和编程器或下载电缆就可以了,但在大系统中使用这种方法则几乎是不可能的,必须使用仿真器或使用单片机的在线跟踪与调试功能。不要过多地依赖仿真器,开发适合自己的调试手段,比如给系统增加一个显示器或增加一个串行口,实时输出各种调试信息,能极大地提高程序开发进程。1.1.2 单片机应用系统开发语言的选择单片机系统能够正常工作,除了相应的硬件外,还需要得到相应的指令(程序),这些指令是由0、1组成的机器码。但机器码非常繁杂,不适合开发。而汇编语言是最接近机器码
10、的一种语言,是一种文字助记符来表示机器指令的符号语言,下表描述了汇编语言和机器码之间的关系。所有的单片机都有自己的汇编语言开发软件,支持汇编程序的开发。但是用汇编语言编程必须对单片机的内部结构和外围电路非常了解,尤其是对指令系统必须非常熟悉,故对程序开发者的要求是比较高的。同时,用汇编语言开发软件比较辛苦,程序量通常比较大,方方面面均需要考虑,一切问题都需要由程序设计者安排。其主要优点是占用资源少、程序执行效率高。不同的CPU,其汇编语言可能有所差异,所以移植性也极差。C语言是普及最广泛的程序设计语言,它既有高级语言的各种特点,又可对硬件进行操作,并可进行结构化程序设计,用C语言编写的程序也较
11、容易移植。目前已有专为单片机设计的C语言编译器,如上文提到的KEIL C51、GCC、CodeWarrior等,它们可生成简洁可靠的目标代码。采用C语言编程时只要对单片机的内部结构和外围电路基本了解即可,对指令系统则不必非常熟悉,其编程比汇编语言轻松,很多细节问题都由编译软件替设计者安排好了,同时在不同CPU的移植也更简单、快捷。C语言和汇编语言的关系如表1-1所示。表1-1高级语言、汇编语言与机器码的对照高级语言i=i+1;汇编语言INCA机器码当然,C语言在代码效率和代码执行速度上还不能完全和汇编相比,所以在对速度和实时性要求严格的场合,还需要使用汇编语言。同时对于单片机的初学者来说,应该
12、从汇编学起。因为汇编语言是最接近机器码的一种语言,可以加深初学者对单片机各个功能模块的了解,从而打好扎实的基础。1.1.3 单片机应用系统开发过程单片机应用系统的开发工作主要包括四部分工作内容,即系统硬件设计、系统软件设计、系统仿真调试以及脱机验证。1. 硬件设计主要包括以下几个内容:1)根据需求,进行系统总体设计。从总体上确定,需要单CPU还是多CPU、是否需要与外界进行通讯,采用何种接口,是否需要各种人机交互接口包括按键与显示器等。2)器件选型,确定单片机以及电路的各重要部分的器件。在确定单片机时,一定针对应用的需求,尽可能单片解决问题,需要注意端口引脚是否够用,中断源数量、定时器个数、A
13、/D转换精度、串行口、比较起、PWM、看门狗等是否配置。3)是否需要扩展存储器,如需要应遵循宁大勿小的原则,因为不同容量的内存在价位上比较接近。4)确定接口器件并设计电路。包括输入/输出通道的设计、人机接口设计、通信接口设计等。5)PCB设计、电路的安装和调试等。PCB设计阶段注意外形尺寸,是否有外壳等,同时注意预留各种测试接口,多采用0欧姆电阻和跳线。2. 软件设计主要包括以下几个步骤:1) 软件结构设计。当硬件设计完成后,就能够具体明确软件的设计要求了。软件结构设计的任务就是划分程序功能模块,把功能相对独立的程序划分成一个功能模块是一种常用的方法,如数据采集、数字滤波、标度转换、数码显示等
14、模块。模块划分后,进一步明确各模块之间的关系,各模块之间的接口。考虑一个系统的最后归档也需要详细的流程图,所以无论模块简单还是复杂,都有必要画出各模块的流程图。在这一阶段,应尽量将和硬件有关的底层程序封装起来,以便底层硬件测试和驱动程序与高层程序可以同时研发,并保证程序的调试效率和可移植性。2)选择开发平台(语言)。程序设计语言对程序设计效率有重大影响。汇编语言是最为常用的一种程序设计语言,用它编写的程序代码精简、直接面向硬件。但汇编语言的编程效率低下,不易缩短产品或系统的开发周期。现在普遍采用的单片机系统高级开发语言是C语言。3)具体程序的编写。在程序编写时应注意程序模块的可测性,有些重要的
15、模块可能还要规划出测试数据接口,便于使用软件仿真进行测试。4)软件编译和仿真调试。采用各种显示手段,尽量对程序进行比较完整的测试,不把问题遗留到硬件仿真和脱机验证阶段阶段。1.2 CodeWarrior IDE软件以及开发板介绍1.2.1 CodeWarrior IDE安装过程 双击安装光盘中的Launch.exe,出现如图1-2所示。 图1-2 安装流程图点击Launch the installer,出现如图1-3所示。 图1-3 安装流程图点击Next,出现如图1-4。 图1-4 安装流程图选择Modify,点击Next,如图1-5所示。 图1-5 安装流程图选择需要安装的文件,继续点击N
16、ext,出现如图1-6所示。 图1-6 安装流程图点击Install,进行安装。直至安装完毕。1.2.2 创建项目工程 通过创建一个项目工程来介绍软件的具体使用方法。1. 打开Freescale CodeWarrior CW for Microcontrollers V6.1 CodeWarrior IDE 软件,出现图1-7画面,点击,Create New project按钮。 图1-7 创建工程流程l Create New Project:创建一个新目工程文件l Load Example Project:加载一个示例工程l Load Previous Project :加载以前打开过的工程
17、l Run Getting started Tutorial:运行CodeWarrior软件帮助文档l Start Using CodeWarrior: 返回CodeWarrior主窗口工程文件:该工程的设置和所有这些文件的指针都被存放在工程文件中。这些设置包括编译和链接设置、源文件、库文件以及它们之间用于产生最终程序的相互关系。可以将这个工程文件看作该工程的大脑:它保存了所有文件相互依存的关系并知道如何将它们组合成为一个可用的应用程序。工程窗口依次显示了这些关于你的程序和该程序所包含的文件的信息,并允许只需轻松点击就可以修改这个工程。2. 见图1-8选择使用单片机的型号,左边窗口选择单片机型
18、号,MC9S08QG8 单片机在HCS08子项目中的HCS08Q家族中;图1-8 创建工程流程右边窗口选择:使用连接模式。第一项选择连接完全软件模拟仿真,第二项选择连接硬件模拟仿真(P&E公司设计的开发单片机BDM调试工具)。l Full Chip Simulation;软件仿真(可选)l P&E Multilink/Cyclone Pro ;P&E公司设计的开发工具(可选)l SofTec HCS08: ;SofTec公司设计的开发工具l HCS08 Serial Monitor;串口型开源BDM开发工具 l HCS08 Open Source BDM: ;开源BDM开发工具3. 见图1-9
19、 在此对话框中选择编程中所用的语言(汇编、混合汇编、C、C+),以及Project name项目工程名称、和Location储存位置,在此选择Absolutes assembly汇编语言编写程序及保存位置,单击完成(不必按下一步)。图1-9 创建工程流程4. 双击main.asm右边窗口出现系统自带的程序格式,在给定的格式程序上填写自编程序。界面见1-115. 如需要添加外部项目,则在第三步时点击下一步,进入下面的界面(图1-10)。图1-10 创建工程流程在左边方框中找到所要添加的项目,单击“Add”键即可把所要添加的项目加入程序。1.2.3 对单片机进行编程CodeWarrior IDE软
20、件,可以对单片机进行编程操作,其操作界面如图1-111-13。 图1-11 程序界面图1-12 程序界面l Project-5.mcp窗口选择连接模式。l 器件选择。l 绿色箭头是DEBUG,编译连接程序下载。l 源程序文件、头文件、库文件、工程文件注释2:框中为系统自带程序,其实就是一个模板基本内容解释如下。3:头文件9:中断矢量复位区6:主程序区,初始化栈指针7:主循环区,喂狗的语句,可插程序8:可插中断服务程序5:ROM区的首地址4:RAM区的首地址 图1-13 程序界面注释3:头文件注释4:在此定义RAM区的首地址,不定义也可以直接使用其内存单元注释5:在此定义ROM区的首地址,如果不
21、定义则系统会默认从E000单元开始存放程序注释6:前三句语句是初始化栈指针,允许中断,一般的程序语句就可以紧接这三句往下编写。注释7:主循环是无限循环,喂狗的语句,可将程序写在循环体内,喂狗的语句为了避免程序复位。注意:Feed Watchdog这条语是禁止看门狗复位。注释8:中断程序,在RTI指令前编写中断服务程序,spurious程序标号。注释9:中断矢量地址,不同的中断,其不同的矢量地址,根据使用的中断矢量改写$FFFA地址。详细编程方法请看第七章中断实验程序。 输入几条简单的数据传送指令程序后,使用Project菜单中的Compile进行编译,直至无语法错误。在此还可以选择仿真还是连接
22、调试系统,此选项在左侧Project_*.mcp的下拉菜单中选择。1.2.4 CodeWarrior IDE软件对单片机的调试利用CodeWarrior IDE软件,可完成程序的下载和对单片机的调试。1. 程序的下载采用计算机软件仿真实验,选择“Full Chip Simulation”,然后直接用Debug运行;若需要连接调试系统,则选择“P&E Multilink/Cyclone Pro”,然后单击MakeDebug,将弹出如图1-14所示的窗口,点击Connect进行连接,点击图中 Yes,等待片刻后即可运行程序。图 1-14 调试界面图1-15 调试界面2 .单片机的调试程序下载到单片
23、机后即可开始程序的调试。在Debugger调试运行窗口中,默认的有1 Source1、2 Assembly、3 Procedure、4 Register、5 Data1、6 Memory、7 Data2 、8 Command八个窗口如图1-16所示。图1-16 调试窗口图其中1是源文件窗口,你可以在这个窗口单击右键设置或取消断点。2是汇编窗口,该窗口显示源文件的通过汇编后的结果,同样的你也可以在这个窗口进行断点的设置和取消。3是过程窗口,显示运行过程中所用到的函数。4是寄存器窗口,这个窗口显示cpu各个寄存器的内容,双击后可以进行寄存器内容的修改。5和7数据窗口,显示各个变量的储存地址和内容,
24、在这个窗口中单击右键选择ADD EXPRESSION 可以增加要显示的变量。6储存器窗口,显示所有储存器的内容,双击某个储存单元可以修改它的内容。8命令窗口,显示整个调试系统的通信命令。下面我们将介绍几个重要按键的作用:单击该按钮,程序将开始全速运行。如有断点,程序运行到断点处停止。快捷键F5:程序停止状态下,单击该按钮,程序single step方式运行,主程序、子程序单步运行,进入子程序内部,快捷键F11。:程序停止状态下,单击该按钮,程序step over方式运行,主程序单步、子程全速运行,不能停在子程序内部。快捷键F10。:当single step运行方式下,进入某一个子函数内部后,单
25、击该按钮,程序执行完该子函数,停止在紧随该子函数的外部的下一条语句。快捷键shift+F11。:程序停止状态下,单击该按钮,程序assembly step方式运行,该方式与single step方式相似,但是以汇编语句为一单步。捷键ctrl+F11。:当程序运行时,单击该按钮,程序当停止。:单击该按钮,程序将复位。1.2.5 在C语言环境下CodeWarrior IDE使用1. 尝试用C编写求最大值程序,初步了解用C语言开发应用程序的方法。2. 参看图1-9 Create New Project时选C,将C语言程序加载到main.c中如图1-17所示,在File窗口中双击main . c文件,
26、在右边窗口出现C语言程序输入模版,在Include your code here处添加程序。注意设置外围变量MAX保证在执行完程序后该值能够保留。其余操作方式与汇编一致。双击图 1-17 程序界面3. C语言求最大值参考程序2:int max; /*定义外围变量max*/void main(void) EnableInterrupts; /* enable interrupts */ /* include your code here */ int a4=3,8,31,20; /*定义数组*/ int i; /*定义计数变量*/ for(i=0;iai+1) max=ai; else max=
27、ai+1; /*循环比较4个数,把较大的数给max*/ for(;) _RESET_WATCHDOG(); /* feeds the dog */ 1.2.6 CodeWarrior IDE软件使用技巧1有关下载:程序编程完毕后点击DEBUG键检查无误后,程序即可自动下载到单片机上,但是需要注意的是,程序检查无误不代表程序本身无误,如果下载后在原文件窗口看不到已编程的程序,那么即代表你的程序有错误,需要重新修改。此外,在下载程序之前请确认你的单片机已经连接到计算机上,而且接口正常,否则程序是无法下载的。2关于中断矢量的设置中断复位返回指令图1-18 汇编界面根据不同的中断请求,会有不同的中断矢
28、量地址,进入中断矢量复位区后可以转入中断服务程序部分进行编程(DC.W spurious),也可以在主程序区或主循环区对中断服务程序进行编程,也可以在主程序的最后一个语句后,插入中断矢量地址,和中断服务程序,如下图图1-19 汇编中断程序图但是要特别注意的是无论是什么中断请求或中断服务程序,都需要保证中断矢量复位区的中断复位返回指令(DC.W spurious)所在地址为$FFFE,运行返回指令后程序指针从地址$FFFF返回,否则程序会发生错误。如图2-4-13,中断矢量入口为$FFFA,DC.W spurious语句占两个字节,运行两次以后程序指针停在$FFFE,当运行过返回程序(两字节)后
29、程序指针从$FFFF返回,如果中断矢量入口直接为$FFFE,那么则必须省略两个DC.W spurious语句,直接写中断复位返回指令(DC.W spurious),否则报错。1.2.7 开发板简介USB口 驱动(虚线框内)BDM调试端(未焊接)USB调试口串行调试口指示灯跳线座两个按键MC9S08QG8图1-20 开发板实物图芯片引脚 请结合附录III详细了解开发板的基本结构与功能。第二章 相关常用寄存器介绍2.1 输入输出控制寄存器1. 端口A、B数据寄存器(PTAD、PTBD) 端口A数据寄存器PTAD =未实现或保留 表2-1 PTAD功能对照表位功能7:6未实现或保留位5只能作输入管脚
30、4只能作输出管脚3:0PTADn当端口为输入管脚时,读返回管脚上的逻辑电平。当作为输出的管脚时,读返回最近写这个寄存器的值,写的值锁进寄存器的各个位。 端口B数据寄存器PTBD表2-2 PTBD功能对照表位功能7:0PTBDn当端口为输入管脚时,读返回管脚上的逻辑电平。当作为输出的管脚时,读返回最近写这个寄存器的值,写的值锁进寄存器的各个位。2. 端口A、B数据方向寄存器(PTADD、PTBDD) 端口A数据方向寄存器PTADD表2-3 PTADD功能对照表位功能5:4PTA5只能作输入管脚,PTA4只能作输出管脚3:0PTADDn1使能为输出管脚0使能为输入管脚 端口B数据方向寄存器PTBD
31、D表2-4 PTBDD功能对照表位功能7:0PTBDDn1使能为输出管脚0使能为输入管脚3. 端口A、B内部上拉使能寄存器(PTAPE、PTBPE) 端口A内部上拉使能寄存器PTAPE表2-5 PTAPE功能对照表位功能5:0PTAPEn0屏蔽端口A第n位的内部上拉功能。1使能端口A第n位的内部上拉功能。PTAPE4对只能作为输出口的PTA4管脚没有影响。 端口B内部上拉使能寄存器PTBPE表2-6 PTBPE功能对照表位功能7:00屏蔽端口B第n位的内部上拉功能。1使能端口B第n位的内部上拉功能。2.2 键盘中断寄存器1. KBI状态和控制寄存器 (KBISC) 表2-7 KBISC寄存器功
32、能对照表位功能7:4未用到寄存器位,读总为0。3KBF键盘中断标志KBF指示一个键盘中断是否被检测到。对KBF写操作没有影响。0没有检测到键盘中断1检测到键盘中断2KBACK键盘应答写1到KBACK是标志清除机制的一部分,KBACK读时总为0。1KBIE键盘中断使能 KBIE确定一个键盘中断是否允许请求。0键盘中断请求没有使能1键盘中断请求使能0KBMOD键盘检测模式 KBMOD(与BKEDG位一起)控制键盘中断管脚的检测模式。0键盘只检测边沿1键盘检测边沿和电平2. KBI管脚使能寄存器 (KBIPE)表2-8 KBIPE寄存器功能对照表位功能7:0KBIPEn键盘管脚使能每个KBIPEn位
33、使能对应的键盘中断管脚0管脚没有使能键盘中断功能1管脚使能键盘中断功能3. KBI沿选择寄存器 (KBIES)表2-9 KBIES寄存器功能对照表位功能7:0KBEDGn键盘沿选择每个KBEDGn位选择相应管脚的下降沿/低电平或者上升沿/高电平功能0下降沿/低电平(触发中断)1上升沿/高电平(触发中断)2.3 定时器寄存器1. 八位定时模块MTIM MTIM状态与控制寄存器MTIMSC表2-10 MTIMSC寄存器功能对照表位功能7TOF定时器溢出标志当计数器计数到与辅助寄存器MTIMMOD数值相等,并翻转到0时,该只读溢出标志TOF会被置“1”。该溢出标志的清除方法有三种:1 当TOF为“1
34、”时,读MTIMSC,并给TOF重新写入“0”; 2 写“1” 给TRST; 3 给辅助寄存器MTIMMOD写入任何数值。6TOIE溢出中断允许如果该位设置为“1”,则当TOF置位时会产生中断。当TOF为“1”时不要设置该允许位,一般的做法是先清除TOF,然后再设置TOIE。即使该位没有设置,还是可以通过软件查询TOF的方法使用定时器的。5TRST定时器复位设置该位只能写入,读出总为0,而且写0没有影响,写1时导致计数器为0x00,同时TOF也清零。4TSTP定时器停止设置当该位置“1”,会使计数器停止计数,计数数值保持不变,当清除该位时,计数器从当前数值继续计数。3:0未使用,读出总为0 M
35、TIM时钟配置寄存器MTIMCLK表2-11 MTIMCLK寄存器功能对照表位功能7:6未使用,读出总为05:4CLKS计数器时钟源选择通过该两位设置,在四种时钟源中选择其一,改变时钟源时不会影响计数器计数,时钟源切换后,计数器会在新的时钟下继续计数。00选择总线时钟(BUSCLK);01固定频率时钟(XCLK);10外部时钟TCLK的下降沿;11外部时钟TCLK的上升沿。3:0PS时钟预分频器该4位设置计数器输入时钟的预分频数,改变分频数不影响计数器计数,分频数切换后,计数器会在新的分频数下计数。0000分频数为1; 0001分频数为2; 0010分频数为4;0011分频数为8; 0100分
36、频数为16; 0101分频数为32;0110分频数为64; 0111分频数为128; 大于等于1000分频数为256。 MTIM计数器MTIMCNT该计数器为只读,写入任何数值对其没有影响,复位时为0x00。 MTIM模寄存器MTIMMOD该8位可读写的寄存器保存的数值是计数器计数的最大值,当计数器计数到该最大值时会翻转到0,同时设置TOF标志。如果给该寄存器写入数值0x00,会导致计数器成为一个没有约束的自由运行的计数器,给MTIMMOD写入数值回导致计数器回0x00,而且溢出标志TOF也会清零。MTIMMOD复位时为0x00。2. 十六位定时模块TPM TPM状态与控制寄存器TPMSC表2
37、-12 TPMSC寄存器功能对照表位功能7TOF定时器溢出标志当计数器计数到模寄存器数值并翻转到0x0000时,该标志置1。当定时器设置为中间对齐的PWM(CPWM)工作模式时,计数器计数到模寄存器数值并开始减1时,该溢出标志置1。清除该标志分成两步,先读TPMSC,然后对TOF写0,如在这两步之间有其它定时器溢出,则清除动作取消。复位时清除TOF,对TOF写1没有影响。6TOIE定时器中断允许该读/写位控制定时器的溢出中断。当TOIE设置为1时,如果TOF为1会产生中断。TOIE为0时,还是可以通过软件查询TOF的方法使用定时器的。5CPWMS中间对齐PWM模式选择位如果该位为0,定时器工作
38、在加法计数器方式,此时计数器的独立通道可以工作在输入捕捉、输出比较和沿对齐PWM模式。该位设置为1,将使得定时器工作在加/减计数器方式,而且所有通道都必须工作在中间对齐的PWM模式下。该位复位时为0。4:3CLKSB:A定时器时钟源选择位该2位的设置可能停止定时器,也可能选择3种时钟源之一作为定时器的输入。00没有时钟输入,定时器停止; 01总线时钟BUSCLK;10固定系统时钟XCLK; 11外部输入时钟TPMCLK。2:0PS2:0时钟预分频设置该3位设置定时器的分频器,对应关系如下:0001分频; 0012分频; 0104分频; 0118分频;10016分频;10132分频; 11064
39、分频;111128分频。 TPM计数器TPMCNTH : TPMCNTLTPM计时寄存器高位TPMCNTH:TPM计时寄存器低位TPMCNTL:这是两个只读的8位寄存器,而且读取任何一个寄存器都会将这两个寄存器数值保存在某个缓冲中,直到另一个寄存器也被读取,至于哪个寄存器先被读取并不重要。该自动缓冲机制通过以下3种方法可以重新进入准备状态:1MCU复位;2对计数器TPMCNTH或TPMCNTL写入任何数值;3对状态和控制寄存器TPMSC写入任何数值。 定时器模寄存器TPMMODH:TPMMODLTPM模寄存器高位TPMMODH:TPM模寄存器低位TPMMODL:该可读/写寄存器定义了计数器的最
40、大数值,当计数器计数到与模寄存器数值相等时,对于加法计数器(CPWMS = 0)则翻转到0x0000,对于加/减计数器(CPWMS = 1),计数器开始递减。此时溢出标志TOF会被置1。对模寄存器的某个8位写入数值时会禁止TOF设置,同时也禁止了中断,直到另一个8位寄存器写入新值。复位时0x0000,此时如果启动定时器则计数器成为“自由计数器”。对模寄存器的更新操作最好在定时器溢出中断中进行,这样比较容易保证在新的溢出之前,两个8位的寄存器数值更新已经完成。另外一个好的习惯就是在对模寄存器第一次写入数值前,先复位主计数器,以保证第一次溢出不会太快。 定时器通道n(n为0或1)对应的状态与控制寄
41、存器TPMCnSC表2-13 TPMCnSC寄存器功能对照表位功能7CHnF通道n的中断标志如果通道n设置为输入捕捉,当外部管脚出现有效边沿,则该中断标志。当通道n设置为输出比较或是边沿对齐的PWM工作模式,当TPM计数器数值与通道n辅助寄存器数值一致时。对于中间对齐的PWM工作模式来说,该标志一般不使用,因为在一个周期中,脉冲有效的两个沿都会设置该标志(有两次比较匹配事件)。如果通道n对应的中断被允许(CHnIE = 1),则标志CHnF置1时会产生中断。清除CHnF标志分两步,先读取TPMCnSC,然后对CHnF写0。在这两步之间如果有事件发生,需要设置CHnF,则清除标志的动作取消。对该
42、标志写1没有影响。6(CHnIE)通道n中断允许置1该控制位将允许通道n的中断。5:4MSnB:MSnA通道工作模式选择控制位,MSnB决定对应的通道是否设置为PWM模式,而MSnA决定通道在不是PWM模式时,是输入捕捉还是输出比较。更详细用法参见表2-14。3:2ELSnB:ELSnA沿/电平选择控制位设置通道对应的外部管脚工作模式,具体用法参见表2-14。该控制位的设置需要参考其它三个控制位CPWMS:MSnB:MSnA,对于输入捕捉而言,该控制选择上升沿还是下降沿,而对于输出比较而言,该控制选择比较匹配时,外部管脚被驱动成高电平还是低电平,对于PWM而言,该控制决定了脉宽有效期间对应外部
43、管脚的电平状态。设置该两位为0:0时使得通道对应的外部管脚为通用I/O,该特性可用于临时取消输入捕捉功能,或者是通道设置成不需要外部管脚的软件定时器时,将对应的管脚作为通用I/O使用。对于TPMCH0被设置成外部脉冲输入管脚时,通道0对应的该控制位必须设置成0:0。1:0未使用的保留位。表2-14 通道模式对照表CPWMSMSnB:MSnAELSnB:ELSnA模式功能xxx00通道未使用外部管脚,可能是管脚作为TPM的外部时钟输入或者是将管脚作为通用I/O使用。000011011输入捕捉仅上升沿捕捉仅下降沿捕捉上升沿或下降沿都捕捉0100011011输出比较仅软件比较,无管脚输出比较匹配时,外部管脚翻转比较匹配时,外部管脚清0比较匹配时,外部管脚置11x10x1边沿对齐PWM脉宽有效期间高电平(比较匹配时,外部管脚清0)脉宽有效期间低电平(比较匹配时,外部管脚置1)1xx10x1中间对齐PWM脉宽有效期间高电平(比较匹配时,外部管脚清0)脉宽有效期间低电平(比较匹配时,外部管脚置1) 2个独立通道对应的定时器通道数值寄存器TPMCnVH:TPMCnVL定时器通道数值寄存器高位TPMCnVH:定时器通道数值寄存器高位T