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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MSP430(F5529)學(xué)習(xí)筆記——UCS配置詳解

          MSP430(F5529)學(xué)習(xí)筆記——UCS配置詳解

          作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

          理解了上面這些,可以理解TI官方例子中的代碼了,官方代碼中的相關(guān)部分如下:
          [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;

          都在前面講到的范圍內(nèi),由于前面的范圍有重疊部分,例子代碼中的值是TI的工程師根據(jù)上面這些參數(shù)選取的比較合理的值。
          到這里,我相信大家配合芯片手冊和本文,都能明白DCO配置相關(guān)部分的原理了,下面是將DCO參考時鐘選為XT1,并將DCOCLK倍頻到25M的詳細(xì)代碼:
          [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. *默認(rèn)狀態(tài)下:ACLK=FLLREFCLK=XT1SMCLK=MCLK=DCOCLKDIVXT2關(guān)閉
          54. *為了不產(chǎn)生XT1LFOFFG,將ACLK和FLLREFCLK設(shè)置為REFOCLK
          55. *并打開XT2OFF,否則XT2將處于無法使用狀態(tài)
          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. }

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

          上一頁 1 2 3 下一頁

          評論


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

          關(guān)閉