分享
MSP430软件开发手册.pdf
下载文档

ID:3048918

大小:4.60MB

页数:72页

格式:PDF

时间:2024-01-18

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
MSP430 软件 开发 手册
前言前言 MSP430 是德州仪器(TI)一款性能卓越的超低功耗 16 位单片机,自问世以来,MSP430 单片机一直是业内公认的功耗最低的单片机。除采用先进的制造工艺使芯片的静态电流尽可能降低外,MSP430 的独立可配置的时钟系统是其低功耗的基石之一。在追求绿色能源的今天,MSP430 超低功耗微控制器正以其超低功耗的特性,以及丰富多样化的外设受到越来越多设计者们的青睐。MSP430 发展到今天已经行成了非常丰富的产品体系:从最初通用型的 F1 和 F2 系列,到集成有段式 LCD 驱动的 F4系列(比较广泛地应用于水电表中),到集成有 USB 驱动的F5/F6 系列,到集成有 1GHz 射频模块的 CC430 系列,再到近期的超高性价比的 G2,再到采用新存储技术的 FRAM 系列。MSP430 产品已经被广泛地应用到工业生活的各个领域,从水电表到烟雾探测,从电动牙刷到便携式血糖仪,从遥控器到平板触摸家电,430 正潜移默化地改善用户体验,使得生活更加安全与简单。图 MSP430 产品家族 同时,MSP430有着开发简单,容易上手的优势,这为新手进行单片机学习提供了很大的便利于帮助。为方便使用者的学习,TI 推出了多款基于 430 的开发学习板,供初学者学习以及项目的开发,例如 MSP430Launchpad,以及基于 F5529 的开发板等。TI 也为MSP430 学习者和开发者提供了丰富的资源,包括硬件原理设计,软件开发,应用笔记等。德州仪器中国大学计划也一直致力于将业内先进的技术引入到中国高校中,让学生能够学以致用。在 MSP430 的推广上更是不遗余力,在硬件开发平台和软件技术支持上都全力帮助老师和同学。在与高校老师和同学交流的过程中发现很多是刚开始接触单片机或者430,对 430 的开发流程不是很清楚,在过程中往往会产生很过困惑。鉴于此,我们希望能够通过这本小册子帮助刚接触 MSP430 的开发者,解答在开发过程中的一些问题,使其能够尽快开始 430 的开发工作。本书一共包括 6 个小节,从实践的角度分别讲解了:CCS5.1 的安装和基本使用方法;430Ware 软件的介绍和使用说明;Grace 软件的介绍和使用说明;CCS 软件开发流程;CCS 工程结构解析;TI 官方典型例程解析。通过概念结合实例的方法希望能够帮助读者尽快地开始 MSP430 的开发。附录中通过一个开发案例更为直接地向读者介绍如何利用 CCS 以及其他资源进行 MSP430 的开发。在常见问题中列出了学校同学在 430 学习过程中可能会碰到的问题。本书由高校和 TI 大学计划部的工程师通力合作来完成,其中第一章节 CCS 的安装和使用方法由合肥工业大学电气与自动化工程学院 DSP实验室的老师和同学编写,第三章节 Grace软件的介绍和使用说明由西安电子科技大学 MSP430单片机联合实验室的老师和同学编写,其余章节则由德州仪器大学计划部 MCU工程师崔萌,王沁编写完成。在此对合肥工业大学和西安电子科技大学的老师和同学表示感谢。由于时间仓促,本书中不免有错误和漏洞存在,希望大家能积极反馈,在使用过程中帮忙查漏补缺,完善该书,以期更好地帮助初学者,谢谢。德州仪器中国大学计划 2012年 10月 MSP430 软件软件开发指南开发指南 目录目录 前言.1 1.软件开发环境 CCSV5.1.5 1.1.CCSv5.1 的安装.5 1.2.利用 CCSv5.1 导入已有工程.8 1.3.利用 CCSv5.1 新建工程.10 1.4.利用 CCSv5.1 调试工程.14 1.4.1.创建目标配置文件.14 1.4.2.启动调试器.17 2.430Ware 使用指南.22 2.1.430Ware 使用说明.22 3.Grace.28 3.1.Grace 软件介绍.28 3.2.Grace 安装.28 3.3.Grace 开发实例.28 3.3.1.创建 Grace 工程.28 3.3.2.使用 Grace 配置 I/O 口及外设.29 3.3.3.生成可编译文件.35 4.MSP430 软件开发编程介绍.37 4.1.MSP430 软件开发流程.37 4.1.1.C/C+编译器.38 4.2.MSP430 C 语言简介.38 4.2.1.数据类型.38 4.2.2.变量种类.39 4.2.3.变量存储类型.40 4.2.4.运算符.42 5.CCS MSP430 工程结构解析.45 5.1.includes.45 5.2.Cmd 配置文件.46 5.3.源文件.49 5.4.ccxml 配置文件.50 6.典型 MSP430 例程结构.55 6.1.示例程序注释说明.56 6.2.声明头文件.58 6.3.常量定义,变量声明及函数声明.60 6.3.1.常量定义.60 6.3.2.变量声明.61 6.3.3.函数声明.61 6.4.主函数定义.61 6.5.子函数定义.62 附录 A.64 开发实例.64 附录 B.69 FAQ 69 1.软件开发环境软件开发环境 CCSV5.1 CCS(Code Composer Studio)是 TI公司研发的一款具有环境配置、源文件编辑、程序调试、跟踪和分析等功能的集成开发环境,能够帮助用户在一个软件环境下完成编辑、编译、链接、调试和数据分析等工作。CCSv5.1为 CCS软件的最新版本,功能更强大、性能更稳定、可用性更高,是 MSP430软件开发的理想工具。在本节中将具体介绍 CCSV5的安装方法,并以 MSP430F5529为例介绍 CCS的一般使用方法。1.1.CCSv5.1 的安装的安装(1)运行下载的安装程序 ccs_setup_5.1.1.00031.exe,当运行到如图 1.1处时,选择Custom选项,进入手动选择安装通道。图 1.1 安装过程 1(2)单击 Next 得到如图 1.2所示的窗口,为了安装快捷,在此只选择支持 MSP430 Low Power MCUs的选项。单击 Next,保持默认配置,继续安装。图 1.2 安装过程 2 图 1.3 软件安装中 图 1.4 软件安装完成(3)单击 Finish,将运行 CCS,弹出如图 1.5所示窗口,打开“我的电脑”,在某一磁盘下,创建以下文件夹路径:-MSP-EXP430F5529Workspace,单击 Browse,将工作区间链接到所建文件夹,不勾选Use this as the default and do not ask again。图 1.5 Workspace选择窗口(4)单击 OK,第一次运行 CCS需进行软件许可的选择,如图 1.6所示。在此,选择 CODE SIZE LIMITED(MSP430)选项,在该选项下,对于 MSP430,CCS免费开放 16KB的程序空间;若您有软件许可,可以参考以下链接进行软件许可的认证:http:/ Finish即可进入 CCSv5.1 软件开发集成环境,如图 1.7所示。图 1.6 软件许可选择窗口 图 1.7 CCSv5软件开发集成环境界面 1.2.利用利用 CCSv5.1 导入已有工程导入已有工程(1)在此以实验一的工程为例进行讲解,首先打开 CCSv5.1并确定工作区间:FMSP-EXP430F5529Workspace,选择 File-Import 弹出图 1.8对话框,展开 Code Composer Studio选择 Existing CCS/CCE Eclipse Projects。图 1.8 导入新的 CCSv5工程文件(2)单击 Next 得到图 1.9对话框。图 1.9 选择导入工程目录(3)单击 Browse 选择需导入的工程所在目录,在此,我们选择:FMSP-EXP430F5529 WorkspaceMSP-EXP430F5529 LAB CODELAB1(需在此之前,将实验代码复制到工作区间下),得到图 1.10。图 1.10 选择导入工程(4)单击 Finish,即可完成既有工程的导入。1.3.利用利用 CCSv5.1 新建工程新建工程(1)首先打开 CCSv5.1并确定工作区间,然后选择 File-New-CCS Project 弹出图1.11对话框。图 1.11 新建 CCS工程对话框(2)在 Project name 中输入新建工程的名称,在此输入 myccs1。(3)在 Output type 中有两个选项:Executable 和 Static library,前者为构建一个完整的可执行程序,后者为静态库。在此保留:Executable。(4)在 Device部分选择器件的型号:在此 Family选择 MSP430;Variant 选择MSP430X5XX family,芯片选择 MSP430F5529;Connection保持默认。(5)选择空工程,然后单击 Finish完成新工程的创建。(6)创建的工程将显示在 Project Explorer 中,如图 1.12所示。图 1.12 初步创建的新工程 特别提示:若要新建或导入已有特别提示:若要新建或导入已有.h 或或.c 文件,步骤如下:文件,步骤如下:(7)新建.h 文件:在工程名上右键点击,选择 New-Header File 得到图 1.13 对话框。图 1.13 新建.h文件对话框 在 Header file中输入头文件的名称,注意必须以.h结尾,在此输入 myo1.h。(8)新建.c文件:在工程名上右键单击,选择 New-source file 得到图 1.14对话框。图 1.14 新建.c文件对话框 在 Source file中输入 c文件的名称,注意必须以.c结尾,在此输入 my01.c。(9)导入已有.h 或.c 文件:在工程名上右键单击,选择 Add Files 得到如 1.15 对话框。图 1.15 导入已有文件对话框 找到所需导入的文件位置,单击打开,得到图 1.16对话框。图 1.16 添加或连接现有文件 选择 Copy files,单击 OK,即可将已有文件导入到工程中。若已用其它编程软件(例如 IAR),完成了整个工程的开发,该工程无法直接移植入CCSv5,但可以通过在 CCSv5中新建工程,并根据步骤(7)、(8)和(9)新建或导入已有.h和.c文件,从而完成整个工程的移植。1.4.利用利用 CCSv5.1 调试工程调试工程 1.4.1.创建目标配置文件创建目标配置文件(1)在开始调试之前,有必要确认目标配置文件是否已经创建并配置正确。在此以实验一为例进行讲解:首先导入实验一的工程,导入步骤请参考 1.2节,如图 1.17所示,其中 MSP430F5529.ccxml 目标配置文件已经正确创建,即可以进行编译调试,无需重新创建;若目标配置文件未创建或创建错误,则需进行创建。为了讲解目标配置文件创建过程,在此对 LAB1的工程再次创建目标配置文件。图 1.17 LAB1工程浏览器(2)创建目标配置文件步骤如下:右键单击项目名称,并选择 NEW-Target Configuration File。F5529 目标配置文件 图 1.18 创建新的目标(3)在 File name 中键入后缀为.ccxml的配置文件名,由于创建 F5529开发板的目标配置文件,因此,将配置文件命名为 MSP-EXP430F5529.ccxml,如图 1.19所示。图 1.19 目标配置文件名(4)单击 Finish,将打开目标配置编辑器,如图 1.20所示。图 1.20 目标配置编辑器(5)将 Connection选项保持默认:TI MSP430 USB1(Default),在 Board or Device 菜单中选择单片机型号,在此选择 MSP430F5529。配置完成之后,单击 Save,配置将自动设为活动模式。如图 1.21所示,一个项目可以有多个目标配置,但只有一个目标配置在活动模式。要查看系统上所有现有目标配置,只需要去 View-Target Configurations 查看。图 1.21 项目与配置后的目标文件 1.4.2.启动调试器启动调试器(1)首先将 LAB1工程进行编译通过:选择 Project-Build Project,编译目标工程。在第一次编译实验工程时,系统会提示自动创建 rts430 xl.lib库文件,您可以选择等待创建完成,但可能会花费较长的时间。或者,为了方便,推荐在编译之前将本实验文件夹内的rts430 xl.lib库文件复制到 CCSV5.1的库资源文件夹内,其复制路径为:-toolscompilermsp430lib(-为 CCSv5.1的安装路径)。编译结果,如图 1.22所示,表示编译没有错误产生,可以进行下载调试;如果程序有错误,将会在 Problems 窗口显示,根据显示的错误修改程序,并重新编译,直到无错误提示。图 1.22 LAB1工程调试结果(2)单击绿色的 Debug 按钮 进行下载调试,得到图 1.23所示的界面。图 1.23 调试窗口界面(3)单击运行图标运行程序,观察显示的结果。在程序调试的过程中,可通过设置断点来调试程序:选择需要设置断点的位置,右击鼠标选择 BreakpointsBreakpoint,断点设置成功后将显示图标,可以通过双击该图标来取消该断点。程序运行的过程中可以通过单步调试按钮配合断点单步的调试程序,单击重新开始图标定位到 main()函数,单击复位按钮复位。可通过中止按钮返回到编辑界面。(4)在程序调试的过程中,可以通过 CCSV5.1查看变量、寄存器、汇编程序或者是Memory等的信息 显示出程序运行的结果,以和预期的结果进行比较,从而顺利地调试程序。单击菜单 ViewVariables,可以查看到变量的值,如图 1.24所示。调试窗口 变量、观察及寄存器窗口 程序窗口 控制台窗口 图 1.24 变量查看窗口(5)点击菜单 ViewRegisters,可以查看到寄存器的值,如图 1.25所示。图 1.25 寄存器查看窗口(6)点击菜单 ViewExpressions,可以得到观察窗口,如图 1.26所示。可以通过添加观察变量,或者在所需观察的变量上右击,选择 Add Watch Expression添加到观察窗口。图 1.26 观察窗口(7)点击菜单 ViewDisassembly,可以得到汇编程序观察窗口,如图 1.27所示。图 1.27 汇编程序观察窗口(8)点击菜单 ViewMemory Browser,可以得到内存查看窗口,如图 1.28所示。图 1.28 内存查看窗口(9)点击菜单 ViewBreak points,可以得到断点查看窗口,如图 1.29所示。图 1.29 断点查看窗口 2.430Ware 使用指南使用指南 430Ware是 CCS中的一个附带应用软件,在安装 CCSV5的时候可选择同时安装430Ware,在 TI官网上也提供单独的 430Ware安装程序下载。(http:/ 430Ware中可以容易地找到 MSP430所有系列型号的 Datasheet,Users guide以及参考例程,此外 430Ware 还提供了大多数 TI 开发板(持续更新中)的用户指南,硬件设计文档以及参考例程。针对 F5和 F6系列还提供了驱动库文件,以方便用户进行上层软件的开发。2.1.430Ware 使用说明使用说明 在 CCS中单击“view”-“TI Resource Explorer”,在主窗口体会显示如图所示的界面。其中,Package右侧的下拉窗口中可以观察目前 CCS中安装的所有附加软件。在package旁的下拉菜单中选择 MSP430Ware,进入 430Ware的界面。图 2.1 TI resource explorer 界面 在 430Ware的界面左侧可以看到 3个子菜单,分别是 Device,里面包含 MSP430所有的系列型号;Development Tools,里面包括 TIMSP430较新的一些开发套件的资料;和Libaries,包含了可用于 F5和 F6系列的驱动库函数以及 USB的驱动函数。图 2.2 TI MSP430Ware 界面 单击菜单前的三角下拉键,查看下级菜单,可以看到在 Devices 的子目录下有目前所有的 MSP430的型号,找到正在使用的型号,例如 MSP430G2xx,同样单击文字前的三角下拉键,在子目录可以找到该系列的 Users Guide,在用户指南中有对该系列 MSP430的CPU以及外围模块,包括寄存器配置,工作模式的详细介绍和使用说明;同时可以找到的是该系列的 Datasheet,数据手册是与具体的型号相关,所以在 datasheet的子目录中会看到具体不同型号的数据手册;最后在这里还可以找到的是参考代码。图 2.3 MSP430Ware 覆盖 430 全系列产品 在 430Ware中提供不同型号的 CCS示例程序,以及基于 Grace的示例程序供开发者参考。选择具体型号后,在右侧窗口中看到提供到的参考示例程序。为更好地帮助用户了解MSP430的外设,430Ware 中提供了基于所有外设的参考例程,从示例程序的名字中可以看出该示例程序涉及的外设,同时在窗口中还可以看到关于该例程的简单描述,帮助用户更快地找到最合适的参考程序。图 2.4 430Ware 中的示例程序 单击选中的参考例程,在弹出的对话框中选择连接的目标芯片型号。图 2.5 导入 430Ware 中的示例程序 经过这一步后,CCS 会自动生成一个包含该示例程序的工程,用户可以直接进行编译,下载和调试。在 Development Tools的子目录中可以找到 TI基于 MSP430的开发板,部分资源已经整合在软件中,另外还有部分型号在 430Ware中也给出了链接以方便用户的查找和使用。在该目录下可以方便地找到相应型号的开发板的用户指南,硬件电路图以及参考例程。图 2.6 430Ware 包含 TI430 开发板资料 为简化用户上层软件开发,TI给出了 MSP430外围模块的驱动库函数,这样用户可以不用过多地去考虑底层寄存器的配置。这些支持可以在 430Ware的 Libraries 子目录中方便地找到。目前对 DriverLib的支持仅限于 MSP430F5和 F6系列。图 2.7 430Ware 包含 430 开发驱动库 通过上述描述可以看出,430Ware是一个非常有用的工具,利用 430Ware 可以很方便地找到进行 430开发所需要的一些帮助,包括用户指南,数据手册和参考例程。3.Grace 3.1.Grace 软件介绍软件介绍 刚接触单片机开发时最大的困惑之一可能就是对单片机中寄存器的理解和配置。C语言对寄存器的配置相对来说会比较抽象,尤其对于初学者而言。CCS中集成的 Grace软件则可以帮助初学者更快地理解寄存器,同时也提供了一种全新的图形化的编程方式。Grace是 TI推出的集成在 CCS中的一款简单易用的图形化 I/O与外设配置软件,是基于GUI的 I/O与外设配置的软件工具,目前支持的型号包括 MSP430F2XX/G2XX器件,并且即将支持 F5和 F6系列。Grace使得开发人员能够简单生成包括全面注释的简单易读的 C代码并快速完成外设的配置,利用 Grace 代码的生成,快速启动开发工作,使开发人员可以在数分钟内完成MSP430单片机的外设模块的配置,并可以生成 C语言代码,极大的缩减了开发者花在配置外设上的时间,缩短了开发周期。3.2.Grace 安装安装 Grace软件有两种形式:一是作为 Code Composer Studio(CCS)的一个插件,在 CCSV5版本中,Grace作为一个插件已经自动安装到其中,如果使用的 CCS版本号较低,没有自动安装 Grace插件,也可以在 TI官网上下载 Grace 插件,安装后即可使用;二是Standalone 版本,在这种情况下 Grace 独立于任何编译环境运行,可以在电脑上独立运行,开发人员需要的做的只是把最终生成的代码复制到工程中即可。3.3.Grace 开发实例开发实例 利用 Grace 实现 LED闪烁,闪烁频率为每秒两灭一次。3.3.1.创建创建 Grace 工程工程 如图所示,打开 CCS,Project-New CCS Project,弹出如下对话框,输入创建新工程的名称(避免中文),继续在 Device框中选择连接的器件,Family选择 MSP430,Variant选择您所使用的芯片型号,如 MSP430G2553,可以在前面的过滤文字输入框中输入所用型号的关键词进行过滤。在 Project templates and examples 框中选择 Empty Projects-Empty Grace(MSP430)Project.其余项保持默认即可,点击 Finish完成 Grace工程的创建。图 3.1 新建 grace 工程 3.3.2.使用使用 Grace 配置配置 I/O 口及外设口及外设 上述操作后,CCS会新建一个空白的基于 Grace的工程,相较于一般 CCS工程,Grace的工程中会有一个后缀为.cfg的配置文件。通过这个文件,用户可以对 MSP430的外设进行配置。图 3.2 空白 Grace 工程界面 在配置文件上方可以看到三个按键:Welcome,Device Overview和 System Register,如图所示,Welcome按键是灰色显示,表明当前显示的内容即时 Welcome 下的,此时可以看到 Grace使用过程中的一些帮助和操作指南。图 3.3 Grace 欢迎界面 点击 Device Overview 按钮,窗口显示当前片上的所有外设模块,其中蓝色的为可以通过编程配置的模块。有些模块的左下角有绿色的标记,表明当前模块正在被使用,可以通过在模块上右键,选择 Use xxxx 来实现模块的使用。当然在正在使用的模块上右键可以选择 Stop xxxx 来停止该模块的使用。图 3.4 Grace 寄存器配置概览界面 当将鼠标移到某个模块上方,并点击该模块时,会出现如图所示的界面(这里点击Timer0_A3),该模块并没有被使用,可以通过选中 Enable Timer0_A3 in my configuration 前的复选框来使用该模块:图 3.5 定时器模式配置界面 选中后会出现如图所示界面。选择 Basic User,可以对该模块进行一些简单的设置,如果需要使用更复杂、更高级的功能,可以点击 Power User 进行配置。图 3.6 定时器配置界面 需要编程实现 LED 每秒钟闪一次,即需要产生一个频率为 1Hz 的中断,不妨选择ACLK 为时钟源,发现这里 ACLK 默认频率为 12kHz,这意味着 Grace 软件在时钟系统模块中已经默认 ACLK 的时钟源自 VLO。在分频上不妨选用 8 分频,这样就产生了一个 1.5kHz 的时钟,该时钟将作为定时器的时钟被使用。选择计数模式为增计数模式,时间间隔在 Capture Register 中输入设定:这里的时间间隔为 1Hz,时钟频率为 1.5k,所以设置计数次数为 1500,实现 1s 的中断间隔。由于只需要产生一个定时间隔,所以选择输出比较模式,无需输出引脚。注意 CCR0 寄存器不能设为模式 2、3、6 和 7,如果设置了其中任何一个,Grace 会自动报错并提示出错的原因。这里会发现左边的 Input Selection 和 Capture Mode 两栏是灰色,即不能进行选择,因为在输出捕获模式下这两栏的配置是没有意义的,只有选择输入捕获模式,灰色部分才会被激活。再在下面使能捕获/比较中断,这个中断即为自定义的定时器每隔 1s 所产生的一个中断。填写中断句柄,该句柄相当于是自定义的一个中断服务函数,在中断函数中被调用。最后选择中断之后的状态,根据实际时钟使用的状况,选择在中断结束后进入的低功耗模式。图 3.7 定时器详细配置界面 在配置之后可以点击 Register 来查看当前寄存器每一位的值。将鼠标移到某个寄存器位时,会显示该位的定义和功能。图 3.8 Grace 定时器寄存器列表界面 以上,完成了对定时器外设的配置,下面点击左下角的 Grace 标签或右上角的图标,回到 Error!Reference source not found.主窗口进行 I/O 口的配置。点击 I/O口模块,根据所使用的芯片封装点击相应的按钮。在此选择 Pinout 20-TSSOP/20-TDIP,一个 MSP430G2553 芯片就出现了,点击蓝色向下箭头,对相应引脚的功能进行选择和配置。不妨选择配置 P1.0 为 GPIO Output,用来驱动 LED。图 3.9 Grace 引脚功能配置界面 3.3.3.生成可编译文件生成可编译文件 经过上述步骤,程序中涉及到的两个外设:定时器和 I/O口已经配置完成了,接下来可以进行编译和最后的程序完善。单击工程,然后单击 CCS工具栏上的图标,进行编译,这时会提示有错误出现,这是因为刚才定义的中服务函数没有定义。右键单击 main函数里面的 CSL_init()函数,选择 Open Declaration,打开 CSL_init.c文件,或者在 Project Explorer 中找到并打开 CSL_init.c文件。图 3.10 Grace 代码添加 在该文件中发现有对之前定义的中断服务子程序 TA0_ISR的声明,但却没有定义。在如图所示位置(蓝色部分)添加代码,实现 LED的状态切换,然后编译,点击图标即可进行下载仿真。图 3.11 代码添加位置 综上,就实现了利用 Grace软件实现了定时器控制 LED闪烁的实验。4.MSP430 软件开发编程介绍软件开发编程介绍 4.1.MSP430 软件开发流程软件开发流程 在 MSP430的软件编程中,较常见的是使用 C语言进行开发。CCS一个主要的功能即是将 C代码转换成机器可以识别的机器代码,从而实现程序功能。如图所示为 MSP430的软件开发流程图。其中阴影部分为对 430进行 C语言编程软件的一个开发流程,其余部分则为一些增强开发过程的外围功能。用户编写的 C/C+源代码由 C/C+编译器编译生成汇编代码,之后由汇编工具生成对象文件,最后由连接器生成可执行的对象文件,在单片机上运行。编程过程中,用户面对的是 C/C+编程这一块,所以在后文对 C/C+编译部分进行展开介绍。图 4.1 MSP430 软件流程图 4.1.1.C/C+编译器编译器 一般来说,C/C+语言编译器中功能的实现遵循以下 ISO标准:ISO 标准 C 语言 C/C+编译器中 C语言部分遵循 C语言标准 ISO/IEC 9889:1990,相当于美国国家信息系统编程语言标准定义的 cX3.159-1989标准,俗称 C89,此定义是由美国国家标准协会出版的。当然 ISO标准也发布过 1999年版,但是 TI公司的编译器(CCS)仅支持 1990年而非 1999年版 ISO,这也是为什么在进行不同编译环境之间的软件移植时,在程序编译过程中可能会出现语法不兼容的情况。ISO 标准 C+C/C+编译器中 C+语言部分遵循 C+语言标准 ISO/IEC14882:1998。编译器还支持嵌入式 C+语言,但对某些特定的 C+类型不支持,详情可参考 slau132G。ISO 标准的实时支持 编译器工具自带有庞大的实时运行数据库。所有的库函数都符合 C/C+标准。该数据库涵盖的功能有标准输入与输出,字符串操作,动态内存分配,数据转换,计时,三角函数、指数函数以及双曲函数分析等。ANSI、ISO 标准定义了 C 语言中那些受目标处理器特点、实时运行环境或主机环境影响因素的一些特征。出于实效性考虑,这一功能在不同编辑器之间存在一定差异。C 语言库中所不支持的功能有:实时运行库对大长度和多字节的数据仅提供最小程度的支持。若使用 wchar_t 类型将仍然被用作 int 类型来操作。宽字符集相当于 char 型,库文件中包含了头文件和,但并不支持其中所有功能。实时运行库包含一个头文件,但同样仅提供最小程度的支持,唯一支持的语言环境是 C 语言环境。4.2.MSP430 C 语言简介语言简介 4.2.1.数据类型数据类型 MSP430 的数据类型定义如下所示。4.2.2.变量种类变量种类 在程序中需要定义和使用一些变量,一般来说可以在以下几个位置进行变量的声明:1 函数内部;2 函数的参数定义;以及 3 所有函数的外部。这样,根据声明位置的不同,可以将变量分为局部变量,形式参数和全局变量。如图所示,变量 z 在函数外外部进行声明,为全局变量。全局变量,顾名思义该变量可以被程序中所有函数使用。在运行过程中,无论执行哪个函数都会保留全局变量的值。在 CCS 默认的 cmd 配置文件中,全局变量分配在内存 RAM 空间。相对于在函数外定义的全局变量,局部变量则是指在函数内部定义的变量,例如图中的整型 a 和 b,和全局变量不同的是,局部变量只能被当前函数使用,且只有在函数调用时局部变量才会生成,同时当函数调用完成后,该变量空间也被释放,直至函数再次调用,改变量才会重新生成,重新赋值。还有一种变量类型为形式参数,如图中定义的子函数 add,括号中的整型数 x 和y 为形参,在 add 子函数中不需要对 x 和 y 进行声明就可以直接使用。4.2.3.变量存储类型变量存储类型 Static 静态变量 在前文中提到局部变量只有在函数内有效,在离开函数时,内存空间被释放,变量值也会清除,待到再次进入函数时重新生成变量,执行变量的赋值。而 static 静态变量和一般的局部变量的差别在于,在离开函数时,静态变量的当前值会被保留,可在下次进入函数时使用。下图中给出了两段程序,定义 add()子函数,实现的是整型 a 的累加,可以通过全局变量 z 来观察程序的运行状况。两段代码的差别在于右边将 add 子函数中的变量a 定义为静态变量。通过断点调试,观察到 z 的变化分别如图所示。很容易理解这样的结果产生的原因:在调用完 add 函数后,局部变量 a 的空间被释放,在再次进入 add 函数时,重新生成变量 a,并初始化为 1,所以 z 的值总是 2。而将 a 定义为静态变量后,初次调用add 后,a 的值变为 2,根据静态变量的定义,此时 a 的值会被保留,当再次调用 add 函数时,a 不会被再次初始化而是使用上次的值 2,所以会观察到 z 的值依次递增。extern 外部变量 在未作特殊说明的情况下,在某个文件下定义的变量只能被当前文件,甚至是特定函数(局部变量)所使用,这样当工程中包含多个文件时,变量无法被所有文件使用。而extern 变量则解决了不同文件之间变量的调用问题。将变量声明为 extern 型,则该变量不仅可以在当前文件中使用,同时也可以被工程中其他文件中的函数调用。如图所示,file1和 file2 为同一工程中的两个源文件,file1 中定义了变量 z,在 file2.c 中通过语句 extern int z,使得 file1 中的 z 变量同样可以在 file2 中使用。4.2.4.运算符运算符 MSP430 编程中使用的运算符和其他 C 语言中使用的类似,但是在 MSP430 编程学习中会经常看到逻辑运算符和按位运算符,尤其是在对寄存器进行配置的时候。在这里对这些运算符进行简要的阐述和说明。操作符 说明&逻辑与|逻辑或!逻辑非 位操作&逻辑与|逻辑或 逻辑异或 右移 左移 逻辑与和逻辑或比较容易理解,逻辑分为逻辑 0 和逻辑 1,其中逻辑 1 可以是任何非 0的值。与逻辑 0 相与的结果都为逻辑 0,与逻辑 1 相与则保持不变;与逻辑 0 相或保持不变,与逻辑 1 相与则结果都为 1。注意到表格中逻辑与和逻辑或分别都有两种,其中单个符号的为按位操作,返回值为按位逻辑运算后的结果,而两个符号的逻辑运算的返回值只有逻辑 0 和逻辑 1 两种,例如:5&8 5&8 因为 5 和 8 都为逻辑 1,所以返回值为逻辑1,即真值 需按位进行与操作:0101&1000,结果为0000 或运算与之相似。一般来说逻辑与(&),逻辑或(|)和逻辑非(!)在判断语句中比较常见,作为 ifelse或 while()语句的判断条件出现,而按位操作在 MSP430编程中常出现在寄存器的配置或数字计算中。如图示例程序所示,对通用 IO 口的输出值(PxOUT)进行配置,右图为头文件中对BIT0 和 BIT1 的定义。上图中给出了三种对寄存器赋值的方法,都可以实现对寄存器的赋值。第一种,通过按位或操作,P1OUT 被配置为(0 x0001|0 x0002),这是 16 位的写法,转为 2 进制后,后 8 位为 0000 0011,即 P1OUT 寄存器的最后两位被置 1,也就是说将 P1.1 和 P1.0 的输出置为高电平。其实在过程中会发现这段代码等效于:P1OUT=0 x0003;上述代码虽然可以实现同样的功能,但显然相比较于用按位或操作的书写方式,后者的可读性较强。在 MSP430 的寄存器配置中经常会看到如图第二种所示的配置方法,这种方法也是在 MSP430 编程中比较推荐的。P2OUT|=BIT0;等同于 P2OUT=P2OUT|BIT0;我们知道“|”操作不改变原先的值,这样和对寄存器直接赋值一个最大的差别在于保留了该寄存器内原来的值,也就是说在赋新值的同时不影响寄存器之前的状态。单片机在初始化的时候寄存器也会有不同的初始化值,大多数情况下在不使用的时候无需对寄存器初始值进行更改,而直接赋值的方法其实是对寄存器的所有位,无论是否使用到都进行的了重新定义,如果对寄存器其他位没有考虑全面的话,可能会造成不良的影响,所以建议在进行寄存器配置的时候尽量使用第二种方式。此外,有时会看到第三种方式,乍一看会困惑于代码中的“+”,其实在明白 BIT0 和 BIT1 真正代表的数值含义后很容易理解第三种用“+”取代“|”的道理所在。逻辑异或()比较常见于依赖前次状态的状态改变,比如说 LED 闪烁,LED 闪烁的实现其实是不断变换电平的高低状态,如果前次为高则改为低,相反如果前次为低则改为高。这种情况下就可以用逻辑异或()来实现:While(1)PxOUT=BIT0;_delay();该段代码简单地实现了 P1.0 端口高低电平的改变,当 P1.0 与一个 LED 相连,即实现了LED 的闪烁。可以通过下面的表格更为清晰地观察是如何利用逻辑异或()简单地实现上述功能,不妨假设 PxOUT 寄存器 8 位初始值为 0100 1110:执行次数 PxOUT BIT0 0 0100 1110 0000 0001 1 0100 1111 0000 0001 2 0100 1110 0000 0001 从表格中很清楚地看到,合理地使用逻辑异或可以很容易地实现某特定位的状态改变,同时不影响其他位的状态。左移()操作则比较多地用于数值计算。对于这两个操作从数值上理解为:x=xn;等价于 x=x/2n;右移 n 位,相当于除以以 2 的 n 次方。移位操作是基于位操作进行的,所以移位操作不限于进行数值计算,巧妙地应用移位操作可以进行一些基于判断的循环操作。5.CCS MSP430 工程结构解析工程结构解析 在 CCS 使用指南一章中对如何在 CCS 中新建一个工程做了详细的介绍,这里就一个完整的 MSP430 工程中包含的文件的作用做简单的介绍和说明。如图所示,从 CCS 窗口左侧的 Explorer 导航栏中观察工程,发现工程中的文件分为 4种,由上至下分别为 1.Includes;2.Cmd 配置文件;3.源文件;4.Ccxml 配置文件。图 5.1 CCS 标准工程组成 5.1.includes 在该目录下包含了用户设置的头文件路径下的所有头文件,如图所示为 CCS 默认的两个头文件路径,分别为 MSP430 的头文件和 C 语言相关的头文件。前者提供了不同型号的MSP430

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开