[资料分享与下载] 飞思卡尔单片机DZ60---时钟初始化

[复制链接]
niuyaliang 发表于 2015-2-27 19:40 | 显示全部楼层 |阅读模式
  1. [cpp] view plaincopy
  2. /* Derivative peripheral declarations */     
  3. #include "derivative.h"      
  4.      
  5. /* Definitions and function prototypes */     
  6. #include "DZ60_init.h"      
  7.   
  8. //FEI切换到PEE模式,外部晶振=4MHZ,总线频率=8MHZ(  中文手册,P144页)  
  9. /* External crystal oscillator = 4MHz */   
  10. /* FOR PEE mode:  
  11. Bus_Clock = (1/2)*[(Osc_clock/Ref_div)*VCO_div]/(Bus_div) = 8MHz */   
  12.   
  13. #define BUS_DIV 0       /* Bus divider = 0, divide by 1 */   
  14. #define REF_DIV 2       /* Reference divider = 2, divide by 4 */            
  15. #define VCO_DIV 4       /* VCO divider = 4, multiply by 16 */   
  16.   
  17.   
  18. void MCG_Init(void)   
  19. {  
  20.    SOPT1_COPT = 0;  
  21.    
  22. //1  
  23.    //a)  
  24.     MCGC2_BDIV    = BUS_DIV; //0  
  25.     MCGC2_RANGE   = 1;  
  26.     MCGC2_HGO     = 1;  
  27.     MCGC2_EREFS   = 1;  
  28.     MCGC2_ERCLKEN = 1;  
  29.       
  30.     //b)  
  31.     while(!MCGSC_OSCINIT); //循环检测,表明EREFS选择的晶体已经完成初始化  
  32.       
  33.     //c)  
  34.     MCGC1_CLKS = 0X02;  
  35.     MCGC1_RDIV = 0X07;  
  36.     MCGC1_IREFS = 0;  
  37.       
  38.     //d)  
  39.     while( MCGSC_IREFST );  
  40.       
  41.     //e)  
  42.     while( (MCGSC_CLKST ^ 0X02));  
  43.       
  44. //2  
  45.     //a)  
  46.     MCGC2_LP = 1;  
  47.       
  48.     //b)  
  49.     MCGC1_RDIV = REF_DIV;//2;  
  50.       
  51.     //c)  
  52.     MCGC3_PLLS = 1;  
  53.     MCGC3_VDIV = VCO_DIV;//4;  
  54.       
  55.     //d)  
  56.     MCGC2_LP = 0;  
  57.       
  58.       
  59.     //e)  
  60.     while(!MCGSC_PLLST);  
  61.       
  62.       
  63.     //f)  
  64.     while(!MCGSC_LOCK);  
  65.       
  66.   //3   
  67.     //a)  
  68.     MCGC1_CLKS = 0X00;  
  69.       
  70.     //b)  
  71.     while((MCGSC_CLKST ^ 0X03));  
  72.   
  73. }   


 楼主| niuyaliang 发表于 2015-2-27 19:45 | 显示全部楼层
  1. [cpp] view plaincopy
  2. <pre class="cpp" name="code">/******************************************************************************************
  3. | FUNCTION NAME    :  MCU_SetBusClock  
  4. | CALLED BY        :  xxxx                                                
  5. | PRECONDITIONS    :  xxxx                                          
  6. | INPUT PARAMETERS :  xxxx
  7. | OUTPUT PARAMETERS:  xxxx                                                      
  8. | RETURN VALUE     :  xxxx
  9. | DESCRIPTION      :  set MCGOUT and bus frequency,BDIV = 1, VDIV = 16, RDIV = 4, OSC = 4.332MHz
  10. |                     MCGOUT = [(OSC / RDIV) * VDIV] / BDIV;
  11. |                     MCGOUT = [(4.332MHz / 4) * 16] / 1 = 17.328MHz;
  12. |                     Bus frequency = MCGOUT / 2 = 8.664MHz
  13. | NOTE             :  xxxx                                 
  14. |*******************************************************************************************/  
  15.   
  16. void MCU_SetBusClock(void)    /* XOSC 4.332MHZ,BUS clock 8.664MHZ */  
  17. {  
  18.   
  19.   //SOPT1 = 0;                  /* STOP WATCH DOG */  
  20.    SOPT1_COPT =3;               /* enable watchdog 1s timeout*/  
  21.   /*After RESET start in FEI Mode   
  22.   FEI > FBE     ***************************************   
  23.   Set MCGC2:
  24.   BDIV[6:7] | RANGE | HGO | LP | EFERS | ERCLKEN | EREFSTEN | */  
  25.   MCGC2 = 0X36;     
  26.   while(!MCGSC_OSCINIT);      /* Wait till OSCINIT in MCGSC is one */  
  27.   _asm SEI;                   /* MUST BLOCK INTERRUPTS  */  
  28.   MCGC1 = 0XB8;               /* Set MCGC1:| CLKS[6:7] | RDIV[3:5] | IREFS | IRCLKEN | IREFSTEN | */   
  29.   while(MCGSC_IREFST);        /* Wait till IRFEST in MCGSC is zero */  
  30.   while((MCGSC_CLKST)^(0x02));/* Wait till external clock source is selected */   
  31.    
  32.   /* FBE > BLPE **************************************** */     
  33.   MCGC2_LP = 1;  
  34.   MCGC1 = 0X90;               /* Set the range of frequency divider  4.332m/4  (1mhz~2mhz) */  
  35.   MCGC3 = 0X44;               
  36.   while(!MCGSC_PLLST);        /* Wait till Source of PLLS clock is set to PLL clock */  
  37.    
  38.   /* BLPE > PBE **************************************** */  
  39.   /* Clear LP to switch to PBE Mode*/  
  40.   MCGC2_LP = 0;  
  41.   while(!MCGSC_LOCK);         /* Wait for PLL to lock */  
  42.    
  43.   /* PBE > PEE ***************************************** */   
  44.   /* Select clock source */  
  45.   MCGC1 = 0X10;  
  46.     while((MCGSC_CLKST)^(0x03));/* Check if output of the PLL is selected as current clock mode */     
  47.   _asm CLI;                   /* CAN ENEBLE INTERRUPTS */   
  48. }</pre><br>  
  49. <pre></pre>  
  50. <p> </p>  
  51. <p> </p>  
  52. <p> </p>  
  53. <p> </p>  
  54. <p> </p>  
  55. <p>  </p>  
  56. <pre> </pre>  
  57. <pre> </pre>  
  58. <pre></pre>  
  59. <pre></pre>  
  60. <pre></pre>  
ccw1986 发表于 2015-2-28 08:43 | 显示全部楼层
谢谢分享啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部