新聞中心

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

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

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

理解了上面這些,可以理解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;

都在前面講到的范圍內(nèi),由于前面的范圍有重疊部分,例子代碼中的值是TI的工程師根據(jù)上面這些參數(shù)選取的比較合理的值。
到這里,我相信大家配合芯片手冊和本文,都能明白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. *為了不產(chǎn)生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. }

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

上一頁 1 2 3 下一頁

評論


技術專區(qū)

關閉