[3단계 - PMC Init - STEP 2] (전력관리 컨트롤러 초기화)
[소스 코드]
|
AT91C_BASE_PMC->PMC_PLLR = AT91C_CKGR_USBDIV_1 |
AT91C_CKGR_OUT_0 |
(16 << 8) |
(AT91C_CKGR_MUL & (72 << 16)) |
(AT91C_CKGR_DIV & 14);
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCK));
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
|
[소스 분석]
크리스털의 클럭 주파수는 18.432Hz
이다. 이 값을 DIV로 나눈 값에 ~를 곲하면 96MHz가 나온다.
이 값이 PLL의 클럭 주파수가 된다.
그리고 이 값을 2로 나눈 값인 48MHz가 UDP의 주파수가 된다.
UDP가 필요한 이유는 프로그램을 Write할 때 USB를 사용하기 때문이다.
line 1: CKGR_USBDIV_1 = (0x1 << 28) : (PLL 출력 주파수 / 2)를 사용한다.
line 2 : AT91C_CKGR_OUT_0 = (0x0 <<14) : PLL 출력 주파수가 80~160MHz의 범위에 있다.
line 4 : AT91C_CKGR_MUL (0x7FF << 16) : PLL 회로에 의하여 주파수가 (MUL + 1)배로 곱해진다.
line 5 : AT91C_CKGR_DIV (0xFF << 0) : 메인 클록이 DIV로 나누어져 PLL 회로에 공급된다.
line 6 : PMC_SR의 2번 비트가 1이 될 때까지 기다린다. (PLL이 lock될 때까지 기다린다.)
line 7 : PMC_SR의 8, 9, 10번 비트 중 하나가 1이 될 때까지 기다린다. (마스터 클록이 ready 상태가 될 때까지 기다린다.)
[매크로 분석]
1단계 분석 방법과 동일
[매크로 분석 결과]
((volatile unsigned int *)0xFFFFFC2C) = //내용 추가