通电后DCO初始化为1M后,应该怎么再切换为其它?下面是开始的初始化的1M,但是后面想再变用8M的话就有点懵了,想请教下该怎么切换的
WDTCTL = WDTPW + WDTHOLD;
DCOCTL = CALDCO_1MHZ;
BCSCTL1 = CALBC1_1MHZ;
BCSCTL3 |= LFXT1S_2;
TA0CTL = TASSEL_2 + TAIE;
TA1CTL = TASSEL_1 + TAIE;
Susan Yang:
您可以参考下面链接给出的代码。您需要外接32K晶振作为校正频率。github.com/…/msp430x20xx_dco_flashcal.c
user5050221:
回复 Susan Yang:
可是产品是不用晶振的啊。一定要用晶振才能改变的吗?
Susan Yang:
回复 user5050221:
最好是用晶振。另外您可以看一下 www.ti.com/…/slaa336a.pdf
user5050221:
回复 Susan Yang:
感谢回复,看过了还是用晶振校正的,那如果不用晶振的话就没办法了吗?不要求很精准的频率的,只是想知道怎么能够稳当的切换,试过直接改可以切换,但总觉得有点太随意心里没底。
通过上面的初始化后,当确定电压达到稳定了就这样直接切换,不知道会有其它隐患不
_DINT();
DCOCTL= CALDCO_8MHZ;
BCSCTL1 = CALBC1_8MHZ;
BCSCTL3 |= LFXT1S_2;
TA0CTL = TASSEL_2 + ID_3 + TAIE;
TA1CTL = TASSEL_1 + TAIE;
delay_us(50);_EINT();
Susan Yang:
回复 user5050221:
您可以看一下 www.ti.com/…/msp430g2333.pdf 的 5.19 Calibrated DCO Frequencies, Tolerance
若是可以满足您的条件,就可以不用加晶振校准
user5050221:
回复 Susan Yang:
误差可以接受的,只是不知道我这样切换有没有问题?
WDTCTL = WDTPW + WDTHOLD;
//通电后先设置为1M
DCOCTL = CALDCO_1MHZ;
BCSCTL1 = CALBC1_1MHZ;
BCSCTL3 |= LFXT1S_2;TA0CTL = TASSEL_2 + TAIE;
TA1CTL = TASSEL_1 + TAIE;//配置各端口,检测到电压大于2.3V后再切换到8M
_DINT();
DCOCTL = CALDCO_8MHZ;
BCSCTL1 = CALBC1_8MHZ;
BCSCTL3 |= LFXT1S_2;TA0CTL = TASSEL_2 + ID_3 + TAIE;
TA1CTL = TASSEL_1 + TAIE;delay_us(50);
_EINT();
Susan Yang:
回复 user5050221:
理论上是可以的,上电后默认就是1M
灰小子:
回复 user5050221:
应该没问题,你可以烧写到mcu测试一下,比如闪个led灯,或者通过io输出mclk,观察一下dco的改变