이 블로그 검색

2011년 12월 18일 일요일

Dynamic Power Management(PLL..)











왼쪽의 그림은 PLL관련한 블록도이다.
CLKIN를 통해 외부클락을 받아 CCLK, SCLK를 생성한다.
CCLK는 코어 클럭을 SCLK는 시스템 클럭을 의미한다.
CCLK >= SCLK의 등식이 성립한다.
해당 제어 부부은 아래의 레지스터 리스트에서 볼수 있다.




















표1. MSEL Encodings
Signal name
MSEL[]
VCO Frequency
DF = 0                      DF = 1
0
64x
32x
1
1x
0.5x
2
2x
1x
N = 3-62
Nx
0.5Nx
63
63x
31.5x
1 MSEL DF parameter를 조정하여, CLKIN VCO로 만드는 배율을 나타내고 있다.


표 2. Core Clock Ratio

Signal Name
CSEL[]
Divider Ratio
VCO/CCLK
Example Frequency Ratio(MHz)
VCO                 CCLK
00
1
300
300
01
2
300
150
10
4
400
100
11
8
400
50

2 VCO CCLK 비율을 나타내고 있다. CSEL parameter 조정하여 Core clock 조정한다


Table 3. System Clock Ratio

Signal Name
SSEL[]
Divider Ratio
VCO/SCLK
Example Frequency Ratio(MHz)
VCO                 SCLK
0000
Reserved
N/A
N/A
0001
50
50
0010
150
75
0011
150
50
0100
200
50
0101
300
60
0110
360
60
N = 7-15
N:1
400
400/N

3 VCO SCLK의 비율을 나타내고 있다. SSEL parameter를 조정하여 System clock을 조정한다.
만일,
 SSEL을 변경한다면,SCLK가 변하면서 주변장치의 data를 잃어버릴수도 있으니 주의하시오.















 -  PLL output clock SCLK CCLK로 나눈다
 -  PLL_DIV parameter 변경하여, CCLK SCLK frequency 변경 있다













PLL control 하는 operation이다
- 여러 register 값을 변경하여 PLL 동작을 제어한다.

 
- PLL processor operating mode 지시한다









-  Processor PLL_LOCKED bit set할떄까지의 SCLK를 정의한다.
-  Lock counter SCLK 1cycle 1 증가한다
-  Lock counter PLL_LOCKCNT register 정의된 값까지 증가하면, PLL_LOCKED bit setting된다.
















아래에는 간단 pll 세팅 예제 프로그램이다.


 void init_pll()
{
     unsigned int imask;
    *pPLL_CTL = SET_MSEL(16); /* Write new value for (400MHz)to PLL_CTL.*/
    ssync();
    *pVR_CTL = /*--- REPROGRAM VR_CTL ---*/
                          0x00B0 | /* Bits #7,6 set by default */
                          0x3000 | /* FREQ=00 indicates hibernate. FREQ=11 indicates non-Hibernate */
                          0;
     imask = cli(); /* VR_CTL Re-programming Sequence. */
     idle(); /* Core is idle'ed to allow the PPL to re-lock. */
     sti( imask );
/*----- REPROGRAM PLL_DIV ------*/
     *pPLL_DIV = SET_SSEL(4); /* PLL_DIV can be re-programmed on the fly.*/
   /* No core idling required. */
     ssync();
}

댓글 없음:

댓글 쓰기