程序如下:
void setup_FLL(void) {//启动晶振和时钟;WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timerUCSCTL6 &= ~(XT1OFF);// XT1 Ondo{UCSCTL7 &= ~XT1LFOFFG;// Clear XT1 fault flagsfor (int i = 30000; i; i--);} while (UCSCTL7 & XT1LFOFFG);// Test XT1 fault flagUCSCTL3 = SELREF__XT1CLK;// Set DCO FLL referenceUCSCTL4 = SELS__DCOCLKDIV + SELM__DCOCLK + SELA__XT1CLK;__delay_cycles(781250);while (SFRIFG1&OFIFG)// Test oscillator fault flag{// Clear fault flagsUCSCTL7 &= ~(XT1LFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG;// Clear fault flagsfor (int i = 30000; i; i--);} }
问题描述:程序运行后,会在最后一个while(SFRIFG1&OFIFG)中循环,此时DCOFFG与OFIFG置位,XT1LFOFFG 为0。发现问题后,进入单步调试,发现断点在SFRIFG1 &= ~OFIFG;处正常,但下一步单调时,UCSCTL0值变为0x00f8,即MOD{32},DCO{0}。
我猜测是MOD{32},DCO{0}后,引发DCOFFG,再触发了OFIFG。但想不通为何UCSCTL0值一开始还正常,但后来变为0x00f8?想请教论坛上的高人指点一下,谢谢!
user4207297:
在网上查了一下,发现有篇帖子也提到将AUXVCC3接上VCC就解决问题了,我试了一下果然可以,但AUXVCC3不是后备电源吗?难道不接这个电源,RTC和XT1的晶振就不工作了?
灰小子:
回复 zhifang yang1:
楼上正解,遇到问题需要多翻翻手册
user4207297:
回复 zhifang yang1:
手册里我没找到你提的那句话啊。。。我看的是msp430f6733,MSP430x5xx and MSP430x6xx Family User's Guide
不过的确找到了一句:The Backup subsystem operates on a dedicated power supply AUXVCC3. This subsystem includes lowfrequencyoscillator (XT1), Real-Time Clock module, and Backup RAM.
好吧,我承认手册是写了的。不过为什么要把XT1归为Backup subsystem啊。。。我用个外部低频晶振,去看Crystal Oscillator, XT1, Low-Frequency Mode,去看Unified Clock System (UCS),不会去看Backup Subsystem的啊。。。
zhifang yang1:
回复 user4207297:
这个是硬件工程师做 Unused Pin Assignment 的时候要去review的。。。
不用的pin就悬空比较草率。