This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430F6659:在XT1上使用外部20 MHz晶体

Guru**** 2589280 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/630356/ccs-msp430f6659-use-an-external-20-mhz-crystal-on-xt1

部件号:MSP430F6659
主题中讨论的其他部件:MSP-TS430PZ100USB

工具/软件:Code Composer Studio

TI社区您好,

我对焊接在MSP-TS430PZ100USB评估板的XT1垫上的20 MHz晶体有严重问题。

我有第二个高频晶体,在XT2上焊接4MHz。

4Mhz晶体工作正常,20MHz晶体不工作。 我已根据公式C1=C2=(2*Cload)-CM寄 生=(2*12pF)-2pF添加了2个22pF的电容器

我已经购买了带有XT2的ACLK,并将其分配给了WFP 1.0 :我可以在那里测量一个漂亮的4Mhz波浪。

我已经购买了带有XT1的SMCLK,并将其传送到了WFP 3.4 :只要运行代码,我就可以看到直流电压,并且在针脚上有一些随机振荡(非常小)。

另一个问题是MCLK:当我想手动修改UCSCTL4寄存器的SELM位时,程序崩溃。 此外,当我使用库函数和TI示例代码时,这些问题仍然存在。

请帮助我,我已经忙了一个星期了,也有同样的问题,我的时间已经不多了。

代码如下:

#include "driverlib.h"
//*********************************************************************************************************
/////
MCLK的目标频率(单位:kHz
)////*********************************************************************************************************

#define UCS_Desired (定义UCS_Desired) MCLK_FREQUENCY IN_kHz 2万
//*************************************************************************************************
//////MCLK/FLLRef
比率(所需频率/FLL参考时钟频率)
//////*****************************************************************************************************************

#define UCS_MCLK_FLLREF_Ratio 609
//*************************************************************************************´

//*************************************************************************************************
/////XT
正在使用的晶体频率
//////*************************************************************************************************

#define UCS_XT1_CRYSTAL_FREQUENCY 2000万
#define UCS_XT2_CRYSTLE_FREQUENCY 400万


//用于存储当前时钟值
的Variable UINT32_t clockValue =0;

//用于存储振荡器故障标记
uint16_t状态的Variable;

//用于存储返回的STATUS_SUCCESS或STATUS_FAIL
uint8_t returnValue =0;


void set_clock_frequences()
{

//端口3.4 上的SMCLK (插针#46)
GPIO_setAsPeripheralModuleFunctionOutputPin (
GPIO端口P3,
GPIO _PIN4
);

//在WFP 1.0 上安装ACLK (针脚34)
GPIO_setAsPeripheralModuleFunctionOutputPin (
GPIO端口P1,
GPIO_PIN0
);

//启动HF XT2晶体端口选择XT2
GPIO_setAsPeripheralModuleFunctionInputPin (
GPIO端口P7,
GPIO _PIN2 + GPIO _PIN3
);



//将VCORE =3设置为20MHz时钟
PMM_setVCore (PMM_Core_LEVEL_3);

//设置DCO;FLL参考= REFO
UCS_initClockSignal(.
UCS_FLLREF,
UCS_REFOCLK_SELECT,
UCS_CLOCK分隔符_1
);

//设置比率和所需MCLK频率并初始化DCO
UCS_INITFLLSettle(.
UCS_Desired MCLK_FREQUENCY IN_kHz,
UCS_MCLK_FLLREF_Ratio
);

状态= UCS_TRENONHFXT1WithTimeout (UCS_XT1_DRIVE_25000);

状态= UCS_TRENONXT2WithTimeout (UCS_XT2_DRIVE_4MHz_8MHZ,5000);

#IF 0
//使用库函数设置MCLK
UCS_initClockSignal(. //在功能内,程序崩溃 
UCS_MCLK,
UCS_DCOCLK_SELECT,
UCS_CLOCK分隔符_1
);
#endif
#if 0
//手动设置MCLK -->问题仍然存在

//清除寄存器
UCSCTL4 &=~(SELM_7);
//将XT1 CLK设置为MCLK源
UCSCTL4 |= SELM__XT1CLK; //此处程序崩溃 
// MCLK源除法器f (MCLK)/1
UCSCTL5 |= DIVM_0;

//此处为断点
状态=状态;
#endif

//设置SMCLK
UCS_initClockSignal(.
UCS_SMCLK,
UCS_XT1CLK_SELECT,
UCS_CLOCK分隔符_1
);

//设置ACLK
UCS_initClockSignal(.
UCS_ACLK,
UCS_XT2CLK_SELECT,
UCS_CLOCK分隔符_1
);


//启用全局振荡器故障标志
SFR_clearInterrupt (SFR_--振荡器----故障----中断);
sfr_enableInterrupt (sfr_st荡 器_fault_interrupt);

//启用全局中断
__bis_sr_register (GIE);


//验证时钟设置是否符合预期
UCS_setExternalClockSource (UCS_XT1_CRYSTAL_Frequency,UCS_XT2_CRYSTAL_Frequency);
clockValue = UCS_getSMCLK();
clockValue = UCS_getMCLK();
clockValue = UCS_getACLK();

}


#if defined(__TI_Compiler_version__)|| defined(__IAR_systems_ICC__)
#pragma vector=UNMI_vector
__interrupt
#Elif defined(__GNUC__)
__attribute___(interrupt (UNMI_vector))
#endife) ISR_{nifvoid


做
{
//如果在超时后仍无法清除振荡器故障标志,
//在这里设置陷阱并等待。
状态= UCS_clearAllOscar FlagsWithTimeout(1000);
}
while (status !=0);
} 


作废NMI_ISR(void)

   做
   {
       //如果在超时后仍无法清除振荡器故障标志,
       //在这里设置陷阱并等待。
       状态= UCS_clearAllOscar FlagsWithTimeout(1000);
   }
   while (status !=0);
}

附注:

当我评论MCLK修改时,正如您在代码中看到的那样,程序不会崩溃。

如果我将DCO时钟应用到SMCLK (引脚3.4),我可以测量20MHz。 问题:抖动太大,这就是为什么我在XT1上急需使用20MHz晶体的原因。

感谢您的事先帮助,

谨致问候,

Stefan