色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MSP430F5529 番外(二)糾正XT1配置錯誤

          MSP430F5529 番外(二)糾正XT1配置錯誤

          作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
          錯誤更正說明:
          在第三章講UCS時鐘系統(tǒng)的時候,實驗二是將MCLK和ACLK配置為XT1(F5529的XT1為32.768KHZ)
          當(dāng)時的程序如下:
          /*1.配置IO口5.4和5.5為XT1功能。*/
          /*2.配置XCAP為XCAP_3,即12PF的電容。*/
          /*3.清除XT1OFF標(biāo)志位。*/
          /*4.等待XT1起振。*/
          #include<msp430.h>
          void main(void){
          P1SEL |= BIT0;
          P1DIR |= BIT0;//測量ACLK用
          P2SEL |= BIT2;
          P2DIR |= BIT2;//測量SMCLK用
          P7SEL |= BIT7;
          P7DIR |= BIT7;//測量MCLK用
          P5SEL |= BIT4|BIT5; //配置為XT1功能,電路板上晶振接于這兩腳
          UCSCTL6 |= XCAP_3;//配置電容為12pF
          UCSCTL6 &= ~XT1OFF; //使能XT1
          /*下面是很重要的一步:*/
          /* XT1剛剛起振的時候可能有錯誤,導(dǎo)致時鐘錯誤標(biāo)志位置位,必須先清零*/
          /*OFIFG即Osc Fault Flag,位于SFRIFG1中*/
          while(SFRIFG1 & OFIFG) //如果有時鐘錯誤{
          UCSCTL7 &=~(XT2OFFG+DCOFFG+XT1LFOFFG);//清除3種時鐘錯誤標(biāo)志
          SFRIFG1&=~(OFIFG);//清除時鐘錯誤標(biāo)志位}
          UCSCTL4&=(UCSCTL4&(~(SELA_7|SELM_7)))|SELA_0|SELM_0;
          //將SMCLK和MCLK時鐘源配置為XT1
          }
          當(dāng)時由于手里沒有頻率計,并沒有測輸出。
          昨天實際測了一下,發(fā)現(xiàn)該程序存在問題:實際測量MCLK為876KHZ左右,ACLK雖然是32.768KHZ,但我感覺還是內(nèi)部的REFO。
          解答如下:這是官方的例程

          ACLK = SMCLK = MCLK =XT1 =32768

          本文引用地址:http://cafeforensic.com/article/201611/322795.htm

          int main(void)
          {
          WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

          P1DIR |= BIT0; // ACLK set out to pins
          P1SEL |= BIT0;
          P2DIR |= BIT2; // SMCLK set out to pins
          P2SEL |= BIT2;
          P7DIR |= BIT7; // MCLK set out to pins
          P7SEL |= BIT7;

          P5SEL |= BIT4+BIT5; // Select XT1

          UCSCTL6 &= ~(XT1OFF); // XT1 On
          UCSCTL6 |= XCAP_3; // Internal load cap
          UCSCTL3 = 0; // FLL Reference Clock = XT1

          // Loop until XT1,XT2 & DCO stabilizes - In this case loop until XT1 and DCo settle
          do
          {
          UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
          // Clear XT2,XT1,DCO fault flags
          SFRIFG1 &= ~OFIFG; // Clear fault flags
          }while (SFRIFG1&OFIFG); // Test oscillator fault flag

          UCSCTL6 &= ~(XT1DRIVE_3); // Xtal is now stable, reduce drive strength

          UCSCTL4 = SELA_0 + SELS_0 + SELM_0; // SMCLK = MCLK =ACLK = LFTX1

          }

          注意劃紅線的語句,要用等號賦值。因為默認 SELS 和SELM的值是不為0的,所以用或賦值的話會出錯。

          默認值請看下表:



          關(guān)鍵詞: MSP430F5529XT1配置錯

          評論


          技術(shù)專區(qū)

          關(guān)閉