s3c2440时

时钟分为 :FCLK(主要给cup用的),HCLK (给高速设备提供,如lcd,camera等),PCLK(给低速设备如:usart,i2c等)

这些时钟的源头是12mhz的晶振提供的,它通过pll(锁相环-不知道是什么)来提升时钟频率.

其中pll分为:MPLL(main pll 也就是主要的锁相环),UPLL(USB pll usb 锁相环);

主要说说MPLL                    

                                                                                         ->

12MHZ->MPLL=FCLK->HDIV=HCLK (提供给AHB总线) ->

                                                                                         -> 

                         =FCLK->PDIV=PCLK(提供给APB总线)

来说说大致步骤

1: RESET芯片稳定一段时间之后变为高电平,之后程序才能运行。

2:MPLL根据OM【3:2】的值来选FCLK=晶振频率12MHZ

3:MPLL锁存OM【3:2】的值

4:设置MPLL 在LOCKtime时间内 CPU 停止工作 用了设置MPLL 

5:MPLL设置完之后,等MPLL输出稳定的新频率时钟之后,CPU才以新频率运行。

这只是内部是怎么运行的

下面是写代码操作

.text
.global _start
_start:

            ldr r0, =0x53000000
            mov r1, #0x0
            str r1, [r0]
        /*设置MPLL ,  PCKL : HCLK : PCLK = 400M : 100M : 50M*/
        
        
        /*LOCKTIME(0x4C000000)  =  0xffffffff  这里设不设置无所谓*/    
            ldr r0, =0x4c000000
            ldr r1,    =0xffffffff
            str r1, [r0]
            
        /*CLKDIVN(0x4C000014)  =  0x5 , 周期FCLK : HCLK : PCLK = 1: 4 : 8*/    
            ldr r0, =0x4c000014
            mov r1, #0x5
            str r1, [r0]
            
        /*设置 CPU工作于异步模式,必须这么设置,芯片的时钟NOTE里面有说明*/
        
        mrc p15,0,r0,c1,c0,0
        orr r0,r0,#0xc0000000
        mcr p15,0,r0,c1,c0,0
        
        /*设置 MPLLCON(0x4C000004)   = (92 <<12) | (1 << 4) | (1 <<0)*/
        /*
         *m = MDIV+8 = 92+8=100
         *P = PDIV+2 = 1+2 =3
         *s = SDIV =1
         *FCLK = 2*m*Fin/(P*2^s) = 2*100*12/(3*2^0)
         */
        ldr r0, =0x4C000004    
        ldr r1, =(92 <<12) | (1 << 4) | (1 <<0)    
        str r1, [r0]
        
        /*一旦设置PLL ,锁相环机会锁定locktime 直到PLL输出稳定?/
        /*
         *然后CPU才工作于新的时钟频率FCLK
         *
         /
        
      

之后我们可以看到  同样的一个程序,设置后时钟的程序,led的灯闪的更快了。

猜你喜欢

转载自blog.csdn.net/qq_41609723/article/details/81391396
今日推荐