新聞中心

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

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

        作者: 時間:2016-11-28 來源:網絡 收藏

        理解了上面這些,可以理解TI官方例子中的代碼了,官方代碼中的相關部分如下:
        [cpp]view plaincopy
        1. if(fsystem<=630)//fsystem<0.63MHz
        2. UCSCTL1=DCORSEL_0;
        3. elseif(fsystem<1250)//0.63MHz
        4. UCSCTL1=DCORSEL_1;
        5. elseif(fsystem<2500)//1.25MHz
        6. UCSCTL1=DCORSEL_2;
        7. elseif(fsystem<5000)//2.5MHz
        8. UCSCTL1=DCORSEL_3;
        9. elseif(fsystem<10000)//5MHz
        10. UCSCTL1=DCORSEL_4;
        11. elseif(fsystem<20000)//10MHz
        12. UCSCTL1=DCORSEL_5;
        13. elseif(fsystem<40000)//20MHz
        14. UCSCTL1=DCORSEL_6;
        15. else
        16. UCSCTL1=DCORSEL_7;

        都在前面講到的范圍內,由于前面的范圍有重疊部分,例子代碼中的值是TI的工程師根據上面這些參數選取的比較合理的值。
        到這里,我相信大家配合芯片手冊和本文,都能明白DCO配置相關部分的原理了,下面是將DCO參考時鐘選為XT1,并將DCOCLK倍頻到25M的詳細代碼:
        [cpp]view plaincopy
        1. #include
        2. voiddelay(){
        3. volatileunsignedinti;
        4. for(i=0;i!=5000;++i){
        5. _NOP();
        6. }
        7. }
        8. voidSetVcoreUp(unsignedintlevel)
        9. {
        10. //OpenPMMregistersforwrite
        11. PMMCTL0_H=PMMPW_H;
        12. //SetSVS/SVMhighsidenewlevel
        13. SVSMHCTL=SVSHE+SVSHRVL0*level+SVMHE+SVSMHRRL0*level;
        14. //SetSVMlowsidetonewlevel
        15. SVSMLCTL=SVSLE+SVMLE+SVSMLRRL0*level;
        16. //WaittillSVMissettled
        17. while((PMMIFG&SVSMLDLYIFG)==0);
        18. //Clearalreadysetflags
        19. PMMIFG&=~(SVMLVLRIFG+SVMLIFG);
        20. //SetVCoretonewlevel
        21. PMMCTL0_L=PMMCOREV0*level;
        22. //Waittillnewlevelreached
        23. if((PMMIFG&SVMLIFG))
        24. while((PMMIFG&SVMLVLRIFG)==0);
        25. //SetSVS/SVMlowsidetonewlevel
        26. SVSMLCTL=SVSLE+SVSLRVL0*level+SVMLE+SVSMLRRL0*level;
        27. //LockPMMregistersforwriteaccess
        28. PMMCTL0_H=0x00;
        29. }
        30. voidmain(void){
        31. WDTCTL=WDTPW+WDTHOLD;
        32. P1SEL&=~BIT1;
        33. P1DIR|=BIT1;
        34. P1SEL|=BIT0;//ACLK
        35. P1DIR|=BIT0;
        36. P2SEL|=BIT2;//SMCLK
        37. P2DIR|=BIT2;
        38. P7SEL|=BIT7;//MCLK
        39. P7DIR|=BIT7;
        40. P5SEL|=BIT4|BIT5;
        41. UCSCTL6|=XCAP_3;
        42. UCSCTL6&=~XT1OFF;
        43. SetVcoreUp(1);//一次提高Vcore電壓等級,具體請參考手冊
        44. SetVcoreUp(2);
        45. SetVcoreUp(3);
        46. __bis_SR_register(SCG0);
        47. UCSCTL0=0;
        48. UCSCTL1=DCORSEL_6;
        49. UCSCTL2=FLLD_1|380;
        50. __bic_SR_register(SCG0);
        51. __delay_cycles(782000);
        52. /*
        53. *默認狀態下:ACLK=FLLREFCLK=XT1SMCLK=MCLK=DCOCLKDIVXT2關閉
        54. *為了不產生XT1LFOFFG,將ACLK和FLLREFCLK設置為REFOCLK
        55. *并打開XT2OFF,否則XT2將處于無法使用狀態
        56. **/
        57. //UCSCTL6&=~(XT2DRIVE0|XT2DRIVE1|XT2OFF);
        58. while(SFRIFG1&OFIFG){//CheckOFIFGfaultflag
        59. UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);//ClearOSCflautFlags
        60. SFRIFG1&=~OFIFG;//ClearOFIFGfaultflag
        61. }
        62. UCSCTL4=UCSCTL4&(~(SELS_7|SELM_7))|SELS_3|SELM_3;
        63. while(1){
        64. P1OUT^=BIT1;
        65. delay();
        66. }
        67. }

        好了,經過上面的四個實驗,我們都能正確使用MSP430F5XX的UCS了,如果有什么疑問,歡迎留言討論。

        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 东丽区| 弥勒县| 绥化市| 屯昌县| 沈丘县| 平罗县| 高要市| 康马县| 兰考县| 桐柏县| 石渠县| 织金县| 密云县| 翼城县| 芮城县| 黎川县| 舟山市| 闸北区| 河北省| 美姑县| 崇州市| 修武县| 武宁县| 瓦房店市| 呼和浩特市| 天门市| 锦州市| 邯郸县| 安岳县| 沛县| 扎囊县| 榆树市| 兴文县| 奇台县| 峡江县| 枝江市| 白水县| 奉贤区| 梨树县| 博罗县| 米泉市|