zoukankan      html  css  js  c++  java
  • Main.C时钟设定

    void Main(void)   

           时钟设定:400M 100M  50M    得到  1:4:8  进而需要得到 hdivn=2 ; pdivn=1;

       i = 2 ;    //用于选择CUP核的频率;以及对应MPLL_vall ;key 参数;

      switch ( i )

            case 2: //400
                      key = 14;                                    key=14 指  hdivn_val (FCLK:HCLK) 1:4 ; hdivn=2
                      mpll_val = (92<<12)|(1<<4)|(1);   MPLL=2*(92+8)*12M/(1+2)*2^1=400M 
                      break;

    //init FCLK=400M, so change MPLL first
     ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);三个参数传递给rMPLLCON
     ChangeClockDivider(key, 12);                         12   指    (HCLK:PCLK)  1:2   ; pdivn=1
     cal_cpu_bus_clk();             400M 100M  50M    得到  1:4:8  进而得到 hdivn=2 ; pdivn=1;计算过程

    1 //*************************[ MPLL ]*******************************
    2 void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
    3 {
    4     rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv; //根据频率需求推算各个参数,传递给rMPLLCON,总分总的程序模式
    5 }
     1 // Modified for 2440.
     2 void ChangeClockDivider(int hdivn_val,int pdivn_val)
     3 {
     4     int hdivn=2, pdivn=0;
     5     
     6      // hdivn_val (FCLK:HCLK)ratio hdivn
     7      // 11           1:1       (0)
     8      // 12           1:2       (1)
     9      // 13           1:3       (3) 
    10      // 14           1:4       (2)
    11      // pdivn_val (HCLK:PCLK)ratio pdivn
    12      // 11           1:1       (0)
    13      // 12           1:2       (1)
    14     switch(hdivn_val) {
    15         case 11: hdivn=0; break;
    16         case 12: hdivn=1; break;
    17         case 13:
    18         case 16: hdivn=3; break;
    19         case 14: 
    20         case 18: hdivn=2; break;
    21     }
    22     
    23     switch(pdivn_val) {
    24         case 11: pdivn=0; break;
    25         case 12: pdivn=1; break;
    26     }
    27     
    28     //Uart_Printf("Clock division change [hdiv:%x, pdiv:%x]
    ", hdivn, pdivn);
    29     rCLKDIVN = (hdivn<<1) | pdivn;
    30 
    31     switch(hdivn_val) {    分频时钟在1:6或者1:8时,也会对摄像头时钟构成影响
    32         case 16:        // when 1, HCLK=FCLK/8.
    33             rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<8); 
    34         break; 
    35         case 18:     // when 1, HCLK=FCLK/6.
    36             rCAMDIVN = (rCAMDIVN & ~(3<<8)) | (1<<9); 
    37         break;
    38     }
    39     
    40     if(hdivn!=0)            
    41         MMU_SetAsyncBusMode();
    42     else 
    43         MMU_SetFastBusMode();
    44 }
     1 static void cal_cpu_bus_clk(void)
     2 {
     3     U32 val;
     4     U8 m, p, s;
     5     
     6     val = rMPLLCON;
     7     m = (val>>12)&0xff;
     8     p = (val>>4)&0x3f;
     9     s = val&3;
    10 
    11     //(m+8)*FIN*2 不要超出32位数!
    12     FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1<<s))*100;
    13     
    14     val = rCLKDIVN;
    15     m = (val>>1)&3;
    16     p = val&1;    
    17     val = rCAMDIVN;
    18     s = val>>8;
    19     
    20     switch (m) {
    21     case 0:
    22         HCLK = FCLK;
    23         break;
    24     case 1:
    25         HCLK = FCLK>>1;
    26         break;
    27     case 2:
    28         if(s&2)
    29             HCLK = FCLK>>3;
    30         else
    31             HCLK = FCLK>>2;
    32         break;
    33     case 3:
    34         if(s&1)
    35             HCLK = FCLK/6;
    36         else
    37             HCLK = FCLK/3;
    38         break;
    39     }
    40     
    41     if(p)
    42         PCLK = HCLK>>1;
    43     else
    44         PCLK = HCLK;
    45     
    46     if(s&0x10)
    47         cpu_freq = HCLK;
    48     else
    49         cpu_freq = FCLK;
    50         
    51     val = rUPLLCON;
    52     m = (val>>12)&0xff;
    53     p = (val>>4)&0x3f;
    54     s = val&3;
    55     UPLL = ((m+8)*FIN)/((p+2)*(1<<s));
    56     UCLK = (rCLKDIVN&8)?(UPLL>>1):UPLL;
    57 }
  • 相关阅读:
    MySQL问题记录——2003-Can't connect to MySQL server on 'localhost'(10038)
    MySQL学习——管理用户权限
    Java技巧——将前端的对象数组通过Json字符串传到后端并转换为对象集合
    JDK1.8新特性——使用新的方式遍历集合
    JDK1.8新特性——Collector接口和Collectors工具类
    Java技巧——比较两个日期相差的天数
    MySQL学习——操作自定义函数
    MySQL学习——操作存储过程
    MySQL问题记录——ERROR 1728 (HY000)
    Linux上安装nginx
  • 原文地址:https://www.cnblogs.com/wangh0802PositiveANDupward/p/3427773.html
Copyright © 2011-2022 走看看