博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Main.C时钟设定
阅读量:5959 次
发布时间:2019-06-19

本文共 3176 字,大约阅读时间需要 10 分钟。

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 pdivn12      // 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]\n", 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<
>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 else31 HCLK = FCLK>>2;32 break;33 case 3:34 if(s&1)35 HCLK = FCLK/6;36 else37 HCLK = FCLK/3;38 break;39 }40 41 if(p)42 PCLK = HCLK>>1;43 else44 PCLK = HCLK;45 46 if(s&0x10)47 cpu_freq = HCLK;48 else49 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<
>1):UPLL;57 }

 

转载于:https://www.cnblogs.com/wangh0802PositiveANDupward/p/3427773.html

你可能感兴趣的文章
【极简壁纸】桌面壁纸美图推荐_2019/01/27
查看>>
Docker入门(一)用hello world入门docker
查看>>
SQLite读写同步之WAL机制
查看>>
CSS中左上朝向三角形(Top-Left Triangle)的几种制作方式
查看>>
swoole安装
查看>>
[LeetCode] 333. Largest BST Subtree
查看>>
JMS系列(五)-oracle esb接收jms消息
查看>>
Nginx的配置(入门)
查看>>
Tensorflow学习之建造神经网络
查看>>
MySQL集群搭建(2)-主主从模式
查看>>
Framework 核心服务之 PackageManagerService 钻研(1)- 启动流程
查看>>
使用IntelliJ IDEA新建Java Web后端resfulAPI模板
查看>>
XDEBUG 从入门到精通
查看>>
JavaScript[19] -- 字符串
查看>>
javascript基础学习一(变量)
查看>>
【Nginx源码研究】Nginx中FastCGI浅析
查看>>
阿里推全球首家人工智能服饰店,随时“翻阅”50万淘宝红人穿搭锦囊
查看>>
如何将 emoji 当成单色 icon 使用
查看>>
PHP快速生成现代化form表单,就是好用
查看>>
由浅入深学习lodash的debounce函数
查看>>