MSP430系列微控制器的时钟模块3A0629142407Word文件下载.docx
《MSP430系列微控制器的时钟模块3A0629142407Word文件下载.docx》由会员分享,可在线阅读,更多相关《MSP430系列微控制器的时钟模块3A0629142407Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
同样,这些问题也可以通过对相关寄存器进行设置就能够实现。
进一步讲,具有冯•诺依曼结构计算机的工作可以理解为从某个地址读取指令,或者将计算结果送往某个地址。
CPU对MSP430系列微控制器内部功能模块的控制也可以理解为向它写入数据,或者从其读取数据。
为了区别通常的程序存储器和数据存储器的访问,把对这些芯片内部功能模块的访问称作为对寄存器的访问。
CPU通过向相应的寄存器写入数据控制对应的芯片内部功能模块的工作,从相应的寄存器读出数据获得对应的芯片内部功能模块的工作结果。
配置系统时钟涉及状态寄存器(SR)、中断使能寄存器1(IE1)、中断标志寄存器1(IFG1)、数控振荡器(DCO)控制寄存器(DCOCTL)、系统时钟控制寄存器1(BCSCTL1)、系统时钟控制寄存器2(BCSCTL2)和系统时钟控制寄存器3(BCSCTL3)。
这里状态寄存器(SR)、中断使能寄存器1(IE1)和中断标志寄存器1(IFG1)不属于时钟系统模块,但是它们的一些内容影响到时钟系统模块的工作。
下面的寄存器介绍内容包括寄存器中每一位的位地址、位名称、操作方式、复位值以及每一位的功用。
操作方式表示对位可以进行读和写操作,或者仅能进行读操作,或者仅能进行写操作。
对仅能进行写操作的位进行读操作将获得一个随机数。
对仅能进行读操作的位进行写操作不起作用,也有可能产生不可预见的事情,因此应该尽量避免。
复位的目的是使得微控制器从一种约定的工作状态下开始工作。
复位值就是复位动作对寄存器初始状态的指定值,即对MSP430系列微控制器的各种外围模块初始工作状态的指定。
对寄存器的复位值应当给予足够地重视,这些数值对外围模块的工作设置具有很大的影响。
经常需要改变寄存器中某一位的状态,但是MSP430系列微控制器不支持位寻址,即不能对位直接进行操作,本节将介绍利用逻辑运算实现位寻址。
状态寄存器(SR)
位
15〜9
8
7
6
5
4
3
2
1
位名称
Reserved
V
SCG1
SCG0
OSCOF
F
CPUOF
G
IE
N
Z
C
操作方式
rw
r
w
复位值
000000
状态寄存器(SR)是属于CPU的一个寄存器,这个寄存器的一些数据位影响到MSP430微控制器系统时钟模块的工作状态。
状态寄存器中与时钟系统相关的位包括SCG1、SCG0、OSCOFF和CPUOFF。
这里只讨论这些位的功能。
SCG1:
系统时钟控制位1
0SMCLK开启
1SMCLK关闭
SCG0:
系统时钟控制位0
0DCO开启
1DCO关闭
OSCOFF:
晶体振荡器工作控制位
0LFXT1晶体振荡器开启
1LFXT1晶体振荡器关闭
CPUOFF:
CPU工作控制位
0CPU开启
1CPU关闭
中断使能寄存器1(IE1)
位名称
UT
XIE0
UR
AC
CVIE
MIIE
Reserved
OFI
E
W
DTIE
操作
方式
复位值
00
中断使能寄存器1(IE1)的位OFIE影响到MSP430微控制器的系统时钟模块的工作状
^态。
OFIE:
晶体振荡器出错中断使能位
0不使能
1使能
“使能”的功用相当于一个开关。
当处于使能状态时,该使能对应的电路功用将被激
活;
当处于不使能状态时,该使能对应的电路功用将被关闭,就像这个电路不存在一样。
中断标志寄存器1(IFG1)
32
位名
称
UTX
IFG0
URX
ACC
VIFG
NMI
IFG
Reser
ved
FG
WDT
IEFG
复位
值
中断标志寄存器1(IFG1)位OFIFG表征MSP430微控制器的系统时钟模块的工作状态。
这个寄存器与前面2个寄存器不同,它不是控制相关电路的工作,而仅是显示相关电路的工作状态。
OFIFG:
晶体振荡器出错中断标志位
0无中断产生
1有中断产生
MSP430微控制器加电时的复位信号会置位OFIFG。
在使能相应中断的情况下将引起中
断,因此必要时需要在用户程序中将位OFIFG清零。
数控振荡器(DCO)控制寄存器(DCOCTL)
DC
MO
名称
O2
O1
O0
D4
D3
D2
D1
D0
操作方式
复
位值
DCOx:
这里的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)
XT2
OFF
XT
S
DI
VA1
VA0
Rse
l3
l2
l1
l0
XT2OFF:
高频振荡器(XT2)开关控制
0高频振荡器(XT2)开
1高频振荡器(XT2)关
XTS:
低频振荡器(LFXT1)工作模式选择
0低频振荡器(LFXT1)低频模式
1低频振荡器(LFXT1)高频模式
DIVAx:
辅助时钟(ACLK)分频系数
Bit5Bit4
DIVA1DIVA0
001
012
104
118
这项功能的物理含义为在时钟信号传输的路径上插入了一个分频电路。
改变位DIVAx的数值将改变分频电路的分频系数,达到改变时钟信号频率的目的。
Reslx:
数控振荡器(DCO)内部电阻选择。
这里的x可以取0到3中的任意1个数,
获得16种不同阻值的电阻。
数控振荡器(DCO)属于RC振荡器,改变电阻的数值能够改变振荡器的工作频率。
系统时钟控制寄存器2(BCSCTL2)
SE
LM1
LM0
VM1
VM0
LS
VS1
VS0
OR
SELMx:
主时钟(MCLK)
的时钟源选择
Bit7
Bit6
SELM1
SELM0
数控振荡器(
DCO)
高频振荡器(
XT2)/当XT2不支持,为VLOCLK
低频振荡器(
LFXT1)/VLOCLK
MSP430系列微控制器包括多个子系列,MSP430x2xx属于这其中的一个。
MSP430G2231和MSP430F2619都属于MSP430x2xx子系列。
本书里所有寄存器的说明兼顾了MSP430x2xx子系列中的所有芯片。
DIVMx:
主时钟(MCLK)分频系数
DIVM1DIVM0
SELS:
子系统时钟(SMCLK)的时钟源选择
0数控振荡器(DCO)
1高频振荡器(XT2)
DIVSx:
子系统时钟(SMCLK)分频系数
Bit2
Bit1
DIVS1
DIVS0
DCOR:
0内部
1外部
DCO)电阻选择
数控振荡器(DCO)属于RC振荡器,改变电阻的数值能够改变振荡器的工作频率。
数控振荡器(DCO)既可以使用MSP430微控制器芯片内部的电阻,通过用户程序配置系统时钟控制寄存器1(BCSCTL1)中的位Reslx选择不同的内部电阻;
也可以使用指定管脚连接的外部电阻。
如果外部电阻采用电位器,调整电位器就能够连续地改变数控振荡器
(DCO)的工作频率。
系统时钟控制寄存器3(BCSCTL3)
2S1
2S0
LFX
T1S1
T1S0
X
CAP1
XC
AP0
2OF
T1OF
Bit7XT2S10
XT2S0
0.4〜1MHz晶体振荡器
1〜3MHz晶体振荡器
3〜16MHz晶体振荡器
0.4〜16MHz外部时钟源
XT2Sx:
XT2时钟范围选择
高频振荡器(XT2)需要一个外部晶体器件。
这个晶体器件的最高谐振频率为
16MHz。
根据具体使用晶体的谐振频率需要完成XT2Sx的设置。
最后一种选择为采用一个
完整的信号源,例如实验室的信号产生器,作为时钟源时的设置。
LFXT1Sx:
低频时钟源选择和LFXT1时钟范围选择(受XTS/BCSCTL1控制)
LFXT1S1LFXT1S0
XTS=0
00
01
32768Hz晶体在LFXT1保留
VLOCLK
外部时钟源
XTS=1
3〜16MHz晶体振荡器
0.4〜16MHz外部时钟源
XCAPx:
LFXT1晶体振荡器内部电容选择(仅适用于
XTS=0。
当XTS=1时,应选择
00)
Bit3Bit2
XCAP1XCAP0
001pF
016pF
1010pF
1112.5pF
XT2OF:
XT2时钟失效标志
LFXT1OF:
LFXT1时钟失效标志
0无
1有
注意,MSP430G2231芯片不支持高频振荡器(XT2),不支持低频振荡器(LFXT1)的高频模式。
数字控制振荡器(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所示。
□CO=0DC0=1DC0=2DC0=3DC0=4DC0=5DC0=6DC0=7
图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<
MSP430.h>
voidmain(void)
//包含名称定义的对应地址或数据的头函数
//主函数
{
WDTCTL=WDTPW+WDTHOLD;
//关闭看门狗
//P1.4管脚配置
P1SEL|=BIT4;
//位P1SEL.4置位,设置P1.4管脚为外
围功能管脚
P1DIR|=BIT4;
//位P1DIR.4置位,设置P1.4管脚为输出管脚
//DCO频率调整
BCSCTL1&
=~RSEL3;
//位RSEL3清零
=~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对频率的进一步的调整。
位寻址功能的实现
msp430g2231.h
图2.12的EmbeddedWorkbenchforMSP430开发软件工作窗口,在工作区“Workspace”的文件“Files”栏目中将自动出现选择好目标芯片对应头文件“msp430g2231.h”。
图2.27
CodeComposer™Studio开发软件的工作窗口,工程管理栏目“ProjectExplorer"
的"
Ineludes”中将包含MSP430系列微控制器的所有芯片对应的声明寄存器名称与地址对应关系、寄存器位名称与数值关系的头文件,例如这里的“msp430g2231.h”。
头文件“msp430g2231.h”的“STANDARDBITS”栏目的内容如下
#defineBIT0
(0x0001u)
#defineBIT1
#defineBIT2
#defineBIT3
#defineBIT4
#defineBIT5
#defineBIT6
#defineBIT7
#defineBIT8
#defineBIT9
#defineBITA
#defineBITB
#defineBITC
#defineBITD
#defineBITE
#defineBITF
这里定义了16个符号常量,
(0x0002u)
(0x0004u)
(0x0008u)
(0x0010u)
(0x0020u)
(0x0040u)
(0x0080u)
(0x0100u)
(0x0200u)
(0x0400u)
(0x0800u)
(0x1000u)
(0x2000u)
(0x4000u)
(0x8000u)
BIT0〜BITF。
这个部分内容存在于MSP430系列微控制器
所有芯片对应的头文件。
上面每一个符号常量代表一个16位数据,这个数据中只有1位为
1,其余的全部为0。
程序示例3.1实现数控振荡器(DCO)工作频率调整部分,即对相关寄存器的配置部分,也出现了一些符号常量。
它们也在头文件“msp430g2231.h”中被定义,位于头文件的
“BasicClockModule”栏目。
该栏目的部分内容如下
#defineDCOCTL_DEFC(DCOCTL#defineBCSCTL1_DEFC(BCSCTL1#defineBCSCTL2_DEFC(BCSCTL2#defineBCSCTL3_DEFC(BCSCTL3
(0x0056u)/*DCOClockFrequencyControl*/,DCOCTL_)
(0x00