国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

msp430的DCO校準(zhǔn)值被清除后該如何處理

發(fā)布者:760802csy最新更新時(shí)間:2019-10-23 來(lái)源: eefocus關(guān)鍵字:msp430  DCO  校準(zhǔn)值 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

起因

在調(diào)試MSP430G系列的單片機(jī)的過(guò)程,發(fā)現(xiàn)不怎么的,時(shí)鐘頻率發(fā)生了變化,時(shí)間一下都對(duì)不上了。查收些資料說(shuō),DCO的值有可能被擦除了導(dǎo)致時(shí)鐘不對(duì)的。細(xì)想一下,好像是在調(diào)試的過(guò)程中,出現(xiàn)調(diào)試不了的現(xiàn)象就在IAR里點(diǎn)擊的“Erase memory”。把查找的資料記錄下來(lái),所以就有這篇文章。


問(wèn)題描述

因?yàn)镈CO校準(zhǔn)值在MCU出廠時(shí)保存于信息段A,一般是不允許清除信息段A的。


且示例代碼中,有如下語(yǔ)句:


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 


可以看出在啟動(dòng)時(shí)都先檢查DCO1MHZ的校準(zhǔn)值是否為0xFF,是則進(jìn)入while(1)死循環(huán)。 

正常情況下因?yàn)樾畔⒍蜛不清除沒(méi)問(wèn)題的,但是我測(cè)試BSL下載時(shí),故意給錯(cuò)誤的BSL密碼,導(dǎo)致FLASH都被擦除,發(fā)現(xiàn)轉(zhuǎn)載DCO校準(zhǔn)值的信息段A也被清掉了,于是程序運(yùn)行到上面的代碼時(shí)即進(jìn)入死循環(huán)。


解決辦法

針對(duì)于這種DCO數(shù)據(jù)被擦除的情況,一般的解決辦法是,通過(guò)利用Timer捕捉外部的32.768K晶振或是時(shí)鐘源,然后得到1M,8M或是12Mhz之類的DCO的數(shù)值,然后在直接寫(xiě)入segment flashA里面。 

有兩個(gè)解決方案供選擇:


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 www.ti.com/grace for a GUI- and www.ti.com/msp430ware

 * 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


#define DELTA_1MHZ    244                   // 244 x 4096Hz = 999.4Hz

#define DELTA_8MHZ    1953                  // 1953 x 4096Hz = 7.99MHz

#define DELTA_12MHZ   2930                  // 2930 x 4096Hz = 12.00MHz

#define DELTA_16MHZ   3906                  // 3906 x 4096Hz = 15.99MHz


unsigned char CAL_DATA[8];                  // Temp. storage for constants

volatile unsigned int i;

int j;

char *Flash_ptrA;                           // Segment A pointer

void Set_DCO(unsigned int Delta);


int main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  for (i = 0; i < 0xfffe; i++);             // Delay for XTAL stabilization

  P1OUT = 0x00;                             // Clear P1 output latches

  P1SEL = 0x10;                             // P1.4 SMCLK output

  P1DIR = 0x11;                             // P1.0,4 output


  j = 0;                                    // Reset pointer


  Set_DCO(DELTA_16MHZ);                     // Set DCO and obtain constants

  CAL_DATA[j++] = DCOCTL;

  CAL_DATA[j++] = BCSCTL1;


  Set_DCO(DELTA_12MHZ);                     // Set DCO and obtain constants

  CAL_DATA[j++] = DCOCTL;

  CAL_DATA[j++] = BCSCTL1;


  Set_DCO(DELTA_8MHZ);                      // Set DCO and obtain constants

  CAL_DATA[j++] = DCOCTL;

  CAL_DATA[j++] = BCSCTL1;


  Set_DCO(DELTA_1MHZ);                      // Set DCO and obtain constants

  CAL_DATA[j++] = DCOCTL;

  CAL_DATA[j++] = BCSCTL1;


  Flash_ptrA = (char *)0x10C0;              // Point to beginning of seg A

  FCTL2 = FWKEY + FSSEL0 + FN1;             // MCLK/3 for Flash Timing Generator

  FCTL1 = FWKEY + ERASE;                    // Set Erase bit

  FCTL3 = FWKEY + LOCKA;                    // Clear LOCK & LOCKA bits

  *Flash_ptrA = 0x00;                       // Dummy write to erase Flash seg A

  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation

  Flash_ptrA = (char *)0x10F8;              // Point to beginning of cal consts

  for (j = 0; j < 8; j++)

    *Flash_ptrA++ = CAL_DATA[j];            // re-flash DCO calibration data

  FCTL1 = FWKEY;                            // Clear WRT bit

  FCTL3 = FWKEY + LOCKA + LOCK;             // Set LOCK & LOCKA bit


  while (1)

  {

    P1OUT ^= 0x01;                          // Toggle LED

    for (i = 0; i < 0x4000; i++);           // SW Delay

  }

}


void Set_DCO(unsigned int Delta)            // Set DCO to selected frequency

{

  unsigned int Compare, Oldcapture = 0;


  BCSCTL1 |= DIVA_3;                        // ACLK = LFXT1CLK/8

  TACCTL0 = CM_1 + CCIS_1 + CAP;            // CAP, ACLK

  TACTL = TASSEL_2 + MC_2 + TACLR;          // SMCLK, cont-mode, clear


  while (1)

  {

    while (!(CCIFG & TACCTL0));             // Wait until capture occured

    TACCTL0 &= ~CCIFG;                      // Capture occured, clear flag

    Compare = TACCR0;                       // Get current captured SMCLK

    Compare = Compare - Oldcapture;         // SMCLK difference

    Oldcapture = TACCR0;                    // Save current captured SMCLK


    if (Delta == Compare)

      break;                                // If equal, leave "while(1)"

    else if (Delta < Compare)

    {

      DCOCTL--;                             // DCO is too fast, slow it down

      if (DCOCTL == 0xFF)                   // Did DCO roll under?

        if (BCSCTL1 & 0x0f)

          BCSCTL1--;                        // Select lower RSEL

    }

    else

    {

      DCOCTL++;                             // DCO is too slow, speed it up

      if (DCOCTL == 0x00)                   // Did DCO roll over?

        if ((BCSCTL1 & 0x0f) != 0x0f)

          BCSCTL1++;                        // Sel higher RSEL

    }

  }

  TACCTL0 = 0;                              // Stop TACCR0

[1] [2]
關(guān)鍵字:msp430  DCO  校準(zhǔn)值 引用地址:msp430的DCO校準(zhǔn)值被清除后該如何處理

上一篇:使用Energia開(kāi)發(fā)MSP430 LAUNCHPAD學(xué)習(xí)筆記2--串口通信
下一篇:MSP430如何使用energia

推薦閱讀最新更新時(shí)間:2025-07-02 21:45

MSP430初學(xué):MSP430單片機(jī)C語(yǔ)言基礎(chǔ)(一)
1.1標(biāo)識(shí)符與 關(guān)鍵字 標(biāo)識(shí)符用來(lái)標(biāo)識(shí)程序中某個(gè)對(duì)象的名字,這些對(duì)象可以是語(yǔ)句、數(shù)據(jù)類型、函數(shù)、變量、常量、數(shù)組等。標(biāo)識(shí)符由字母,數(shù)字或下畫(huà)線構(gòu)成,其第一個(gè)字符必須是字母或下畫(huà)線。 例如,count_data,text2 是正確形式,而 2count 是錯(cuò)誤形式。 哈哈,c語(yǔ)言有關(guān)的知識(shí)我就不記錄那么多了,大家都會(huì) 1.2變量 在定義變量時(shí),變量的類型必須與其被儲(chǔ)存的數(shù)據(jù)類型相匹配,以保證程序中變量能夠被正確地使用。當(dāng)指定了變量的數(shù)據(jù)類型時(shí),系統(tǒng)將為它分配若干相應(yīng)字節(jié)的內(nèi)存空間。 C430中變量類型以及描述如下: 這篇博客里,說(shuō)明了一些其它的數(shù)據(jù)類型,在使用430的時(shí)候,會(huì)用到: c++ 基礎(chǔ)數(shù)據(jù)類型 與
[單片機(jī)]
<font color='red'>MSP430</font>初學(xué):<font color='red'>MSP430</font>單片機(jī)C語(yǔ)言基礎(chǔ)(一)
msp430的中斷|中斷優(yōu)先級(jí)|中斷嵌套
MSP430的中斷優(yōu)先級(jí)按所在的向量的大小排列,中斷向量地址越高優(yōu)先級(jí)就越大,但是默認(rèn)的MSP430是不能中斷嵌套的,要想在執(zhí)行某一中斷時(shí)能夠響應(yīng)更高優(yōu)先級(jí)的中斷,需要在低優(yōu)先級(jí)的中斷程序中手動(dòng)打開(kāi)全局中斷便能位,因?yàn)樵谶M(jìn)入中斷服務(wù)子程序時(shí)全局中斷便能位被清零,即禁止響應(yīng)其它中斷。 msp430的指令中,DINT和EINT分別指關(guān)和開(kāi)所有中斷,也就是包涵P1IE、P2IE、WDTIE、TAIE、TBIE、ADC12IE、串口中斷允許的所有中斷允許位為“0”和為“1”。 當(dāng)同時(shí)有多個(gè)中斷來(lái)的時(shí)候才有優(yōu)先級(jí)的考慮(優(yōu)先級(jí)順序可查看向量表) 有中斷響應(yīng)以后自動(dòng)關(guān)閉總中斷,這個(gè)時(shí)候即使來(lái)更高優(yōu)先級(jí)的中斷都不會(huì)響應(yīng) 要中斷嵌套的話,
[單片機(jī)]
MSP430F169(二)——UART中斷(論下)
1. UART中斷工作的機(jī)制 UART只有一個(gè)發(fā)送中斷向量和一個(gè)接收中斷向量,通過(guò)判斷中斷向量的標(biāo)志來(lái)控制數(shù)據(jù)的收發(fā) 1.1 發(fā)送機(jī)制 當(dāng)用戶想發(fā)送數(shù)據(jù)時(shí),UxIFG產(chǎn)生一個(gè)中斷,表明UxTXBUF已經(jīng)準(zhǔn)備好接收數(shù)據(jù)。當(dāng)UxTXBUF接收字符后或中斷被執(zhí)行,URXIFG將會(huì)復(fù)位。 SWRST = 1或PUC會(huì)置位UxIFG (SWRST: 系統(tǒng)復(fù)位) SWRST = 1或PUC會(huì)復(fù)位UxIE 1.2接收機(jī)制 UxRXBUF每次接收一個(gè)字符并加載時(shí),URXIFGx會(huì)產(chǎn)生一個(gè)中斷標(biāo)記 UxRXBUF被讀取時(shí)或中斷被執(zhí)行時(shí),URXIFG被自動(dòng)復(fù)位 當(dāng)PUC或SWRST = 1時(shí)UxRXIE 復(fù)位 建議接收中斷函數(shù)的代碼要精簡(jiǎn),執(zhí)
[單片機(jī)]
基于MSP430F149單片機(jī)的實(shí)時(shí)多任務(wù)操作系統(tǒng)
1 RTOS的基本概念 實(shí)時(shí)多任務(wù)操作系統(tǒng)(RTOS-Real Time Operating System)是根據(jù)操作系統(tǒng)的工作特性而言的。實(shí)時(shí)是指物理進(jìn)程的真實(shí)時(shí)間。實(shí)時(shí)操作系統(tǒng)是指具有實(shí)時(shí)性,能支持實(shí)時(shí)控制系 統(tǒng)工作的操作系統(tǒng)。首要任務(wù)是調(diào)度一切可利用的資源完成實(shí)時(shí)控制任務(wù),重要特點(diǎn)是要滿足對(duì)時(shí)間的限制和要求。 實(shí)時(shí)操作系統(tǒng)中的任務(wù)(Task)有四種狀態(tài):運(yùn)行(Executing),就緒(Ready),掛起(Suspended),休眠(Dormant)。 運(yùn)行:獲得CPU控制權(quán)。 就緒:進(jìn)入任務(wù)等待隊(duì)列。通過(guò)調(diào)度轉(zhuǎn)為運(yùn)行狀態(tài)。 掛起:任務(wù)發(fā)生阻塞,移出任務(wù)等待隊(duì)列,等待系統(tǒng)實(shí)時(shí)事件的發(fā)生而喚醒。從而轉(zhuǎn)為就
[單片機(jī)]
MSP430硬件I2C使用方法——以BH1710和AT24C02為例
硬件的I2C控制器終于調(diào)出來(lái)了,這些天一直在鉆死胡同,其實(shí)最好的參考資料還是TI官方提供的。代碼參考了MSP430的User’s Guide和Application Note,下面提供IAR工程并做簡(jiǎn)要解釋: 采用的芯片:MSP430F1611(USART0 Master方式) 設(shè)備地址:BH1710(寫(xiě)地址0x46,讀地址0x47),AT24C02(寫(xiě)地址0xA0,讀地址0xA1) 接口電路: 一般情況下,大家在調(diào)試I2C設(shè)備時(shí)會(huì)首先考慮采用IO口模擬I2C總線的方法,這樣的方法思路簡(jiǎn)單,只需要給出正確的時(shí)序即可。但是這樣也有意想不到的問(wèn)題,比如時(shí)序的嚴(yán)格性:同樣的時(shí)序,在BH1710上就能跑通而AT24C02上就時(shí)
[單片機(jī)]
<font color='red'>MSP430</font>硬件I2C使用方法——以BH1710和AT24C02為例
基于uC/OS與MSP430的手持?jǐn)?shù)據(jù)采集系統(tǒng)
摘要:本文介紹了使用TI公司的超低功耗MSP430單片機(jī)與uC/OS相結(jié)合設(shè)計(jì)數(shù)據(jù)采集系統(tǒng)的方法,采用了uC/OS的多任務(wù)的軟件設(shè)計(jì)方式代替了傳統(tǒng)的前后臺(tái)式的嵌入式軟件設(shè)計(jì)方法,使得軟件系統(tǒng)模塊化,并且克服了前后臺(tái)式軟件設(shè)計(jì)的弊端,增前了系統(tǒng)的實(shí)時(shí)性。 1前言 近年來(lái)隨著IC設(shè)備功耗和體積的不斷減小,手持設(shè)備的應(yīng)用領(lǐng)域變的越來(lái)越廣泛。但是另一方面,傳統(tǒng)的前后臺(tái)式的軟件設(shè)計(jì)方法卻限制了硬件系統(tǒng)功能的充分發(fā)揮,影響了系統(tǒng)的實(shí)時(shí)性與穩(wěn)定性。本文介紹了一種基于嵌入式操作系統(tǒng)uC/OS上設(shè)計(jì)系統(tǒng)軟件的方法,即克服了原有前后臺(tái)式軟件設(shè)計(jì)的一些弊端,又充分發(fā)揮了硬件特性,增強(qiáng)了系統(tǒng)穩(wěn)定性,很好的解決了手持?jǐn)?shù)據(jù)采集設(shè)備多任務(wù)軟件系統(tǒng)實(shí)時(shí)性不強(qiáng)
[單片機(jī)]
基于uC/OS與<font color='red'>MSP430</font>的手持?jǐn)?shù)據(jù)采集系統(tǒng)
MSP430數(shù)字濾波器設(shè)計(jì)分享
大家一直有在討論使用TI內(nèi)部的數(shù)字濾波器,但是由于其調(diào)用的麻煩,以及匯編代碼看的累,所以經(jīng)常會(huì)碰到各式各樣的問(wèn)題,我以前也有幫工程師解惑,現(xiàn)在做個(gè)分享帖給大家,希望大家多多支持,讓MSP430的作用更為廣泛。 1.軟件介紹:Filter solution 2.軟件界面介紹: 該軟件不僅能設(shè)計(jì)數(shù)字濾波器,模擬濾波器一樣可以搞定。 3.開(kāi)始設(shè)計(jì)數(shù)字濾波器: 4.頻響測(cè)試: 5.代碼生成:
[單片機(jī)]
<font color='red'>MSP430</font>數(shù)字濾波器設(shè)計(jì)分享
基于MSP430的高精度低功耗數(shù)字多功能表設(shè)計(jì)2
2.2.4 電容的測(cè)量 頻率法測(cè)電容,選用NE555與待測(cè)電容形成諧振電路,諧振頻率與電容值之間存在f=1.49/(Ra+2Rb)Cx的關(guān)系,通過(guò)對(duì)電路頻率的測(cè)量就可以得到電容值。 2.2.5 晶體三極管β值測(cè)量 根據(jù)三極管電流IC=βIB的關(guān)系,當(dāng)IB為固定值時(shí),IC反映了β的變化,所以可以將變化的β值轉(zhuǎn)化為與之成正比變化的電流量。采用鏡像恒流源為基極提供10μA的穩(wěn)定電流,控制基極的電流恒定,通過(guò)運(yùn)放將集電極電流信號(hào)轉(zhuǎn)換為電壓信號(hào),輸出電壓等于電阻R19的分壓,進(jìn)而計(jì)算出IC,進(jìn)而通過(guò)公式β=Ic/Ib計(jì)算出結(jié)果。電路如圖5。通過(guò)S1控制可分別是對(duì)NPN型和PNP型三極管的β值測(cè)量。 2.2.6 顯示電路設(shè)計(jì)
[單片機(jī)]
基于<font color='red'>MSP430</font>的高精度低功耗數(shù)字多功能表設(shè)計(jì)2
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章
隨便看看

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京B2-20211791 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved