MSP430的时钟系统
其中LFXT1CLK是低频时钟晶体产生的低频时钟源
XT2CLK是标准晶体或陶瓷谐振器产生的高频时钟源
DCOCLK是由片内数字控制的RC振荡器。
其中ACLK是由LFXT1CLK信号经1,2,4,8分频后得到的。
而在这个电路中LFXT1CLK信号就是32768晶体。
那么,在没有特别设置的情况下,ACLK应该是1分频,也就是32768了?
验证一下:上一个程序中
CCR0 = 2047; //设定周期0.5S
32768/2048=16
然后:
TACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式
ID_3是8分频,那么16/8=2Hz,也就是0.5s
验证结果正确。
回到本例中来。在main函数中有这样一行:
TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,增计数模式
即选择的SMCLK作为时钟源。
关于SMCLK的介绍如下:
SMCLK,可以由软件选择来自LFXT1CLK,XT2CLK,DCOCLK三都之一,然后经过1,2,4,8分频得到。
那么在没有特别安排的情况下SMCLK选择的是哪一个时钟源,又是多少分频呢?
BCSCTL2地址为58H,PUC后的值是00H,其中SELS是用来选择 MCLK的时钟源。SELS=0,SMCLK的时钟源是DCOCLK;
SELS=1,SMCLK的时钟源是LFTX1CLK(MSP430F11XX)或者TX2CLK(MSP43013XX)
那么对于本板来说,由于主芯片是MFS430F149,因此只可能是DCOCLK或者是TX2CLK两者之一,那么究竟是哪一个呢?
进入调试,可以观察到BCSCTL2的值是00,即选择DCOCLK。
DIVS0和DIVS1是选择SMCLK的分频因子的。
00:不分频,01,2分频,10,4分频,11,8分频。
即选择DCOCLK,不分频。那么DCOCLK的值是多少呢?
查看关于DCOCLK的介绍,可真复杂。
DCO将一个内部或外部电阻接到直流发生器,它的阻值决定了DCOCLK的基础频率。
①DCO基础频率由内部或外部电阻身体DC发生器注入的电流决定,由DCOR控制位选择片内或片外面电阻。
②基础频率由控制位RSEL2,RSEL1,RSEL0分频为8个标称频率范围,而这些频率范围因不同型号而异。
③控制位DCO0,DCO1和DCO2可分段调味节目DCOCLK频率。
④由5个调整位MOD0~MOD4控制切换DCO和DCO+1选择的两种频率。
上电后,4系列的默认是1.048576MHz,因为它有锁频环,其他没有锁频环的430的DCO是800k左右,DCO的频率偏差挺大的,那只是一个估值。
进入调试后,可以手工改变
我们假定DCO是800K,SMCLK不分频,也是800K。周期为1.25us
根据:CCR0 = 50000;的设定,
即每62.5ms中断一次。
4、再回过来看一看MSP430的工作模式吧
1