msp430 片内时钟输出
我是看视频写的这段代码,怎么用示波器观察的时候,并没有输出时钟,请高手指教,代码如下:#include<msp430x24x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //stop watch dog 0x5a80
DCOCTL = DCO0 + DCO1 + DCO2;
BCSCTL1 = RSEL0 + RSEL1 + RSEL2;//nominal frequence
BCSCTL2 |= SELS;//select the SMCLK sourse 0== DCOCLK;1== XT2CLK
P4DIR |= BIT0;
P4OUT |= BIT0;
P5DIR |= BIT4|BIT5|BIT6;
P5SEL |= BIT4|BIT5|BIT6;
while(1);
} 你想测到什么?
从程序来看,你用的是DCO振荡器,频率最高的那种设置,然后没有XT1,没有XT2,就是没有启动外接晶振。
但是BCSCTL2 |= SELS把 SMCLK时钟源设成了XT2,这样的话你就算把P5相关阵脚设成外部模块(时钟输出),SMCLK输出阵脚不可能有时钟输出啊!!而ACLK一定是XT1时钟源,你同样也没有。。。。。
而P5的MCLK阵脚,是主时钟输入,而不是输出,你同样测不到。。
建议把 BCSCTL2 |= SELS直接删掉,程序默认SMCLK时钟源是DCO,这样测P5的SMCLK阵脚应该有6-10M左右的频率了。 我刚试了一下,你的代码是没问题的。但是我之前刚做的两块底板只能检测到DCO的波形,郁闷ing,检查一下硬件吧 现在还剩主时钟没有起振了,可能振荡电容拿错了…… 高速晶体没起振
你设的xt2
BCSCTL2 |= SELS;
必须启动高速晶体
//开启高速晶振
BCSCTL1 &= ~XT2OFF; // Activate XT2 high freq xtal
BCSCTL3 |= XT2S_2; // 3 ?16MHz crystal or resonator
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while (IFG1 & OFIFG); // OSCFault flag still set? 原来是电容的问题,把33pF换成22pF后能正常起振了,楼上的代码也可行,顶一个 对,之前我用51时也是电容太大,起振不了
页:
[1]