新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430(F5529)學習筆記——UCS配置詳解

        MSP430(F5529)學習筆記——UCS配置詳解

        作者: 時間:2016-11-28 來源:網絡 收藏
        MSP430(F5529)相比MSP430(F149)來講,功能更加強大。

        UCS簡介
        MSP430F5XX/MSP430F6XX系列器件的UCS包含有五種時鐘源,依次是:XT1CLK、VLOCLK、REFOCLK、DCOCLK和XT2CLK。這五種時鐘的詳細介紹請參考該系列芯片的指導手冊,其中XT1CLK、VLOCLK、REFOCLK和XT2CLK跟MSP430F1XX系列沒有太大區別,學習配置起來也比較簡單。

        UCS上電默認狀態

        PUC后,UCS模塊的默認狀態如下:

        本文引用地址:http://www.104case.com/article/201611/322859.htm
        [html]view plaincopy
        1. (1)XT1處于LF模式作為XT1CLK時鐘源。ACLK選通為XT1CLK。
        2. (2)MCLK選通為DCOCLKDIV
        3. (3)SMCLK選通為DCOCLKDIV
        4. (4)FLL使能,且將XT1CLK作為FLL參考時鐘。
        5. (5)XIN和XOUT腳設置為通用IO,XIN和XOUT配置為XT1功能前,XT1保持禁用。
        6. (6)如果可用的話,XT2IN和XT2OUT被設置為通用IO且保持禁止狀態。

        清楚UCS上電默認狀態是非常重要的,這對于理解后面的配置邏輯來說非常重要。

        UCS時鐘源切換

        由于REFOCLK、VLOCLK、DCOCLK(這里暫時這么認為)默認狀態下是可用的,所以,切換的時候只需要通過UCSCTL4來配置ACLK、SMCLK和MCLK的時鐘源即可,而XT1CLK和XT2CLK需要根據硬件的具體配置情況確定,所以,這兩者的配置比起前三者來講,就有些不同了。下面,我們做三個實驗:

        (1)將MCLK和SMCLK配置REFOCLK、VLOCLK
        REFOCLK和VLOCLK是芯片默認提供的,只要芯片正常工作,這兩個時鐘就會正常工作,因此,該時鐘配置非常簡單,只需要修改UCSCTL4,將SELS和SELM配置為對應的選項VLOCLK或者REFOCLK即可,具體代碼如下:
        [cpp]view plaincopy
        1. #include
        2. voidmain(void){
        3. WDTCTL=WDTPW+WDTHOLD;
        4. P1SEL|=BIT0;
        5. P1DIR|=BIT0;//測量ACLK用
        6. P2SEL|=BIT2;
        7. P2DIR|=BIT2;//測量SMCLK用
        8. P7SEL|=BIT7;
        9. P7DIR|=BIT7;//測量MCLK用
        10. //UCSCTL4=UCSCTL4&(~(SELS_7|SELM_7))|SELS_1|SELM_1;//將SMCLK和MCLK配置為VLOCLK
        11. UCSCTL4=UCSCTL4&(~(SELS_7|SELM_7))|SELS_2|SELM_2;//將SMCLK和MCLK配置為REFOCLK
        12. while(1);
        13. }

        上面的代碼就實現了將SMCLK和MCLK切換為VLOCLK和REFOCLK,ACLK的操作也是同樣的,不作過多解釋。
        (2)將MCLK和SMCLK配置XT1CLK

        我手頭上的開發板XT1外接的是32.768K的手表時鐘晶振,XT1CLK的配置要分為以下幾步:

        [cpp]view plaincopy
        1. 1.配置IO口5.4和5.5為XT1功能。
        2. 2.配置XCAP為XCAP_3,即12PF的電容。
        3. 3.清除XT1OFF標志位。
        4. 4.等待XT1起振。

        具體的代碼如下:
        [cpp]view plaincopy
        1. #include
        2. voidmain(void){
        3. WDTCTL=WDTPW+WDTHOLD;
        4. P1SEL|=BIT0;
        5. P1DIR|=BIT0;//測量ACLK用
        6. P2SEL|=BIT2;
        7. P2DIR|=BIT2;//測量SMCLK用
        8. P7SEL|=BIT7;
        9. P7DIR|=BIT7;//測量MCLK用
        10. P5SEL|=BIT4|BIT5;//將IO配置為XT1功能
        11. UCSCTL6|=XCAP_3;//配置電容為12pF
        12. UCSCTL6&=~XT1OFF;//使能XT1
        13. while(SFRIFG1&OFIFG){
        14. UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);//清除三類時鐘標志位
        15. //這里需要清除三種標志位,因為任何一種
        16. //標志位都會將OFIFG置位
        17. SFRIFG1&=~OFIFG;//清除時鐘錯誤標志位
        18. }
        19. UCSCTL4=UCSCTL4&(~(SELS_7|SELM_7))|SELS_0|SELM_0;//將SMCLK和MCLK時鐘源配置為XT1
        20. while(1);
        21. }

        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 冷水江市| 通城县| 南阳市| 雅安市| 施甸县| 富裕县| 大关县| 白朗县| 宽甸| 永济市| 九江市| 全椒县| 沾化县| 北流市| 商丘市| 瑞安市| 松溪县| 伊金霍洛旗| 弥渡县| 桃江县| 龙南县| 荃湾区| 南昌市| 页游| 象州县| 万载县| 姚安县| 安平县| 壤塘县| 交城县| 五指山市| 林西县| 盐城市| 丽江市| 尼玛县| 铁力市| 临邑县| 连云港市| 宣恩县| 罗山县| 卢氏县|