<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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. *默認狀態(tài)下:ACLK=FLLREFCLK=XT1SMCLK=MCLK=DCOCLKDIVXT2關閉
          54. *為了不產生XT1LFOFFG,將ACLK和FLLREFCLK設置為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. }

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

          上一頁 1 2 3 下一頁

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();