新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430F5418學習筆記----UCS時鐘模塊配置

        MSP430F5418學習筆記----UCS時鐘模塊配置

        作者: 時間:2016-11-28 來源:網絡 收藏
        引言:一年前開始用TI公司的x14x系列超低功耗單片機MSP430F149,感覺與普通的51系列相比,各個外設的功能強大了一些,使用起來沒有很大的區別,但有一個重要的區別就是外部晶振需要正確配置才能使用。現在在用TI的x54x系列的MSP430F5418芯片,發現它的各個外設的集成度更高了(比如所有的外部時鐘和內部時鐘由一個Unified Clock System(UCS)模塊統一管理,內部Uart,IIC,SPI之類的串行接口由Universal Serial Communication Interfaces(USCI)模塊統一管理),使用起來更靈活了,由此帶來的影響就是配置起來也就更麻煩了。(呵呵,要想擁有更強大的功能,還不得花更多的精力去研究它的使用方法?)

        剛剛才把F5418的UCS模塊調通,特此慶祝一番~~

        本文引用地址:http://www.104case.com/article/201611/322782.htm

        動手之前,首先要閱讀TI提供的430x54x Family User Guide(slau208d)和MIXED SIGNAL MICROCONTROLLER,了解一下這種全新的芯片的時鐘模塊的框圖,有個整體把握:



        下面是我翻譯的MIXED SIGNAL MICROCONTROLLER第18頁對UCS的介紹(覺得翻譯不好可別拍磚哦):

        @振蕩器和系統時鐘 (MIXED SIGNAL MICROCONTROLLER, P18)

        在MSP430x5xx家族的器件中,時鐘系統由統一時鐘系統Unified Clock System(UCS)模塊提供,它包含了一個32KHz鐘表石英晶體(XT1 LF Mode),一個內部低功率,低頻率震蕩器(VLO),一個內部平衡的低頻震蕩器(REFO),一個集成的內部數字可控震蕩器(DCO),和一個高頻石英晶體振蕩器(XT1 HF模式或XT2).這個UCS模塊的設計符合了系統對低成本和低功耗的要求,它包含數字鎖頻環(FLL),通過連接一個數字的調制器,使DCO頻率穩定成一個可編程倍數的鐘表石英晶體頻率.其內部DCO提供了一個快速開啟的時鐘源,并能夠在低于5us內穩定.
        統一時鐘系統模塊提供了如下時鐘信號:
        ·Auxiliary輔助時鐘(ACLK),可由32KHz鐘表晶體,高頻晶體,內部低頻振蕩器(VLO),平衡的低頻振蕩器(REFO)或內部數字控制振蕩器(DCO)提供.
        ·Main系統時鐘(MCLK),供CPU使用,信號提供與ACLK相同.
        ·Sub-Main系統子時鐘(SMCLK),供外設模塊使用,信號提供與ACLK相同.
        ·ACLK/n,由ACLK分頻后緩沖輸出,分頻系數可為1,2,4,8,16,32.

        當你不做任何時鐘配置時,你仍然可以像使用普通單片機一樣正常使用它,那么它是時鐘默認是怎么配置的呢?這時候你就得了解USC模塊的默認配置了,這部分在430x54x Family User Guide中第64頁有講解。我的翻譯:

        @Unified Clock System(UCS)操作---430x54x Family User Guide slau208d,P64

        在上電清除信號(PUC)之后,UCS模塊的默認配置是:
        ·XT1 低頻模式被選擇為XT1CLK時鐘的振蕩器。XT1CLK被選擇為ACLK的時鐘源。
        ·DCOCLKDIV作為MCLK的時鐘源。
        ·DCOCLKDIV作為SMCLK的時鐘源。
        ·FLL(鎖頻環)運行被使能,XT1CLK作為FLL參考時鐘,即FLLREFCLK。
        ·XIN和XOUT引腳被設置為通用IO時,XT1保持禁能直到IO口置為XT1操作模式。
        ·如果XT2IN和XT2OUT引腳被設置為通用IO,XT2被禁能。
        在初始狀態,FLL以XT1為參考時鐘的運行默認使能,但XT1被禁止。要使能XT1,相應管腳的PSEL位必須置位。當一個32.768KHz的晶振用作XT1CLK時,出錯的控制邏輯電路直接造成REFOCLK作為ACLK的時鐘源,因為XT1不會立即穩定。一旦振蕩開始信號被獲取到了,FLL就使MCLK和SMCLK穩定到1.048576MHz,f(DCO)=2.097152MHz。
        狀態寄存器控制位(SCG0,SCG1,OSCOFF和CPUOFF)配置MSP430的運行模式,還使能或禁能UCS模塊的部分功能(參考系統復位,中斷,運行模式等章節)。寄存器UCSCTL0到UCSCTL8配置UCS模塊。

        廢話別太多,下面直接看程序:

        如果想將MCLK、SMCLK的時鐘源設為外部高速晶振(我接的是16MHz),在初始化時加入以下程序段

        //使用XT2振蕩器
        P5SEL |= BIT2 + BIT3;//配置管腳為晶振輸入
        UCSCTL6 &= ~XT2OFF; //打開XT2振蕩器
        do
        {
        UCSCTL7 &= ~(XT2OFFG; //清除振蕩器XT2失效標志
        SFRIFG1 &= ~OFIFG; // 清除振蕩器失效標志
        //上面這句必須有,否則起振了也不會分配成功
        }
        while (UCSCTL7 & XT2OFFG); //判斷XT2是否起振
        UCSCTL6 &= ~XT2DRIVE0;//設置驅動電流最小以降低功耗
        UCSCTL4 |= SELM__XT2CLK + SELS__XT2CLK; //選擇MCLK、SMCLK為XT2
        //UCSCTL5 |= DIVS__2;//SMCLK設為2分頻

        如果想讓外部的XT1,XT2和內部DCO同時使用,并從端口輸出以便于測試,連接圖示意(參考ti例程)
        // MSP430F5418
        // -----------------
        // /| | XIN|-
        // | | | 32kHz
        // ---|RST XOUT|-
        // | |
        // | |
        // | XT2IN|-
        // | | HF XTAL or Resonator (add capacitors)
        // | XT2OUT|-
        // | |
        // | P1.0|--> ACLK = 32kHz Crystal Out
        // | |
        // | P1.6|--> SMCLK = High Freq Xtal or Resonator Out
        // | |
        // | P2.0|--> MCLK = Default DCO Frwequency
        // | |
        // | |


        在初始化是加入以下程序段:


        P1DIR = BIT6 + BIT0; //
        P1SEL = BIT6 + BIT0; // 配置管腳為時鐘 SMCLK, ACLK輸出
        P2DIR = BIT0; //
        P2SEL = BIT0; // 配置管腳為時鐘 MCLK輸出

        P5SEL |= 0x0C; // 配置管腳為晶振XT2輸入
        P7SEL |= 0x03; // 配置管腳為晶振XT1輸入


        UCSCTL6 &= ~(XT1OFF + XT2OFF); // 打開XT1,XT2振蕩器
        UCSCTL6 |= XCAP_3; // 為XT1加載內部電容


        // 循環直到XT1,XT2 和 DCO 穩定起振
        do
        {
        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
        // 清除振蕩器XT2,XT1,DCO失效標志
        SFRIFG1 &= ~OFIFG; // 清除振蕩器失效標志
        }while (SFRIFG1&OFIFG); // 判斷所有晶振是否起振


        UCSCTL6 &= ~XT2DRIVE0; // 根據晶振頻率減小XT2驅動電流以降低功耗
        UCSCTL4 |= SELA__XT1CLK + SELS__XT2CLK;


        // 選擇SMCLK時鐘源為XT2, ACLK時鐘源為XT1,MCLK默認為DCO/2



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 达孜县| 德阳市| 宣威市| 宜良县| 班玛县| 壤塘县| 巢湖市| 广西| 罗田县| 黎平县| 阜新市| 福建省| 华阴市| 柳林县| 溧阳市| 常州市| 沈阳市| 宕昌县| 日土县| 云龙县| 洪湖市| 惠安县| 介休市| 澎湖县| 潜江市| 河曲县| 六盘水市| 辉南县| 息烽县| 永济市| 团风县| 同德县| 辉县市| 兴义市| 黔东| 永济市| 翁牛特旗| 马鞍山市| 西平县| 阳东县| 长沙县|