MSP430系列微控制器的时钟模块3A0629142407.docx
《MSP430系列微控制器的时钟模块3A0629142407.docx》由会员分享,可在线阅读,更多相关《MSP430系列微控制器的时钟模块3A0629142407.docx(24页珍藏版)》请在冰豆网上搜索。
MSP430系列微控制器的时钟模块3A0629142407
第3章MSP430系列微控制器的时钟系统
目标
通过本章的学习,应掌握以下知识时钟的概念
时钟源的分类和特点寄存器的概念
MSP430系列微控制器的时钟系统位运算操作符利用逻辑运算实现位寻址自主工作的MSP430微控制器芯片时钟信号的频率稳定度
引言
图2.8的程序示例led_8.c和图2.28中的程序示例main.c只能通过硬件开发工具进行单步仿真来观察发光二极管的工作,不能将完成编辑、调试的程序下载到芯片使其自主运行,这是因为程序运行的速度太快。
如果每次向并行数字输入/输出端口P1发送一次数据,插
入一段等待时间,例如1s,这样将能够清楚地观察到发光二极管的显示情况。
微控制器的工作是在一个被称为时钟的周期方波信号同步下进行的。
每来一个这样的方波信号,微控制器执行一条指令。
指令执行速度,即程序的执行速度,是与时钟频率成正比例的,因此如果希望利用编写程序,通过执行程序获得希望的时间延迟,那么需要首先知道系统的时钟频率。
执行程序需要的时钟周期数量乘上时钟周期的数值就获得时间延迟的具体值。
本节将介绍MSP430系列微控制器的时钟系统组成和工作过程。
驱动时钟系统工作的振荡器具有多种类型,它们具有各自的特点。
MSP430系列微控制器可以使用具有电路结构简单、工作频率容易调整的RC可至10A-3振荡器,也可以使用具有高频率稳定度的晶体振荡器。
如图1.1所示,MSP430系列微控制器通过存储器地址总线(MAB)和数据总线(MDB)与程序存储模块、数据存储模块以及各种外围设备模块连接起来,并采用统一的CPU指令和寻址模式。
各种外围设备模块在这里被等效为“寄存器”这样的一种特殊存储器。
向寄
存器写入数据能够实现对外围设备模块工作的控制,从寄存器读取数据能够获得外围设备模块的工作结果。
MSP430系列微控制器的时钟系统
MSP430x2xx系列芯片的时钟系统
图3.1MSP430系列芯片的时钟系统方框图
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)的高频模式。
时钟系统能够通过向一些被称作为寄存器的等效存储单元写入数据来选择时钟信号源。
时钟系统还具有一些能够改变时钟信号源频率的寄存器。
时钟系统的相关寄存器
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)
位
15〜9
8
7
6
5
4
3
2
1
0
位名称
Reserved
V
SCG1
SCG0
OSCOF
F
CPUOF
F
G
IE
N
Z
C
操作方式
rw
rw
rw
rw
rw
rw
r
w
r
w
r
w
r
w
复位值
000000
0
0
0
0
0
0
0
0
0
0
状态寄存器(SR)是属于CPU的一个寄存器,这个寄存器的一些数据位影响到MSP430微控制器系统时钟模块的工作状态。
状态寄存器中与时钟系统相关的位包括SCG1、SCG0、OSCOFF和CPUOFF。
这里只讨论这些位的功能。
SCG1:
系统时钟控制位1
0SMCLK开启
1SMCLK关闭
SCG0:
系统时钟控制位0
0DCO开启
1DCO关闭
OSCOFF:
晶体振荡器工作控制位
0LFXT1晶体振荡器开启
1LFXT1晶体振荡器关闭
CPUOFF:
CPU工作控制位
0CPU开启
1CPU关闭
中断使能寄存器1(IE1)
位
7
6
5
4
3
2
1
0
位名称
UT
XIE0
UR
XIE0
AC
CVIE
N
MIIE
Reserved
OFI
E
W
DTIE
操作
方式
rw
rw
rw
rw
rw
rw
rw
复位值
0
0
0
0
00
0
0
中断使能寄存器1(IE1)的位OFIE影响到MSP430微控制器的系统时钟模块的工作状
^态。
OFIE:
晶体振荡器出错中断使能位
0不使能
1使能
“使能”的功用相当于一个开关。
当处于使能状态时,该使能对应的电路功用将被激
活;当处于不使能状态时,该使能对应的电路功用将被关闭,就像这个电路不存在一样。
中断标志寄存器1(IFG1)
位
7
6
5
4
32
1
1
0
位名
称
UTX
IFG0
URX
IFG0
ACC
VIFG
NMI
IFG
Reser
ved
FG
OFI
WDT
IEFG
操作
方式
rw
rw
rw
rw
rw
rw
rw
复位
值
0
0
0
0
00
1
0
中断标志寄存器1(IFG1)位OFIFG表征MSP430微控制器的系统时钟模块的工作状态。
这个寄存器与前面2个寄存器不同,它不是控制相关电路的工作,而仅是显示相关电路的工作状态。
OFIFG:
晶体振荡器出错中断标志位
0无中断产生
1有中断产生
MSP430微控制器加电时的复位信号会置位OFIFG。
在使能相应中断的情况下将引起中
断,因此必要时需要在用户程序中将位OFIFG清零。
数控振荡器(DCO)控制寄存器(DCOCTL)
位
7
6
5
4
3
2
1
0
位
DC
DC
DC
MO
MO
MO
MO
MO
名称
O2
O1
O0
D4
D3
D2
D1
D0
操作方式
rw
rw
rw
rw
rw
rw
rw
rw
复
0
1
1
0
0
0
0
0
位值
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)
位
7
6
5
4
3
2
1
0
位
名称
XT2
OFF
XT
S
DI
VA1
DI
VA0
Rse
l3
Rse
l2
Rse
l1
Rse
l0
操作方式
rw
rw
rw
rw
rw
rw
rw
rw
复
位值
1
0
0
0
0
1
1
1
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)
位
7
6
5
4
3
2
1
0
位名
称
SE
LM1
SE
LM0
DI
VM1
DI
VM0
SE
LS
DI
VS1
DI
VS0
DC
OR
操作
方式
rw
rw
rw
rw
rw
rw
rw
rw
复位
值
0
0
0
0
0
0
0
0
SELMx:
主时钟(MCLK)
的时钟源选择
Bit7
Bit6
SELM1
SELM0
0
0
数控振荡器(
DCO)
0
1
数控振荡器(
DCO)
1
0
高频振荡器(
XT2)/当XT2不支持,为VLOCLK
1
1
低频振荡器(
LFXT1)/VLOCLK
MSP430系列微控制器包括多个子系列,MSP430x2xx属于这其中的一个。
MSP430G2231和MSP430F2619都属于MSP430x2xx子系列。
本书里所有寄存器的说明兼顾了MSP430x2xx子系列中的所有芯片。
DIVMx:
主时钟(MCLK)分频系数
Bit5Bit4
DIVM1DIVM0
001
012
104
118
SELS:
子系统时钟(SMCLK)的时钟源选择
0数控振荡器(DCO)
1高频振荡器(XT2)
DIVSx:
子系统时钟(SMCLK)分频系数
Bit2
Bit1
DIVS1
DIVS0
0
0
1
0
1
2
1
0
4
1
1
8
DCOR:
数控振荡器(
0内部
1外部
DCO)电阻选择
数控振荡器(DCO)属于RC振荡器,改变电阻的数值能够改变振荡器的工作频率。
数控振荡器(DCO)既可以使用MSP430微控制器芯片内部的电阻,通过用户程序配置系统时钟控制寄存器1(BCSCTL1)中的位Reslx选择不同的内部电阻;也可以使用指定管脚连接的外部电阻。
如果外部电阻采用电位器,调整电位器就能够连续地改变数控振荡器
(DCO)的工作频率。
系统时钟控制寄存器3(BCSCTL3)
位
7
6
5
4
3
2
1
0
位名称
XT
2S1
XT
2S0
LFX
T1S1
LFX
T1S0
X
CAP1
XC
AP0
XT
2OF
LFX
T1OF
操作
方式
rw
rw
rw
rw
rw
rw
rw
rw
复位
值
0
0
0
0
0
1
0
1
Bit7XT2S10
0
1
1
Bit6
XT2S0
0
1
0
1
0.4〜1MHz晶体振荡器
1〜3MHz晶体振荡器
3〜16MHz晶体振荡器
0.4〜16MHz外部时钟源
XT2Sx:
XT2时钟范围选择
高频振荡器(XT2)需要一个外部晶体器件。
这个晶体器件的最高谐振频率为
16MHz。
根据具体使用晶体的谐振频率需要完成XT2Sx的设置。
最后一种选择为采用一个
完整的信号源,例如实验室的信号产生器,作为时钟源时的设置。
LFXT1Sx:
低频时钟源选择和LFXT1时钟范围选择(受XTS/BCSCTL1控制)
Bit5Bit4
LFXT1S1LFXT1S0
XTS=0
00
01
32768Hz晶体在LFXT1保留
VLOCLK
外部时钟源
XTS=1
00
0.4〜1MHz晶体振荡器
1〜3MHz晶体振荡器
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输出时钟信号
#includevoidmain(void)
r
//包含名称定义的对应地址或数据的头函数
//主函数
{
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对频率的进一步的调整。
位寻址功能的实现
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