怎样把msp430g2553配置成稳定的8M频率的时钟
最好发一个例子程序
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你所指的稳定的8M时钟,有什么具体指标要求吗?
如果没有,就用内部DCO,配置到8M工作。
一下内容节选自TI官方例程,更多详细内容请到TI网站直接下载相关器件型号的例程:
#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If calibration constants erased
// do not load, trap CPU!!
}
//1Mhz
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation */
/* //8Mhz
BCSCTL1 = CALBC1_8MHZ; // Set range
DCOCTL = CALDCO_8MHZ; // Set DCO step + modulation */
/* //12Mhz
BCSCTL1 = CALBC1_12MHZ; // Set range
DCOCTL = CALDCO_12MHZ; // Set DCO step + modulation*/
/* //16Mhz
BCSCTL1 = CALBC1_16MHZ; // Set range
DCOCTL = CALDCO_16MHZ; // Set DCO step + modulation*/
P1DIR |= 0x13; // P1.0,1 and P1.4 outputs
P1SEL |= 0x11; // P1.0,4 ACLK, SMCLK output
while(1)
{
P1OUT |= 0x02; // P1.1 = 1
P1OUT &= ~0x02; // P1.1 = 0
}
}
在G2系列中只能通过内部DCO实现8MHz的频率,代码如下所示。这个方法应该是最稳定的一种了。
if (CALBC1_8MHZ ==0xFF || CALDCO_8MHZ == 0xFF)
{
while(1); // If calibration constants erased
// do not load, trap CPU!!
}
//8Mhz
BCSCTL1 = CALBC1_8MHZ; // Set range
DCOCTL = CALDCO_8MHZ; // Set DCO step + modulation */
注意书册中那个系统框图,以及时钟部分的架构框图,系统对所有的时钟源都只能进行“分频”处理而不能进行“倍频”处理,所以你无法将外部32.768KHz倍到8MHz去!建议如下设置:
1)首先,在外部接晶体的端口接一个8MHz的晶体。但要注意选温度稳定度比较好的,现在垃圾晶体较多。
2)在msp430gx5xx user guide手册(注意不是2553的手册)中找到关于寄存器BCSCTL1的配置,将它的XTS位(好像是Bit6)设成“1”,即将外部晶体设成高频模式。
3)再配置寄存器BCSCTL2中的相关位(好像是Bit6和Bit6),选MCLK的来源为“外部XT2”,这样你的DCO就是外部的8MHz晶体频率了!
4)当然,如果你对这个8MHz主时钟的频率稳定度要不高,比如误差在正负3%都行,那厂家已经为你弄好了一系列的出厂校准频率,这些特殊点会随外界温度的变化而自动补偿校准,你可以参考2553手册第31页,在系统时钟初始化中仅需以下俩语句就妥了:
BCSCTL1 = CALBC1_8MHZ;
DCOCTL = CALDCO_8MHZ;
G2系列应该不带XT2,请参照“MSP430x2xx Family User's Guide” P279如下内容,
“ MSP430F20xx, MSP430G2xx1, MSP430G2xx2, MSP430G2xx3: LFXT1 does not support
HF mode, XT2 is not present, ROSC is not supported.”