控制/MCU
在调试MSP430G系列的单片机的过程,发现不怎么的,时钟频率发生了变化,时间一下都对不上了。查收些资料说,DCO的值有可能被擦除了导致时钟不对的。细想一下,好像是在调试的过程中,出现调试不了的现象就在IAR里点击的“Erase memory”。把查找的资料记录下来,所以就有这篇文章。
问题描述因为DCO校准值在MCU出厂时保存于信息段A,一般是不允许清除信息段A的。
且示例代码中,有如下语句:
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF) { while(1);// If calibration constants erased // do not load, trap CPU!! } BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation可以看出在启动时都先检查DCO1MHZ的校准值是否为0xFF,是则进入while(1)死循环。
正常情况下因为信息段A不清除没问题的,但是我测试BSL下载时,故意给错误的BSL密码,导致FLASH都被擦除,发现转载DCO校准值的信息段A也被清掉了,于是程序运行到上面的代码时即进入死循环。
针对于这种DCO数据被擦除的情况,一般的解决办法是,通过利用Timer捕捉外部的32.768K晶振或是时钟源,然后得到1M,8M或是12Mhz之类的DCO的数值,然后在直接写入segment flashA里面。
有两个解决方案供选择:
1、外接晶体,用晶体配合timer校正DCO,TI的msp4300ware有源代码。如下:
/******************************************************************************* * * MSP430 CODE EXAMPLE DISCLAIMER * * MSP430 code examples are self-contained low-level programs that typically * demonstrate a single peripheral function or device feature in a highly * concise manner. For this the code may rely on the device's power-on default * register values and settings such as the clock configuration and care must * be taken when combining code from several examples to avoid potential side * effects. Also see for a GUI- and * for an API functional library-approach to peripheral configuration. * * --/COPYRIGHT-- //******************************************************************************/ // MSP430G2xx1 Demo - DCO Calibration Constants Programmer // // NOTE: THIS CODE REPLACES THE TI FACTORY-PROGRAMMED DCO CALIBRATION // CONSTANTS LOCATED IN INFOA WITH NEW VALUES. USE ONLY IF THE ORIGINAL // CONSTANTS ACCIDENTALLY GOT CORRUPTED OR ERASED. // // Description: This code re-programs the G2xx1 DCO calibration constants. // A software FLL mechanism is used to set the DCO based on an external // 32kHz reference clock. After each calibration, the values from the // clock system are read out and stored in a temporary variable. The final // frequency the DCO is set to is 1MHz, and this frequency is also used // during Flash programming of the constants. The program end is indicated // by the blinking LED. // ACLK = LFXT1/8 = 32768/8, MCLK = SMCLK = target DCO // //* External watch crystal installed on XIN XOUT is required for ACLK *// // // MSP430G2xx1 // --------------- // /|\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | P1.0|--> LED // | P1.4|--> SMLCK = target DCO // // A. Dannenberg // Texas Instruments Inc. // May 2010 // Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 3.42A //****************************************************************************** #include第二个办法是, , Elprotronic新版MSP430下载工具带有DCO校正功能。也可以使用MSP-GANG烧录工具来恢复,该工具支持重新效验DCO校准数据,然后写入information memory。
下次也记得个教训,在做BSL的时候,事先把DCO数据读出,做好备份工作。
参考全部0条评论
快来发表一下你的评论吧 !