Welcome 微信登录

首页 / 操作系统 / Linux / S3C2440裸机实验

快要毕业了,毕业之前再重新把这些实验从头到尾的练习一遍,先开始裸机的吧,这些都是以前搞过的东西,现在应该会比较快。。开始吧!时钟对于电子设备来说都是非常重要的,它是传输数据的一个基准,如果没有这个基准的话将导致系统的混乱。S3C2440的频率有两种输入方式:外部时钟源和内部晶振(如下图)                                          输入的频率一般是比较低的比如2440的就只有12M,而2440的主频可以达到460M,这就需要对输入频率通过PLL锁相环进行倍频先来看下这个CLOCK的结果图:         从上面的结果图可以看出输入频率OSC首先经过MPLL倍频整个系统时钟主要有几个组成:FCLK,HCLK,PCLKFCLK:是个cpu提供时钟HCLK:用于AHB总线,中断控制器,LCD控制器,内存控制器提供时钟PCLK:用于APB总线,通常给IIC,WDT,IIS,ADC, UART, GPIO, RTC and SPI.等外设提供时钟下面是整个时钟系统的几种工作方式:正常,空闲,慢,睡眠模式。慢模式:也就是没有通过MPLL倍频,直接就由外部时钟源或者内部晶振来提供时钟,所以系统的功耗有时钟源来决定 设置系统时钟主要配置几个寄存器: MPLLCON:设置P,S,M的值CLKDIVN:设置FCLK,HCLK,PCLK的比例关系MPLL和UPLL的计算公式不同:Mpll = (2*m * Fin) / (p * 2s) m = M (the value for divider M)+ 8, p = P (the value for divider P) + 2,s = SDIV UPLL Control RegisterUpll = (m * Fin) / (p * 2S)m = (MDIV + 8), p = (PDIV + 2), s = SDIV另外需要特别注意的一点,如果直接采用上面的式子计算输出频率很可能出错,因为会发生溢出,故采用下面的式子:FOUT = 2 * m * (Fin/100) / (p*2S)×100, 下面是核心代码:
  1. //为了使FCLK=400Mhz,我们取m=92,p=1,s=1.也可以根据手册p255频率表中的数值,   
  2.  //但是没有400Mhz的组合。可以选接近的   
  3. rMPLLCON = 92<<12 | 1<<4 |1 ;   
  4. rCLKDIVN = 2<<1 | 1;   //FCLK:HCLK:PCLK = 1:4:8   
  5. rCAMDIVN = 0<<9 ;    //配置CLKDIVN[2:1]与改位有关,可参考手册说明   
  6. m = (rMPLLCON>>12) &0xff ;   
  7. p = (rMPLLCON>>4) & 0x3f;   
  8. s = rMPLLCON & 0x3;   
  9. FCLK = ((m+8) * 2 * (FIN/100)) / ( (p+2) * (1 << s))*100;   
  10. PCLK = FCLK >>3;