看到官方的很多例子,都是没有对时钟频率进行设置。如下所示。
#include <msp430.h> int main(void) {WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timerP1DIR |= 0x01;// Set P1.0 to output directionwhile (1)// Test P1.4{if ((0x10 & P1IN)) P1OUT |= 0x01;// if P1.4 set, set P1.0else P1OUT &= ~0x01;// else reset} }
#include <msp430.h> int main(void) {WDTCTL = WDTPW + WDTHOLD;// Stop WDTP1DIR |= 0x01;// P1.0 outputCCTL0 = CCIE;// CCR0 interrupt enabledCCR0 = 50000;TACTL = TASSEL_2 + MC_2;// SMCLK, contmode__bis_SR_register(LPM0_bits + GIE);// Enter LPM0 w/ interrupt } // Timer A0 interrupt service routine #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) #elif defined(__GNUC__) void __attribute__ ((interrupt(TIMER0_A0_VECTOR))) Timer_A (void) #else #error Compiler not supported! #endif {P1OUT ^= 0x01;// Toggle P1.0CCR0 += 50000;// Add Offset to CCR0 }
这些都没有进行配置,那么默认频率是多少呢?
430上电后默认DCO设置为RSELx = 7, DCOx = 3, MODx = 0,其频率范围是0.8~1.5MHz(3V电压)
这就有问题了,到底是多少呢?有两种说法最常见:800KHz和1MHZ
难道上电后的默认DCO频率真的是不确定的?
必须要通过校准指令实现频率确定?如下代码所示
//运行以下代码可将DCO校准至精准的1MHz DCOCTL=0; BCSCTL1=CALBC1_1MHZ; DCOCTL=CALDCO_1MHZ;
对这个有了解的一起讨论一下
Susan Yang:
您可以看一下用户指南上的说明
After a PUC, MCLK and SMCLK are sourced from DCOCLK at ~1.1 MHz (see the device-specific datasheet for parameters)
www.ti.com/…/slau144j.pdf 的5.2
具体信息您可以查询具体的数据手册
DCO Frequency 部分的说明
灰小子:
楼主你好,你说的都是正确的。
msp430上电后,默认dco约为1MHz。
但此时dco的误差较大,需要校准才能精确。这里的校准参数,每片msp430基本上是不同的。