国产精品久久久久久久久免费,高潮迭起av乳颜射后入,国产对白老熟女正在播放,国产精品igao视频网网址,丰满人妻熟妇乱又伦精品

機電之家資源網(wǎng)
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
MSP43021x1時鐘校準
MSP43021x1時鐘校準
 更新時間:2009-12-7 16:57:43  點擊數(shù):0
【字體: 字體顏色
//******************************************************************************
// MSP430x21x1 Demo - Basic Clock, Implement Auto RSEL SW FLL
//
// Description: Set DCO clock to (Delta)*(4096) using software FLL. DCO clock
// is output on P1.4 as SMCLK. DCO clock, which is the selected SMCLK source
// for Timer_A is integrated over LFXT1/8 (4096) until SMCLK is is equal
// to Delta. CCR2 captures ACLK. To use, Set_DCO Timer_A must be
// operating in continuous mode. Watch crystal for ACLK is required for
// this example. Delta must be kept in a range that allows possible
// DCO speeds. Minimum Delta must ensure that Set_DCO loop can complete
// within capture interval. Maximum delta can be calculated be
// f(DCOx7) / 4096. f(DCOx7) can be found in device specific datasheet.
// ACLK = LFXT1/8 = 32768/8, MCLK = SMCLK = target DCO
// [] To measure SMCLK on P1.4 with the FET, use "Release JTAG on Go"
// in the debugger to have access to the port. Then run the code.
// //* External watch crystal installed on XIN XOUT is required for ACLK *//
/ H. Grewal / A. Dannenberg
// Texas Instruments Inc.
// June 2005
// Built with IAR Embedded Workbench Version: 3.30A
//******************************************************************************
//******************************************************************************

// MSP43021x1時鐘校準,21x1出廠時,在Info Flash保存了四種時鐘的調(diào)整參數(shù)
// 分別是 1MHz,8MHz,12MHz,16MHz
// 由于用戶在下載程序的時候,會將Info Flash擦除,或芯片出廠校準參數(shù)不正確
// 就需要用戶自己校準時鐘。
// 有兩種方法可以校準系統(tǒng)時鐘,1;在用戶程序初始化時校準,
// 2: 單獨運行校準程序,將校準參數(shù)保存到InfoFlash
// 中,用戶程序直接調(diào)用。由于21X1系列的內(nèi)部時鐘
// 精度在整個溫度范圍內(nèi)已經(jīng)達到了2.5%,因此可以
// 用這種方法,減少應用程序占用Flash。
// 要保證CPU供電在3。3V以上
//
// 毛武斌
// 杭州冰河奧特使電子有限公司
// 2006.3.23
// 本程序由TI的例子程序修改而來,使用IAREW430 V3。40A
//******************************************************************************


#include <msp430x21x1.h>

#define DELTA_1M 245
#define DELTA_8M 1954
#define DELTA_12M 2930
#define DELTA_16M 3906

char *pInfoFlash_A;
char AdjBCSCTL1_1M;
char AdjpDCOCTL_1M;
char AdjBCSCTL1_8M;
char AdjpDCOCTL_8M;
char AdjBCSCTL1_12M;
char AdjpDCOCTL_12M;
char AdjBCSCTL1_16M;
char AdjpDCOCTL_16M;
char tmpBCSCTL1;
char tmpDCOCTL;
void Set_DCO (unsigned int delta, char *pBcsctl1_, char *pDcoct_);
void softwareDelay(unsigned int time);
void timeAdelay(unsigned int time);
void main(void)
 {
  WDTCTL = WDTPW + WDTHOLD; // Stop WDT
  // 測試時鐘輸出
  P1OUT = 0;
  P1DIR |= BIT3 + BIT4;;    // P1.3,4 output
  P1SEL |= BIT4;            // P1.4 SMCLK output

 _DINT();
 tmpBCSCTL1 = BCSCTL1;
 tmpDCOCTL = DCOCTL;
 Set_DCO(DELTA_1M, &AdjBCSCTL1_1M, &AdjpDCOCTL_1M);
 Set_DCO(DELTA_8M, &AdjBCSCTL1_8M, &AdjpDCOCTL_8M);
 Set_DCO(DELTA_12M, &AdjBCSCTL1_12M, &AdjpDCOCTL_12M);
 Set_DCO(DELTA_16M, &AdjBCSCTL1_16M, &AdjpDCOCTL_16M);

 BCSCTL1 = tmpBCSCTL1;
 DCOCTL = tmpDCOCTL;
 FCTL2 = FWKEY + FSSEL0 + FN1; // MCLK/3 for Flash Timing Generator
 FCTL1 = FWKEY + ERASE;        // Set Erase bit, allow interrupts
 if(FCTL3 & LOCKA)
  {
   FCTL3 = FWKEY + LOCKA;      // Clear LOCK & LOCKA bits
  }
  pInfoFlash_A = (char *) 0x10C0; // Initialize Flash pointer
  *pInfoFlash_A = 0;              // Dummy write to erase Flash segment A
  FCTL1 = FWKEY + WRT;            // Set WRT bit for write operation

 pInfoFlash_A = (char *) CALDCO_16MHZ_; // Initialize Flash pointer
 *pInfoFlash_A++ = AdjpDCOCTL_16M;
 *pInfoFlash_A++ = AdjBCSCTL1_16M;
 *pInfoFlash_A++ = AdjpDCOCTL_12M;
 *pInfoFlash_A++ = AdjBCSCTL1_12M;
 *pInfoFlash_A++ = AdjpDCOCTL_8M;
 *pInfoFlash_A++ = AdjBCSCTL1_8M;
 *pInfoFlash_A++ = AdjpDCOCTL_1M;
 *pInfoFlash_A = AdjBCSCTL1_1M;
 FCTL1 = FWKEY;                   // Clear WRT bit
 FCTL3 = FWKEY + LOCKA + LOCK;    // Set LOCK & LOCKA bit // Set LOCK bit

 P1OUT |= BIT3;
 for (;;)
 {  
                               // 隔四秒鐘輸出SMCLK
 BCSCTL1 = CALBC1_1MHZ;
 DCOCTL = CALDCO_1MHZ;
 timeAdelay(2);
 P1OUT ^= BIT3;
 softwareDelay(50000);
 P1OUT ^= BIT3;
 BCSCTL1 = CALBC1_8MHZ;
 DCOCTL = CALDCO_8MHZ;
 timeAdelay(2);
 P1OUT ^= BIT3;
 softwareDelay(50000);
 P1OUT ^= BIT3;
 BCSCTL1 = CALBC1_12MHZ;
 DCOCTL = CALDCO_12MHZ;
 timeAdelay(2);
 P1OUT ^= BIT3;
 softwareDelay(50000);
 P1OUT ^= BIT3;
 BCSCTL1 = CALBC1_16MHZ;
 DCOCTL = CALDCO_16MHZ;
 timeAdelay(2);
 P1OUT ^= BIT3;
 softwareDelay(50000);
 P1OUT ^= BIT3;
 }
}

//------------------------------------------------------------------------------

void Set_DCO (unsigned int delta, char *pBcsctl1_, char *pDcoct_) // Set DCO to selected frequency
//------------------------------------------------------------------------------
{
unsigned int Compare, Oldcapture = 0;


BCSCTL1 |= DIVA_3;                // ACLK= LFXT1CLK/8
BCSCTL3 |= XCAP_3;
CCTL2 = CM_1 + CCIS_1 + CAP;      // CAP, ACLK
TACTL = TASSEL_2 + MC_2 + TACLR;  // SMCLK, cont-mode, clear

 while (1)
 {

  while (!(CCIFG & CCTL2));        // Wait until capture occured
  CCTL2 &= ~CCIFG;                 // Capture occured, clear flag
  Compare = CCR2;                  // Get current captured SMCLK
  Compare = Compare - Oldcapture;  // SMCLK difference
  Oldcapture = CCR2;               // Save current captured SMCLK

  if (delta == Compare) break;     // If equal, leave "while(1)"
  else if (delta < Compare)        // DCO is too fast, slow it down
 {
  DCOCTL--;
  if (DCOCTL == 0xFF)
  {
   if (!(BCSCTL1 == (XT2OFF + DIVA_3)))
   BCSCTL1--;                       // Did DCO roll under?, Sel lower RSEL
  }
 }
 else
 {
  DCOCTL++;
  if (DCOCTL == 0x00)
  {
     if (!(BCSCTL1 == (XT2OFF + DIVA_3 + 0x0F)))
     BCSCTL1++;                     // Did DCO roll over? Sel higher RSEL
   }
 }
 softwareDelay(20);
}

  CCTL2 = 0;                        // Stop CCR2
  TACTL = 0;                        // Stop Timer_A
  *pBcsctl1_ = BCSCTL1 & (~DIVA_3);
  *pDcoct_ = DCOCTL;
}

void softwareDelay(unsigned int time)
 {
 while(--time);
 }

void timeAdelay(unsigned int time)
{
 TACTL = TASSEL_1 + MC_2 + TACLR;   // SMCLK, cont-mode, clear
while(time)
{
 while(!(TACTL &TAIFG));
 TACTL &= ~TAIFG;
 time--;
 }
 TACTL = 0;
}

  • 上一篇: MSP430 ADC12模塊應用范例
  • 下一篇: 沒有了
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1