왼쪽의 그림은 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 세팅 예제 프로그램이다.
{
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();
}
댓글 없음:
댓글 쓰기