设置430由内部DCO默认的1Mhz为SMCLK,MCLK.设置内部的VLO为ACLK。当从LMP3唤醒执行中断的时候,测SMCLK不是1Mhz,请高手指教
Lina Lian:
deliang zhang,
请问你使用默认的1MHz,用的是下面设置吗?还是什么都没设?
BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ;
另外你是如何测SMCLK的?是从对应管脚引出来吗?实际测到的是多少?
deliang zhang:
回复 Lina Lian:
我没有设置,就是上电之后默认的DCO时钟,把引脚配置第二功能输出测试SMCLK,实际测到的频率每次唤醒之后都是变化的,都到不了1Mhz
linbo cen:
回复 deliang zhang:
在没有进入LPM3模式之前,你测出来的SMCLK是1MHz吗?
你最好把进入LMP3前后的频率都测量一下,这样好做个比较,大家也能明白你所处的环境
deliang zhang:
回复 linbo cen:
在进入LMP3之前是1Mhz,进入LMP3之后,SMCLK关闭,唤醒之后测试不到1Mhz
linbo cen:
回复 deliang zhang:
唤醒之后的频率和之前的频率能差多少?如果不多的话不是很影响的,如果差太多的话,就只能等了解其中原理的大神来解答了
还有,你可以在调试的时候,对比一下基础时钟系统的的几个配置寄存器在前后有没有发生改变,如果改变了,对比一下改变的这些位都都会产生什么样的影响,或者这样能找出问题所在
Lina Lian:
回复 deliang zhang:
deliang zhang,
你具体使用的是哪款芯片?请问你在唤醒cpu多长时间后,测的SMCLK? 另外是在debug状态测试的还是在非debug状态测试的?这两个问题的提出是:1. DCO是需要一定的时间稳定输出的;2. 在debug状态的LPM3并非严格意义的LPM3,非debug状态LPM3才是真正的LPM3. 故有以下几点建议,你再试试,
1. 从LPM3唤醒后,不要再进入LPM3, 就是给其足够的时间,看看频率怎么样?
2. 试着输出MCLK代替SMCLK看看;
3. 在非debug模式下试试;
4. 用下面设为1MHz再看看,因为默认情况下,不设的话,应该比1MHz略大。
BCSCTL1 = CALBC1_1MHZ; // Set rangeDCOCTL = CALDCO_1MHZ;
deliang zhang:
回复 Lina Lian:
我用的是CC430F5137,不是您说的两 个寄存器,还有就是数据手册里没有找到具体的DCO设置的参数,比如说在1Mhz时DCOX,MODX,DCORSEL对应的值。只有一个参考的频率范围,这样的话是不能保证输出1Mhz的频率的,只能保证DCO在某一范围变化,是这样吗?
Peter_Zheng:
回复 deliang zhang:
用UCS模块配置为某一具体的频率,从lpm3唤醒应该是不会变的
Lina Lian:
回复 deliang zhang:
deliang zhang,
用的是CC430F5137的话,可以直接使用core library直接对系统时钟进行设置的。如果没有严格的必须1MHz要求,不想使用库的话,就用默认的就行。其实只有当MODX不设为0时,即启用DCO modulator的话,DCO输出是变得,若MODX=0的话,DCO输出应该是不变的。除非,温度引起了DCO的些微变化。