MSP430时钟设置程序.docx
《MSP430时钟设置程序.docx》由会员分享,可在线阅读,更多相关《MSP430时钟设置程序.docx(13页珍藏版)》请在冰豆网上搜索。
MSP430时钟设置程序
MSP430时钟设置程序
1/
voidmain(void)
{
unsignedinti;
WDTCL=WDTPW+WDTHOLD;//停止看门狗
P5DIR=0x10;//设置P5.4输出
P5SEL=0x10;//设置P5.4口为外围模块用作MCLK信号输出
BCSCTL1&=~XT2OFF;//使TX2有效,TX2上电时默认为关闭的.
do
{
IFG1&=~OFIFG;//清振荡器失效标志
for(i=0xff;i>;0;i--);//延时,待稳定.
}
while((IFG1&OFIFG)!
=0);//若振荡器失效标志有效
BCSCTL2|=SELM1;//使MCLK=XT2
for(;;);
}
2/
#include;
voidmain(void)
{
unsignedinti;
WDTCTL=WDTPW+WDTHOLD;//停止看门狗
BCSCTL1|=XTS;
//设置时基寄存器1,使ACLK=LFXT1=HFXTAL,也就是高频模式.
P2DIR|=0x01;//设置P2.0方向寄存器为输出
P2SEL|=0x01;//设置P2.0口为外围模块用作ACLK信号输出
P1DIR|=0x02;//设置P1.1方向寄存器为输
do
{
IFG1&=~OFIFG;//清振荡器失效标志
for(i=0xFF;i>;0;i--);//延时,待稳定
}
while((IFG1&OFIFG));//若振荡器失效标志有效?
BCSCTL2|=SELM_3;//设置时基寄存器2,使主时钟信号MCLK=LFXT1(可靠的)
for(;;)//无穷循环
{
P1OUT|=0x02;//P1.1=1
P1OUT&=~0x02;//P1.1=0
}
}
1-LFXT1CLK:
低频/高频时钟源.由外接晶体振荡器,而无需外接两个振荡电容器.较常使用的晶体振荡器是32768HZ。
2-XT2CLK:
高频时钟源.由外接晶体振荡器。
需要外接两个振荡电容器,较常用的晶体振荡器是8MHZ。
3-DCOCLK:
数字可控制的RC振荡器。
d
/*******************************************************************************************************************/
BCSCTL基本时钟系统控制寄存器1
D7
D6
D5
D4
D3
D2
D1
D0
DCO.2
DCO.1
DCO.0
MOD.4
MOD.3
MOD.2
MOD.1
MOD.0
BCSCTL|=DCOx;//位选择,x为0,1,2。
DCO0=0x20;DCO1=0x40;DCO2=0x80;
BCSCTL|=MODx;//模块选择,x为0,1,2,3,4;MOD0=0x01,MOD1=0x2;MOD2=0x04;MOD3=0x08,MOD4=0x10;
/********************************************************************************************************************/
BCSCTL1基本时钟系统控制寄存器1
D7
D6
D5
D4
D3
D2
D1
D0
XT2OFF
TXS
DIVA.1
DIVA.0
XT5V
Rsel.2
Resl.1
Resl.0
BCSCTL1|=XT2OFF;//使能启用XT2CLK
BCSCTL1|=TXS;//启用高频;BCSCTL1&=~TXS;//启用低频
BCSCTL1|=DIVA_x;//ACLK时钟源分频,x为0,不分频,1是2分频,2是4分频,3是8分频
BCSCTL1|=XT5V;//
BCSCTL1|=RSELx;//x可选0,1,2,3,频率范围选择
/*********************************************************************************************************************/
BCSCTL2基本时钟系统控制寄存器2
D7
D6
D5
D4
D3
D2
D1
D0
SELM.1
SELM.0
DIVM.1
DIVM.0
SELS
DIVS.1
DIVS.0
DCOR
BCSCTL2寄存器默认为0x00,需要哪个时钟源,几分频,按下列相加即可。
BCSCTL2|=SELM_x;//MCLK时钟源选择,x为0,1选内部时钟DCOCLK,2选XT2,3选LFXTCLK
BCSCTL2|=DIVM_x;//MCLK时钟源分频,x为0,不分,1是2分频,2是4分频,3是8分频
BCSCTL2|=SELS;//SMCLK时钟源选XT2CLK,默认选DCOCLK
BCSCTL2|=DIVS_x;//SMCLK时钟源分频,x为0,不分,1是2分频,2是4分频,3是8分频
BCSCTL2|=DCOR;//使能外部电阻,默认使能内部电阻。
宏定义DCOR=0x01;
对于辅助时钟的分频,设置BCSCTL1
/**********************************************************************************/
MSP430单片机时钟模块提供3个时钟信号输出,以供给片内各部电路使用。
1-ACLK:
辅助时钟信号.由图所示,ACLK是从LFXT1CLK信号由1/2/4/8分频器分频后所得到的.由BCSCTL1寄存器设置DIVA相应为来决定分频因子.ACLK可用于提供CPU外围功能模块作时钟信号使用.
2-MCLK:
主时钟信号.由图所示,MCLK是由3个时钟源所提供的。
他们分别是LFXT1CLK,XT2CLK(F13、F14,如果是F11,F11X1则由LFXT1CLK代替),DCO时钟源信号提供.MCLK主要用于MCU和相关系统模块作时钟使用。
同样可设置相关寄存器来决定分频因子及相关的设置。
3-SMCLK:
子系统时钟,SMCLK是由2个时钟源信号所提供.他们分别是XT2CLK(F13、F14)和DCO,如果是F11、F11X1则由LFXT1CLK代替TX2CLK。
同样可设置相关寄存器来决定分频因子及相关的设置。
DCOCTLDCO控制寄存器
7
6
5
4
3
2
1
0
DCO.2
DCO.1
DCO.0
MOD.4
MOD.3
MOD.2
MOD.1
MOD.0
DCO.0-DCO.4定义8种频率之一,可以分段调节DCOCLK频率,相邻两种频率相差10%。
而频率由注入直流发生器的电流定义。
MOD.0-MOD.4定义在32个DCO周期中插入的Fdco+1周期个数,而在下的DCO周期中为Fdco周期,控制改换DCO和DCO+1选择的两种频率。
如果DCO常数为7,表示已经选择最高频率,此时不能利用MOD.0-MOD.4进行频率调整。
BCSCTL1基本时钟系统控制寄存器1
7
6
5
4
3
2
1
0
XT2OFF
TXS
DIVA.1
DIVA.0
XT5V
Rsel.2
Resl.1
Resl.0
XT2OFF控制XT2振荡器的开启与关闭。
TX2OFF=0,XT2振荡器开启。
TX2OFF=1,TX2振荡器关闭(默认为TX2关闭)
XTS控制LFXT1工作模式,选择需结合实际晶体振荡器连接情况。
XTS=0,LFXT1工作在低频模式(默认)。
XTS=1,LFXT1工作在高频模式(必须连接有高频相应的高频时钟源)。
DIVA.0DIVA.1控制ACLK分频。
0不分频(默认)
12分频
24分频
38分频
XT5V此位设置为0。
Resl1.0,Resl1.1,Resl1.2三位控制某个内部电阻以决定标称频率。
Resl=0,选择最低的标称频率。
……..
Resl=7,选择最高的标称频率。
BSCCTL2|=DIVM_x(x=0,1,2,3)MCLK分频(x=0,不分频;x=1,2分频;x=2,4分频;x=3,8分频)
DIVS_0
BCSCTL2基本时钟系统控制寄存器2
7
6
5
4
3
2
1
0
SELM.1
SELM.0
DIVM.1
DIVM.0
SELS
DIVS.1
DIVS.0
DCOR
SELM.1SELM.0选择MCLK时钟源
0时钟源为DCOCLK(默认)
1时钟源为DCOCLK
2时钟源为LFXT1CLK(对于MSP430F11/12X),时钟源为XT2CLK(对于MSP430F13/14/15/16X);
3时钟源为LFTXTICLK。
DIVM.1DIVM.0选择MCLK分频
01分频(默认)
12分频
24分频
38分频
SELS选择SMCLK时钟源
0时钟源为DCOCLK(默认)
1时钟源为LFXT1CLK(对于MSP430F11/12X),时钟源为XT2CLK(对于MSP430F13/14/15/16X)。
DIVS.1DIVS.0选择SMCLK分频。
01分频
12分频
24分频
48分频
DCOR选择DCO电阻
0内部电阻
1外部电阻
PUC信号之后,DCOCLK被自动选择MCLK时钟信号,根据需要,MCLK的时钟源可以另外设置为LFXT1或者XT2。
设置顺序如下:
[1]复位OscOff
[2]清除OFIFG
[3]延时等待至少50us
[4]再次检查OFIFG,如果仍然置位,则重复[3]、[4]步骤,直到OFIFG=0为止。
低功耗设置的技巧问题:
1、LPM4:
在振荡器关闭模式期间,处理机的所有部件工作停止,此时电流消耗最小。
此时只有在系统上电电路检测到低点电平或任一请求异步响应中断的外部中断事件时才会从新工作。
因此在设计上应含有可能需要用到的外部中断才采用这种模式。
否则发生不可预料的结果。
2、LPM3:
在DC发生器关闭期间,只有晶振是活动的。
但此时设置的基本时序条件的DC发生器的DC电流被关闭。
由于此电路的高阻设计,使功耗被抑制。
注:
当从DC关闭到启动DC0要花一端时间(ns-us)
3、LPM2:
在此期间,晶镇振和DC发生器是工作的,所以可实现快速启动。
4、LPM1:
在此振荡器已经工作,所以不存在启动时间延时问题。
Timer_A的寄存器
寄存器
缩写
读定类型
地址
初态
Timer_A控制寄存器
TACTL
R/W
160H
POR复位
Timer_A计数器
TAR
R/W
170H
POR复位
捕捞/比较控制寄存器0
CCTL0
R/W
162H
POR复位
捕捞/比较寄存器0
CCR0
R/W
172H
POR复位
捕捞/比较控制寄存器1
CCTL1
R/W
164H
POR复位
捕捞/比较寄存器1
CCR1
R/W
174H
POR复位
捕捞/比较控制寄存器2
CCTL2
R/W
166H
POR复位
捕捞/比较寄存器2
CCR2
R/W
176H
POR复位
中断向量寄存器
TAIV
R/W
12EH
POR复位
TACTL控制寄存器
15--10
9
8
7
6
5
4
3
2
1
0
未用
SSEL1
SSEL0
ID1
ID0
MC1
MC0
未用
CLR
TAIE
TAIFG
SSEL1、SSEL0选择定时器输入分频器的时钟源
Timer_A时钟源
SSEL1
SSEL0
输入时钟源
说明
0
0
TACLK
用特定的外部引脚信号
0
1
ACLK
辅助时钟
1
0
SMCLK
子系统时钟
1
1
INCLK
见器件说明
ID1,ID0输入分频选择
00不分频
012分频
104分频
118分频
MC1,MC0计数模式控制位
00停止模式
01增计数模式
10连续计数模式
11增/减计数模式
CLR定时器清除位
POR或CLR置位时定时器和输入分频器复位。
CLR由硬件自动复位,其读出始终为0。
定时器在下一个有效输入沿开始工作。
如果不是被清除模式控制暂停,则定时器以增计数模式开始工作。
TAIE定时器中断允许位
0禁止定时器溢出中断
1允许定时器溢出中断
TAIFG定时器溢出标志位
增计数模式:
当定时器由CCR0计数到到0时,TAIFG置位。
连续计数模式:
当定时器由0FFFFH计数到0时,TAIFG置位。
增/减计数模式:
当定时器由CCR0减计数到0时,TAIFG置位。
CCTLx捕获/比较控制寄存器
1514
1312
11
10
9
8
765
4
3
2
1
0
CAPTMOD1-0
CCIS1-0
SCS
SCCIx
CAP
OUTMODx
CCIEx
CCIx
OUT
COV
CCIFx
TIMER_A有多个捕获比较模块,每个模块都有自己的控制寄存器CCTLx
CAPTMOD1-0选择捕获模式
00禁止捕获模式
01上升沿捕获
10下降沿捕获
11上升沿与下降沿都捕获
CCISI1-0在捕获模式中用来定提供捕获事件的输入端
00选择CCIxA
01选择CCIxB
10选择GND
11选择VCC
SCS选择捕获信号与定时器时钟同步、异步关系
0异步捕获
1同步捕获
异步捕获模式允许在请求时立即将CCIFG置位和捕获定时器值,适用于捕获信号的周期远大于定时器时钟周期的情况。
但是,如果定时器时钟和捕获信号发生时间竞争,则捕获寄存器的值可能出错。
在实际中经常使用同步捕获模式,而且捕获总是有效的。
SSCIx比较相等信号EQUx将选择中的捕获、比较输入信号CCIx(CCIxA,CCIxB,Vcc和GND)进行锁存,然后可由SCCIx读出。
CAP选择捕获模式还是比较模式。
0比较模式
1捕获模式
注意:
同时捕获和捕获模式选择
如果通过捕获比较寄存器CCTLx中的CAP使工作模式从比较模式变为捕获模式,那么不应同时进行捕获;否则,在捕获比较寄存器中的值是不可预料的,推荐的指令顺序为:
[1]修改控制寄存器,由比较模式换到捕获模式。
[2]捕获
OUTMODx选择输出模式
000输出
001置位
010PWM翻转/复位
011PWM置位/复位
100翻转/置位
101复位
110PWM翻转/置位
111PWM复位/置位
CCIx捕获比较模的输入信号
捕获模式:
由CCIS0和CCIS1选择的输入信号通过该位读出。
比较模式:
CCIx复位。
OUT输出信号
0输出低电平
1输出高电平
如果OUTMODx选择输出模式0(输出),则该位对应于输入状态。
COV捕获溢出标志
0输出低电平
1输出高电平
[1]当CAP=0时,选择比较模式。
捕获信号发生复位,没有使COV置位的捕获事件。
[2]当CAP=1时,选择捕获模式,如果捕获寄存器的值被读出再次发生捕获事件,则COV置位。
程序可检测COV来断定原值读出前是否又发生捕获事件。
读捕获寄存器时不会使溢出标志复位,须用软件复位。
CCIFGx捕获比较中断标志
捕获模式:
寄存器CCRx捕获了定时器TAR值时置位。
比较模式:
定时器TAR值等于寄存器CCRx值时置位。
#include;
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;//停止看门狗定时器
P1DIR|=0x01;//设P1.0为输出
TACTL=TASSEL_1+MC_2+TAIE;//ACLK,定时器A计数模式,且开中断功能
_BIS_SR(LPM3_bits+GIE);//进入LPM3低功耗模式和开总中断允许
}
//Timer_A3中断向量(TAIV)处理程序
#pragmavector=TIMERA1_VECTOR
__interruptvoidTimer_A(void)
{
switch(TAIV)//应用switch语句来处理多中断源的向量
{//向量列表通过case语句来分多中断源的入口
case2:
break;//CCR1比较/捕获寄存器的中断入口,
//本例子未用到。
case4:
break;//CCR2比较/捕获寄存器的中断入口,
微控网为你准备的MSP430F单片机入门必修课//