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/MSP430FG6626:XTAL1时钟问题

Guru**** 2606725 points
Other Parts Discussed in Thread: MSP430FG6626

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/655405/ccs-msp430fg6626-xtal1-clock-issue

部件号:MSP430FG6626

工具/软件:Code Composer Studio

使用具有两个晶体的MSP430FG6626时,我在启动XT1CLK时遇到问题,这使我无法使用RTC_B

XT2CLK已正确初始化,并分别以16 MHz和8 MHz驱动MCLK和SMCLK。

虽然我不打算使用ACLK和FLL,但我已将它们配置为由REFOCLK驱动。

时钟设置

	静态WORD16调试;
	静态WORD32 smclkVal;
	静态WORD32 mclkVal;
	
	////
	初始化
	//
	调试=0;
	////
	端口选择XT2
	//
	
	
	
	
	
	
	
	
	GPIO初始化_setAsPeripheralModuleFunctionInputPin (GPIO_PORT_P7, Periph_in_PORT7;PM_Peripheral_PVM/ PM_1级;PH_PH_PHCO_PVM_1;PHCOSE_PH_PH_PHCOME_PHCOSE_PHOR_PHOR_PHOR_PHY/ PM20 XT1和XT2
	//
	UCS_setExternalClockSource(3.2768万, 1600万);
	////
	ACLK和参考时钟(不会使用)
	//
	UCS_initClockSignal (UCS_ACLK, UCS_REFCLK_SELECT, UCS_Clock_divuler_1);Initialize
	initClockSignal (UCS_FLF, UCS_FLK, UCS_Clock_diverer_1);
	//
	时钟故障初始化
	//
	UCS_clearFaultFlag (UCS_XT1LFOFFG | UCS_XT1FOFFG | UCS_XT2OFFG);
	//
	打开XT1
	//
	if (!UCS_TRENONLFFXT1Timeout (INIT_XT1_DRIVE_3,UCS_XT1_TIMEOUT
	
		){UCS_XT1/UCS_XCAP_3/ WHAT_3_FILEXT1/
		//***************
		//***************
		//***************
		//始终出现超时
		//***************
		//***************
		//***************
		//***************
		//处理错误案例
		debug++;
	}////
	
	初始化XT2 (8MHz至16MHz操作范围)
	//
	if (!initdiver_turnOnXT2WithTimeout (UCS_XT2_DRIVE_8MHZ_16MHz,XT2_INIT_TIMEOUT)
	{//
		处理错误案例
		debug++;
	}////
	
	配置MCLK和SMCLClockClockClockClock UCS_TC_16,
	UCS_16时钟UCS_16时钟,UCS_16时
	
	钟UCS_16时钟,UCS_16时钟,UCS_16时钟时钟时钟,UCS_TC_16时钟
	时钟时钟 UCS_Clock_diverer_2);
	////
	启用全局振荡器故障标志
	//
	SFR_DisableInterrupt (SFR_stockator_fault_interrupt (SFR_scrator_fault_interrupt
	);
	//toto
	
	
	
	
	
	
	
	
	
	
	
	
		
	:NMI时钟无错误//SFR_enableInterrupt (SFR_stock_fault_interrupt );UCS_val =/getkklk/= uCS_val;UCS_getkval =/kkklkk/kval =
	IF (mclkVal != XT2_FREQ)
	{
		DEBUG++;
	}
	IF (aclkVal != 3.2768万)
	{
		DEBUG+;
	}

UCS_TRENONLFXT1WithTimeout()似乎总是超时,因为5万 (可能更高)的超时值将不起作用。
 相反,使用UCS_turnOnLFXT1()将导致无限循环(不会退出函数调用)。 尝试不同的DRIVE_X和CAP_X设置会导致相同的结果。

如果能就此问题提供任何帮助,我将不胜感激。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    差点忘了提及几件事:
    -触发的振荡器故障为XT1LFOFFG和DCOFFG。
    -外部电容器(12 pF)与外部3.2768万 Hz XTAL1振荡器配合使用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    再次跟进:

    -无电容器(CBAK)连接到VBAK引脚。
    -在时钟初始化之前调用BattBak_unlockBackupSubSystem(),允许XTAL1初始化完成而不会超时。
    -振荡器故障现已降至DCOFFG。

    RTC_B在初始化后不运行或中断。

    RTC_B初始化

    	日历InitTime;////
    	
    	设置时间参数
    	//
    	InitTime.seconds	= 0x00;
    	InitTime.minutes	= 0x00;
    	InitTime.hours		= 0x11;
    	InitTime.DayOfWeek	= 0;
    	InitTime.dayofmonth	= 0x11;
    	InitTime.Month		= 0x11;
    	InitTime.Year		= 0x2010;
    	////RTS
    	
    	//-日历模式
    	//-传递初始化时间(高于)
    	//- BCD注册格式
    	// RTC_B_initCalendar
    	(RTC_B_B_base,&InitTime,RTC_B_format_BCD);
    	////
    	设置日历注册表// RTC_B_MINARB/每
    	分钟初始化
    	
    	RTC_RTC_ARB/ RTC
    	//
    	//设置中断
    
    	//
    	RTC_B_DisableInterrupt (RTC_B_base, RTCRDYIFG | RTCTEVIFG | RTCAIFG);
    	RTC_B_clearInterrupt (RTC_B_base, RTCRDYIFG | RTCTEVIFG | RTCTEVIFG | RTCAIFG);RTC_B_enableInterrupt (RTC_B_BASE
    	;RTC_DB_REFB);
    	RTC_BASE 

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

    是的,需要调用BattBAK_unlockBackupSubSystem(),这似乎是原始帖子中您的代码的唯一问题。

    对于RTC_B,您如何检查是否没有中断? 您是否在ISR中设置了断点? 此外,您能否发布ISR,以便我们了解是否存在问题?

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

    在XT1CLK初始化之前调用BattBAK_unlockBackupSubSystem()有点像一个魔球,因为大多数MSP430驱动程序库代码示例不包含该步骤...直到我开始使用RTC_B

    我能够解决RTC_B问题。 首先,我使用了不正确的符号来启用/禁用RTC_B中断...其他外设的IE和IFG标志通常是相同的。 我需要做的其他事情也是在 RTC中断处理程序启动时调用BattBAK_unlockBackupSubSystem() (在读取SLAA665B之后)。

    RTC_B中断设置

    	RTC_B_DisableInterrupt (RTC_B_B_B_BASE,RTCRDYIE | RTCTEVIE | RTCAIE);
    	RTC_B_clearInterrupt (RTC_B_BASE,RTCRDYIFG | RTCTEVIFG | RTCAIFG);
    	RTC_B_enableInterrupt (RTC_B_BASE);RTCTEVIE _B_BASE (RTCTEVIE)
    	;RTCDB_BASE)
    

    RTC_B IRQ

    	//
    	//解锁电池备份
    	//
    	DO
    	{
    		状态= BattBAK_UNlockBackupSubSystem(Bak_BATT_base);
    	}
    	While (状态);
    	////
    	过程中断引导程序
    	//
    	开关(__偶 数_in_range(RTCIV, 16)){............}
    	
    		
    	
    

    谢谢!