MSP430系列微控制器的时钟模块_3.doc_第1页
MSP430系列微控制器的时钟模块_3.doc_第2页
MSP430系列微控制器的时钟模块_3.doc_第3页
MSP430系列微控制器的时钟模块_3.doc_第4页
MSP430系列微控制器的时钟模块_3.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章 MSP430系列微控制器的时钟系统目标通过本章的学习,应掌握以下知识 时钟的概念 时钟源的分类和特点 寄存器的概念 MSP430系列微控制器的时钟系统 位运算操作符 利用逻辑运算实现位寻址 自主工作的MSP430微控制器芯片 时钟信号的频率稳定度引言图2.8中的程序示例,led_8.c,只能通过硬件开发工具进行单步仿真来观察发光二极管的工作,不能将完成编辑、调试的程序下载到芯片使其自主运行,这是因为程序运行的速度太快。如果每次向并行数字输入/输出端口P1发送一次数据,然后等待一段时间,例如1s,这样将能够清楚地观察到发光二极管的显示情况。微控制器的工作是在一个被称为时钟的周期方波信号同步下进行的。每来一个这样的方波信号,微控制器执行一条指令。指令执行速度,即程序的执行速度,是与时钟频率成正比例的,因此如果希望利用编写程序,通过执行程序获得希望的时间延迟,那么需要首先知道系统的时钟频率。执行程序需要的时钟周期数量乘时钟周期的数值就获得时间延迟的具体值。本节将介绍MSP430系列芯片的时钟系统组成,工作过程。驱动时钟系统工作的振荡器具有多种类型,它们具有各自的特点。MSP430系列微控制器可以使用具有电路结构简单、工作频率容易调整的RC振荡器,也可以使用具有高频率稳定度的晶体振荡器。如图1.1所示,MSP430系列微控制器通过存储器地址总线(MAB)和数据总线(MDB)与程序存储模块、数据存储模块以及各种外部设备模块连接起来,并采用统一的CPU指令和寻址模式。各种外部设备模块在这里被等效为“寄存器”这样的一种特殊存储器。向寄存器写入数据能够实现对外部设备模块工作的控制,从寄存器读取数据能够获得外部设备模块的工作结果。3.1 MSP430系列微控制器的时钟系统3.1.1 MSP430x2xx系列芯片的时钟系统MSP430x2xx系列微控制器芯片的时钟系统方框图如图3.1所示。图3.1 MSP430系列芯片的时钟系统方框图MSP430x2xx系列芯片的时钟系统具有4种时钟信号源:内部数控振荡器(DCO)、内部低功耗振荡器(VLO)、低频振荡器(LFXT1)和高频振荡器(XT2)。这些时钟信号源被用来产生芯片内部使用的3种时钟信号:主时钟信号(MCLK)、子时钟信号(SMCLK)和辅助时钟信号(ACLK)。主时钟信号(MCLK)支持芯片CPU的工作,子时钟信号(SMCLK)和辅助时钟信号(ACLK)支持芯片内部外围模块的工作。数控振荡器(DCO)的工作可以不需要外部器件的支持,因此降低了电路的复杂程度,但是它的工作原理是基于RC振荡器,工作频率的稳定度不高。内部低功耗振荡器(VLO)提供12kHz固定的时钟信号。低频振荡器(LFXT1)和高频振荡器(XT2)都需要一个外部晶体谐振电路,但是具有较高的工作频率稳定度。采用2个晶体谐振电路的目的是能够让一个工作在较高的工作频率,另一个则工作在较低的工作频率。使用较高的工作频率可以使信号处理速度快;使用较低的工作频率可以降低芯片功耗。并不是每一种芯片都支持全部4种时钟信号源。例如MSP430G2231芯片不支持高频振荡器(XT2),也不支持低频振荡器(LFXT1)的高频模式。时钟系统能够通过向一些被称作为寄存器的等效存储单元写入数据来选择时钟信号源。时钟系统还具有一些能够改变时钟信号源频率的寄存器。3.1.2 时钟系统的相关寄存器MSP430系列微控制器芯片的管脚具有多种功能,通过对相关寄存器进行设置能够实现需要的功能。时钟系统也具有多种信号源,如何使用其中的一种?数控振荡器(DCO)的工作频率可以调整,如何进行调整?同样,这些问题也可以通过对相关寄存器进行设置就能够实现。进一步讲,具有冯诺依曼结构的计算机的工作可以理解为从某个地址读取指令,或者将计算结果送往某个地址。CPU对MSP430系列芯片内部功能模块的控制也可以理解为向它写入数据,或者从其读取数据。为了区别通常的程序存储器和数据存储器的访问,把对这些芯片内部功能模块的访问称作为对寄存器的访问。CPU通过向相应的寄存器写入数据控制对应的芯片内部功能模块的工作,从相应的寄存器读出数据获得对应的芯片内部功能模块的工作结果。配置系统时钟涉及状态寄存器(SR)、中断使能寄存器1(IE1)、中断标志寄存器1(IFG1)、数控振荡器(DCO)控制寄存器(DCOCTL)、系统时钟控制寄存器1(BCSCTL1)、系统时钟控制寄存器2(BCSCTL2)和系统时钟控制寄存器3(BCSCTL3)。这里状态寄存器(SR)、中断使能寄存器1(IE1)和中断标志寄存器1(IFG1)不属于时钟系统模块,但是它们的一些内容影响到时钟系统模块的工作。下面的寄存器介绍内容包括寄存器中每一位的位地址、位名称、操作方式、复位值以及每一位的功用。操作方式表示对位可以进行读和写操作,或者仅能进行读操作,或者仅能进行写操作。对仅能进行写操作的位进行读操作将获得一个随机数。对仅能进行读操作的位进行写操作不起作用,也有可能产生不可预见的事情,因此应该尽量避免。复位的目的是使得微控制器从一种约定的工作状态下开始工作。复位值就是复位动作对寄存器初始状态的指定值,即对MSP430系列微控制器的各种外围模块初始工作状态的指定。对寄存器的复位值应当给予足够地重视,这些数值对外围模块的工作设置具有很大的影响。经常需要改变寄存器中的一位的状态,但是MSP430系列微控制器不支持位寻址,即不能对位直接进行操作,本节将介绍利用逻辑运算实现位寻址。 状态寄存器(SR)位159876543210位名称ReservedVSCG1SCG0OSCOFFCPUOFFGIENZC操作方式rwrwrwrwrwrwrwrwrwrw复位值0000000000000000状态寄存器(SR)是属于CPU的一个寄存器,这个寄存器的一些数据位影响到MSP430微控制器系统时钟模块的工作状态。状态寄存器中与时钟系统相关的位包括SCG1、SCG0、OSCOFF和CPUOFF。这里只讨论这些位的功能。SCG1:系统时钟控制位10SMCLK开启1SMCLK关闭SCG0:系统时钟控制位00DCO开启1DCO关闭OSCOFF:晶体振荡器工作控制位0LFXT1晶体振荡器开启1LFXT1晶体振荡器关闭CPUOFF:CPU工作控制位0CPU开启1CPU关闭 中断使能寄存器1(IE1)位76543210位名称UTXIE0URXIE0ACCVIENMIIEReservedOFIEWDTIE操作方式rwrwrwrwrwrwrw复位值00000000中断使能寄存器1(IE1)的位OFIE影响到MSP430微控制器的系统时钟模块的工作状态。OFIE:晶体振荡器出错中断使能位0不使能1使能 “使能”的功用相当于一个开关。当处于使能状态时,该使能对应的电路功用将被激活;当处于不使能状态时,该使能对应的电路功用将被关闭,就像这个电路不存在一样。 中断标志寄存器1(IFG1)位76543210位名称UTXIFG0URXIFG0ACCVIFGNMIIFGReservedOFIFGWDTIEFG操作方式rwrwrwrwrwrwrw复位值00000010中断标志寄存器1(IFG1)位OFIFG表征MSP430微控制器的系统时钟模块的工作状态。这个寄存器与前面2个寄存器不同,它不是控制相关电路的工作,而仅是显示相关电路的工作状态。OFIFG:晶体振荡器出错中断标志位0无中断产生1有中断产生MSP430微控制器加电时的复位信号能够置位OFIFG。在使能相应中断的情况下将引起中断,因此需要在用户程序中将位OFIFG清零。 数控振荡器(DCO)控制寄存器(DCOCTL)位76543210位名称DCO2DCO1DCO0MOD4MOD3MOD2MOD1MOD0操作方式rwrwrwrwrwrwrwrw复位值01100000DCOx:这里的x可以取0、1或者2。这3位用来在系统时钟控制寄存器1(BCSCTL1)的位Rselx选定的频率范围内,选择数控振荡器(DCO)的8个工作频率之一。MODx:这里的x可以取0到4中的任意1个数。这5位用来微调数控振荡器(DCO)的工作频率,但当DCO=7时,即DCOx的3位全为1,该功能无效。MSP430微控制器中的数控振荡器(DCO)是该系列器件的特色之一。使用这个振荡器作为时钟信号源将不需要添加任何外部器件,同时这个时钟信号源的工作频率还能够通过用户程序进行调整。 系统时钟控制寄存器1(BCSCTL1)位76543210位名称XT2OFFXTSDIVA1DIVA0Rsel3Rsel2Rsel1Rsel0操作方式rwrwrwrwrwrwrwrw复位值10000111XT2OFF:高频振荡器(XT2)开关控制 0高频振荡器(XT2)开 1 高频振荡器(XT2)关XTS:低频振荡器(LFXT1)工作模式选择 0低频振荡器(LFXT1)低频模式 1低频振荡器(LFXT1)高频模式 DIVAx:辅助时钟(ACLK)分频系数Bit5Bit4DIVA1DIVA0001012104118这项功能的物理含义为在时钟信号传输的路径上插入了一个分频电路。改变位DIVAx的数值将改变分频电路的分频系数,达到改变时钟信号频率的目的。Reslx:数控振荡器(DCO)内部电阻选择。这里的x可以取0到3中的任意1个数,获得16种不同阻值的电阻。数控振荡器(DCO)属于RC振荡器,改变电阻的数值能够改变振荡器的工作频率。 系统时钟控制寄存器2(BCSCTL2)位76543210位名称SELM1SELM0DIVM1DIVM0SELSDIVS1DIVS0DCOR操作方式rwrwrwrwrwrwrwrw复位值00000000SELMx:主时钟(MCLK)的时钟源选择Bit7Bit6SELM1SELM000数控振荡器(DCO)01数控振荡器(DCO)10高频振荡器(XT2)/ 当XT2不支持,为VLOCLK11低频振荡器(LFXT1)/ VLOCLKMSP430系列微控制器包括多个子系列,MSP430x2xx属于这其中的一个。MSP430G2231和MSP430F2619都属于MSP430x2xx子系列。本书里所有寄存器的说明兼顾了MSP430x2xx子系列中的所有芯片。DIVMx:主时钟(MCLK)分频系数Bit5Bit4DIVM1DIVM0001012104118SELS:子系统时钟(SMCLK)的时钟源选择0数控振荡器(DCO)1高频振荡器(XT2)DIVSx:子系统时钟(SMCLK)分频系数Bit2Bit1DIVS1DIVS0001012104118DCOR:数控振荡器(DCO)电阻选择0内部1外部数控振荡器(DCO)属于RC振荡器,改变电阻的数值能够改变振荡器的工作频率。数控振荡器(DCO)即可以使用MSP430微控制器芯片内部的电阻,通过用户程序配置系统时钟控制寄存器1(BCSCTL1)中的位Reslx选择不同的内部电阻;也可以使用指定管脚连接的外部电阻。如果外部电阻采用电位器,调整电位器就能够连续地改变数控振荡器(DCO)的工作频率。 系统时钟控制寄存器3(BCSCTL3)位76543210位名称XT2S1XT2S0LFXT1S1LFXT1S0XCAP1XCAP0XT2OFLFXT1OF操作方式rwrwrwrwrwrwrwrw复位值00000101XT2Sx:XT2时钟范围选择Bit7Bit6XT2S1XT2S0000.41MHz晶体振荡器0113MHz晶体振荡器10316MHz晶体振荡器110.416MHz外部时钟源 高频振荡器(XT2)需要一个外部晶体器件。这个晶体器件的最高谐振频率为16MHz。根据具体使用晶体的谐振频率需要完成XT2Sx的设置。最后一种选择为采用一个完整的信号源,例如实验室的信号产生器,作为时钟源时的设置。LFXT1Sx:低频时钟源选择和LFXT1时钟范围选择(受XTS/BCSCTL1控制)Bit5Bit4LFXT1S 1LFXT1S 0XTS=00032768Hz晶体在LFXT101保留10VLOCLK11外部时钟源XTS=1000.41MHz晶体振荡器0113MHz晶体振荡器10316MHz晶体振荡器110.416MHz外部时钟源XCAPx:LFXT1晶体振荡器内部电容选择(仅适用于XTS=0。当XTS=1时,应选择00)Bit3Bit2XCAP1XCAP0001pF016pF1010pF1112.5pFXT2OF:XT2时钟失效标志0无1有LFXT1OF:LFXT1时钟失效标志0无1有注意,MSP430G2231芯片不支持高频振荡器(XT2),不支持低频振荡器(LFXT1)的高频模式。3.2 数字控制振荡器(DCO)频率的测量MSP430系列微控制器复位以后,主时钟信号(MCLK)和子时钟信号(SMCLK)的驱动信号都默认采用数字控制振荡器(DCO),分频系数默认1,因此这2个时钟信号的频率就是数字控制振荡器(DCO)的工作频率。图1.2所示的MSP430G2231芯片管脚排列图显示管脚6,即并行输入/输出端口P1的管脚P1.4,也可以用做子时钟信号(SMCLK)的输出管脚,这样通过测量该管脚输出信号的频率就能够获得数字控制振荡器(DCO)的工作频率。MSP430F2619芯片管脚16,同样为并行输入/输出端口P1的管脚P1.4,也同样是可以用做子时钟信号(SMCLK)的输出管脚。数字控制振荡器(DCO)的工作频率可以调整以满足具体工作的需要。频率的调整通过前面介绍的数控振荡器(DCO)控制寄存器(DCOCTL)和系统时钟控制寄存器1(BCSCTL1)的位Reslx来实现。数字控制振荡器(DCO)的工作频率与相关寄存器中控制位的关系如图3.2所示。图3.2 数字控制振荡器(DCO)的工作频率与相关寄存器中控制位的关系图图3.2显示系统时钟控制寄存器1(BCSCTL1)的位RSELx可以指定数字控制振荡器(DCO)工作于16个频率段的其中一个。数控振荡器(DCO)控制寄存器(DCOCTL)的位DCOx在指定段内的8个频率子段中选择一个。图中没有显示的数控振荡器(DCO)控制寄存器(DCOCTL)的位MODx在指定频率子段中实现的进一步的调整。MSP430系列微控制器中每一种芯片的数据手册都给出在一定工作电压和环境温度情况下,一些寄存器内容对应的工作频率,但是需要注意数控振荡器(DCO)属于RC振荡器,它的工作频率受工作电压、环境温度等很多因素的影响。数据手册中给出的数控振荡器(DCO)的工作频率仅供参考。在完成应用系统的硬件电路设计以后,采用实际测量的数控振荡器(DCO)工作频率数值,再给予合适的调整将使得系统工作得更精确。程序示例3.1用来实现数控振荡器(DCO)工作频率的调整。通过测量实际的工作频率就可以确定控制数控振荡器(DCO)工作频率的相关寄存器的具体取值。程序示例3.1/ 程序名称:sysclk_dco/ 程序功能:SMCLK 使用 DCO,分频比 1,使用管脚 SMCLK 输出时钟信号#include / 包含名称定义的对应地址或数据的头函数int main(void) / 主函数 WDTCTL=WDTPW+WDTHOLD; / 关闭看门狗/ P1.4 管脚配置 P1SEL|=BIT4; / 位 P1SEL.4 置位,设置 P1.4 管脚为外围功能管脚 P1DIR|=BIT4; / 位 P1DIR.4 置位,设置 P1.4 管脚为输出管脚/ DCO 频率调整 BCSCTL1&=RSEL3; / 位 RSEL3 清零 BCSCTL1&=RSEL2; / 位 RSEL2 清零 BCSCTL1|=RSEL1; / 位 RSEL1 置位 BCSCTL1|=RSEL0; / 位 RSEL0 置位 DCOCTL&=DCO2; / 位 DCO2 清零 DCOCTL|=DCO1; / 位 DCO1 置位 DCOCTL|=DCO0; / 位 DCO0 置位 while(1) / 重复执行 程序示例3.1中首先完成输出频率与数字控制振荡器(DCO)的工作频率一样的子时钟信号(SMCLK)输出管脚的配置,然后完成确定数字控制振荡器(DCO)的工作频率相关寄存器的设置。MSP430系列芯片的时钟模块属于它的外围模块之一。外围模块的工作不需要CPU进行全程控制,一旦完成对这些外围模块的配置,它们将独立工作。程序示例3.1中在完成数字控制振荡器(DCO)的工作频率相关寄存器的设置以后,程序就进入while(1) / 重复执行 在这个程序段中,CPU什么都不做,但是这时MSP430系列芯片的时钟模块一直工作,使得子时钟信号(SMCLK)输出管脚,P1.4,一直输出子时钟信号(SMCLK),这个信号的频率等于数字控制振荡器(DCO)的工作频率。修改数字控制振荡器(DCO)的工作频率相关寄存器的内容将可以调整它的工作频率。程序示例3.1没有涉及到利用位MODx对频率的进一步的调整。3.3 位寻址功能的实现3.3.1 msp430g2231.h在工程中选择好目标芯片,并完成一次源文件的编译,在工作区“Workspace”的文件“Files”栏目中将自动出现包含定义目标芯片寄存器名称的头文件。例如这里选择目标芯片为MSP430G2231,将自动包含头文件“msp430g2231.h”。头文件“msp430g2231.h”的“STANDARD BITS”栏目的内容如下#define BIT0 (0x0001u)#define BIT1 (0x0002u)#define BIT2 (0x0004u)#define BIT3 (0x0008u)#define BIT4 (0x0010u)#define BIT5 (0x0020u)#define BIT6 (0x0040u)#define BIT7 (0x0080u)#define BIT8 (0x0100u)#define BIT9 (0x0200u)#define BITA (0x0400u)#define BITB (0x0800u)#define BITC (0x1000u)#define BITD (0x2000u)#define BITE (0x4000u)#define BITF (0x8000u)这里定义了16个符号常量,BIT0BITF。这个部分内容存在于MSP430系列芯片中所有芯片对应的头文件。上面每一个符号常量代表一个16位数据,这个数据中只有1位为1,其余的全部为0。程序示例3.1实现数控振荡器(DCO)工作频率调整部分,即对相关寄存器的配置部分,也出现了一些符号常量。它们也在头文件“msp430g2231.h”中被定义,位于头文件的“Basic Clock Module” 栏目。该栏目的部分内容如下#define DCOCTL_ (0x0056u) /* DCO Clock Frequency Control */DEFC( DCOCTL , DCOCTL_)#define BCSCTL1_ (0x0057u) /* Basic Clock System Control 1 */DEFC( BCSCTL1 , BCSCTL1_)#define BCSCTL2_ (0x0058u) /* Basic Clock System Control 2 */DEFC( BCSCTL2 , BCSCTL2_)#define BCSCTL3_ (0x0053u) /* Basic Clock System Control 3 */DEFC( BCSCTL3 , BCSCTL3_)#define MOD0 (0x01) /* Modulation Bit 0 */#define MOD1 (0x02) /* Modulation Bit 1 */#define MOD2 (0x04) /* Modulation Bit 2 */#define MOD3 (0x08) /* Modulation Bit 3 */#define MOD4 (0x10) /* Modulation Bit 4 */#define DCO0 (0x20) /* DCO Select Bit 0 */#define DCO1 (0x40) /* DCO Select Bit 1 */#define DCO2 (0x80) /* DCO Select Bit 2 */上面内容的第一段定义了MSP430系列芯片时钟系统的相关寄存器名称和地址之间的联系,第二段定义了数控振荡器(DCO)控制寄存器(DCOCTL)中每1位的名称和对应数值之间的关系。在程序中使用这些符号常量比使用地址,或者数据,阅读起来直观,而且物理意义明显。统一这些寄存器名称和寄存器内包含的位名称便于互相交流。建议在程序编辑中使用这些名称,不要使用地址和数据。3.3.2 利用逻辑位运算实现位寻址功能程序示例3.1希望使用管脚P1.4输出子时钟信号SMCLK,在这个时钟信号是由数字控制振荡器(DCO)直接驱动时,通过测量子时钟信号SMCLK的频率就能够获得数字控制振荡器(DCO)的工作频率。使用管脚P1.4输出子时钟信号SMCLK,需要对管脚进行相关的配置,语句 P1SEL|=BIT4; / 位 P1SEL.4 置位,设置 P1.4 管脚为外围功能管脚 P1DIR|=BIT4; / 位 P1DIR.4 置位,设置 P1.4 管脚为输出口实现管脚P1.4用作外围模块管脚、输出方向的配置。这里实现管脚配置的方法与图2.8中程序示例采用的方法不同。采取不同方法的原因是图2.8中的程序示例希望将P1端口的所有管脚配置为同样的功能,这里只希望对管脚P1.4进行配置,而且还不希望影响P1端口的其它管脚的配置状态。MSP430系列芯片不支持位寻址,因此不能只对某一个独立的数据位进行操作。现在需要采用字节寻址的方法对字节中的某一位进行操作,同时不影响其它位的状态。程序示例3.1就介绍了这种方法。采用字节寻址实现位寻址需要使用与、或、非三种逻辑运算。Embedded Workbench for MSP430开发软件中,与运算操作符为“&”,与运算表达式和运算结果的一个例子为0b10101010 & 0b11110000 = 0b10100000表达式中数据前缀“0b”表示数据为2进制格式,数据前缀“0x”表示数据为16进制格式,10进制的数据不用添加前缀。运算结果显示,任意数据位和“1”进行“与”运算,它的数值将保持不变;任意数据位和“0”进行“与”运算,它的数值将为0。如果希望将一个字节中的某一位清零,同时保持这个字节中的其它位数值不变,这样只需将这个字节和一个特定的数进行“与”运算,这个数对应于希望为0的位取“0”,其它位“全部取1”。或运算操作符为“|”,或运算表达式和运算结果的一个例子为0b10101010 | 0b11110000 = 0b11111010运算结果显示,任意数据位和“1”进行“或”运算,它的数值将为1;任意数据位和“0”进行“或”运算,它的数值将保持不变。如果希望将一个字节中的某一位置位,同时保持这个字节中的其它位数值不变,这样只需将这个字节和一个特定的数进行“或”运算,这个数对应于希望为1的位取“1”,其它位“全部取0”。非运算操作符为“”,非运算表达式和运算结果的一个例子为0b11110000 = 0b00001111运算结果显示,“非”运算使得每位的状态取反。非运算操作符“”为单目操作符,它只需要1个操作数。与运算操作符“&”和或运算操作符“|”都为双目操作符,它们都需要2个操作数。程序示例3.1使用与、或、非三种逻辑运算,使用字节寻址来实现等效的位寻址,即处理一个数据中的一个指定的位。它的内容包括清“0”一个指定位,或者置“1”一个指定位。语句DCOCTL&=DCO2; / 位 DCO2 清零实现将数控振荡器(DCO)控制寄存器(DCOCTL)中最高位清0,但是维持其它位不变。符号常量DCO2的内容为“0b10000000”,只有最高位为1,其它为0。执行这条语句首先对这个数据进行“非”运算,使得数据转换为“0b01111111”,只有最高位为0,其它为1。接着将这个只有最高位为0的数据与寄存器DCOCTL的内容进行“与”运算,实现最高位清0,维持其它位不变。语句DCOCTL|=DCO1; / 位 DCO1 置位实现将数控振荡器(DCO)控制寄存器(DCOCTL)中次高位置1,但是维持其它位不变。符号常量DCO1的内容为“0b01000000”,只有次高位为1,其它为0。执行这条语句将这个只有次高位为1,其它为0的数据与寄存器DCOCTL的内容进行“或”运算,实现次高位置1,维持其它位不变。3.4 程序下载Embedded Workbench for MSP430开发软件不仅支持C语言源程序的编辑、编译、模拟调试和仿真调试,而且还可以完成程序代码向目标芯片的下载。向目标芯片的下载指令代码也被称作为芯片编程。实际上,C语言源程序的仿真调试名称“FET Debugger”中FET是Flash Emulation Tool的缩写,表示这时执行的指令为MSP430芯片内部程序存储器(Flash)中存储的内容。这也就是说,在进行仿真调试之前,MSP430微控制器芯片已经被下载了指令代码。在完成仿真调试所要求的源程序编译条件选择,在工作窗口,用菜单“Project Download and debug”,或者使用工作窗口中的符号,就可以进入“FET Debugger”调试环境,同时完成向目标芯片的代码下载。然后用菜单“Debug Stop Debugging”,或者使用工作窗口中的符号,关闭“FET Debugger”调试环境。接着通过使MSP430微控制器芯片断电,再次对MSP430微控制器芯片加电,这样MSP430微控制器芯片将自动地在下载到芯片内部程序存储器(Flash)中指令代码的控制下工作。使MSP430微控制器芯片断电,再次对MSP430微控制器芯片加电的目的是完成芯片的复位。如果电路板上具有复位按键,也可以通过这个按键在关闭“FET Debugger”调试环境以后使MSP430微控制器芯片自动地执行内部程序存储器(Flash)中的指令代码。例如德州仪器(TI)公司提供给高校的LaunchPad(MSP-ESP430G2)电路板上就具有复位按键。当复位按键按下时,将使MSP430微控制器芯片的复位管脚接地。在MSP430微控制器芯片加电情况下,复位管脚的低电平就可以使芯片进入复位状态。程序示例3.1可以被下载到MSP430微控制器芯片中去自主运行。使用示波器可以观察到由子时钟信号(SMCLK)输出管脚输出的方波信号。程序示例3.1即可以被下载到MSP430G2231芯片,也可以被下载到MSP430F2619芯片。3.5 高频振荡器(XT2)频率的测量MSP430F2619微控制器芯片的时钟模块支持高频振荡器(XT2)信号源。这个信号源是一个晶体振荡器,需要添加的外部晶体谐振电路如图3.3所示。图3. 3 XT2谐振电路图图中晶体Cry1的谐振频率的选择范围为0.416MHz。电容C1和C2的推荐值为15pF。谐振电路应尽量靠近MSP430F2619微控制器芯片的管脚XT2IN和XT2OUT。使用时钟SMCLK管脚测量高频振荡器(XT2)信号源工作频率的程序示例如下。这个程序示例可以用于所有支持高频振荡器(XT2)的MSP430x2xx系列芯片。程序示例3.2/ 程序名称:sysclk_xt2/ 程序功能:SMCLK 使用 XT2,分频比 1,使用管脚 SMCLK 输出 时钟信号#include / 包含名称定义的对应地址或数据的头函数void int_clkxt2(void); / 声明系统时钟 XT2 初始化函数int main(void) / 主函数 WDTCTL=WDTPW+WDTHOLD; / 关闭看门狗 P1SEL|=BIT4; / 设置 P1.4 管脚为外围模块管脚 P1DIR|=BIT4; / 设置 P1.4 管脚为输出方向 int_clkxt2( ); / 系统时钟 XT2 初始化 while(1) / 重复执行 void int_clkxt2(void) / 系统时钟XT2初始化函数 BCSCTL1&=XT2OFF; / 开启 XT2 / XT1 工作在低频模式 / ACLK 分频比 1 BCSCTL2|=SELM1; / 选择 MCLK 时钟源为 XT2CLK,分频比 1 BCSCTL2&=SELM0; / MCLK 分频比 1 BCSCTL2|=SELS; / 选择 SMCLK 时钟源为 XT2CLK,分频比 1 / SMCLK 分频比 1 BCSCTL3|=XT2S1; / 选择 XT2 时钟源频率范围为 3-16MHz BCSCTL3&=XT2S0;函数int_clkxt2()可以被用于所有支持高频振荡器(XT2)信号源的MSP430微控制器芯片,在该芯片准备使用高频振荡器(XT2)信号源作为时钟模块的时钟源的情况下,对高频振荡器(XT2)信号源进行设置。在前面描述时钟模块相关寄存器部分指出,MSP430微控制器加电时的复位信号能够置位中断标志寄存器1(IFG1)的位OFIFG。该位的置位,在使能相应中断的情况下将引起中断,因此需要在用户程序中,将位OFIFG清零。在函数int_clkxt2()添加清零位OFIFG的部分将提高该函数的适应性。void int_clkxt2(void) / 系统时钟XT2初始化函数 BCSCTL1&=XT2OFF; / 开启 XT2 / XT1 工作在低频模式 / ACLK 分频比 1 BCSCTL2|=SELM1; / 选择 MCLK 时钟源为 XT2CLK,分频比 1 BCSCTL2&=SELM0; / MCLK 分频比 1 BCSCTL2|=SELS; / 选择 SMCLK 时钟源为 XT2CLK,分频比 1 / SMCLK 分频比 1 BCSCTL3|=XT2S1; / 选择 XT2 时钟源频率范围为 3-16MHz BCSCTL3&=XT2S0; do IFG1&=OFIFG; / 清除振荡器错误标志_NOP( ); / 产生一个 MSP430 系统时钟周期的延时 while(IFG1 & OFIFG)!=0); / 如果标志为 1,继续等待 函数中采用DOWHILE结构的循环语句确保标志OFIFG清除,即首先进行清除标志OFIFG,然后进行检测,如果没有清除,再次清除标志OFIFG,直到完成。循环语句中调用函数_NOP( ); / 产生一个 MSP430 系统时钟周期的延时这个函数是属于Embedded Workbench for MSP430开发软件提供的一个函数,它可以直接使用,不用进行任何声明。执行这个函数的目的为花费1个CPU时钟MCLK周期的时间,即引入1个CPU时钟MCLK周期的时间等待。这里使用这个函数是考虑硬件电路的工作需要时间,因此先清除标志OFIFG,然后等一下再检测工作结果。3.6 时钟源DCO和XT2工作频率的对比将MSP430微控制器芯片的子时钟信号(SMCLK)输出管脚配置为输出时钟信号SMCLK功能,选择时钟信号SMCLK的驱动信号源为数字控制振荡器(DCO),或者高频振荡器(XT2),这样测量SMCLK输出管脚的信号就可以获得上述驱动信号源的工作情况。现在实验室的很多数字示波器都具有测量信号频率的功用。例如在高校实验室中广泛使用的Tektronix TDS1012示波器,测量显示值具有6位有效数字。使用德州仪器(TI)公司提供给

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论