我是个软件新手,我最近用MSP430g2231在编一个应用软件(编译仿真用的是IAR),刚开始我配置的主频是其“出厂自带校准的1Mhz DCO”,且已调通程序正常工作;现在我想将主频设到2Mhz左右(不需要校准,只要将DCO频率设置到2MHz左右就行),虽然MSP430g2231的手册中有这方面介绍(如23页DCO介绍部分),但我看了半天还是没搞懂如何具体地配置主频,比如如何去写那几个寄存器?特请专家帮我具体描述一下,最好帮我把这段语句写出来,特致一只菜鸟的十分感谢!
以下是我目前正常使用的1MHz DOC 的时钟配置函数
void Clockinit(void)
{
DCOCTL = 0x00; // Safe Flow
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If calibration constants erased, do not load, trap CPU!!
}
BCSCTL1 = CALBC1_1MHZ; // 主频 run at 1Mhz (内部DCO)
DCOCTL = CALDCO_1MHZ;
}
Hardy Hu:
void Clockinit(void)
{
DCOCTL = 0x00; // 先设置DCO到最慢
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) //检查DCO校正数据空间是否为FF,FF就是说明这两个校正数据丢失,如果丢失则一直死循环,程序相当于挂掉了
{
while(1); // If calibration constants erased, do not load, trap CPU!!
}
BCSCTL1 = CALBC1_1MHZ; // 把校正数据赋值给DCO的寄存器,主频 run at 1Mhz (内部DCO)
DCOCTL = CALDCO_1MHZ; // 把校正数据赋值给DCO的寄存器,主频 run at 1Mhz (内部DCO)
}
Peter_Zheng:
回复 Hardy Hu:
DCO的配置,由于对于1MHZ/8MHZ/12MHZ/16MHZ在flash 0x10F8-0x10FF的地址进行了出场设定,那么就可以直接对DCO寄存器就行配置。如果对于其他频率,不需要校正的,可以通过对DCOCTL,BCSCTL1中的DCOx/MODx/RSELx进行配置,具体参数查看数据手册的第25页。
Young Hu:
回复 Hardy Hu:
您好!
您测一下下面的代码
DCOCTL = 0x00;
DCOCTL = MOD1 + MOD2 + DCO0;
BCSCTL1 = XT2OFF + DIVA_0 + RSEL0 + RSEL3;
我还没来得及测。
然后,有个很有用的外设配置工具是GRACE,集成在CCS5和IAR中的,如果以后遇到类似的问题您可以自己来配置。
Fuchong Wang:
回复 YM lee:
楼上说:最后俺又用高级示波器细测了一下时钟信号,发现一个特殊现象——–出厂校准的1MHzDCO,频率准确度比较高,但方波上下沿抖动厉害;其它自选配置的DCO频率准确度差一些,但波形非常稳定。希望大家在选取时留意参考这点。
请大侠确定一下是否真的有这种现象?什么原因引起的?有什么影响?
Fuchong Wang:
回复 YM lee:
看了下手册,好像是这么回事,好像MODx位就是控制这个的,不过看文档好像碰巧了的配置却可以无此现象
Hardy Hu:
回复 Fuchong Wang:
modulator造成的,DCO进行频率补偿时,只能在两个相近的频率中进行加权后输出,所以会在两个频率点上不停装换,公式为:t = (32 – MODx) × tDCO + MODx × tDCO+1