SysCtrl.c에 관한 글을 보았다면 알 수 있듯이 pll(Phase Lock Loop)와 HSPCLK,LSPCLK의 설정을 통해 주변회로 클럭을 설정할 수 있다.
HSPCLK를 필요로 하는 ADC나 EV를 위한 설정을 알아보자.
프로그램을 작성하기 전에 필수적으로 불러오는 함수 InitSysCtrl()을 확인해보자.
void InitSysCtrl(void)
{
// Disable the watchdog
DisableDog();
// Initialize the PLL control: PLLCR and DIVSEL
// DSP28_PLLCR and DSP28_DIVSEL are defined in DSP2833x_Examples.h
InitPll(DSP28_PLLCR,DSP28_DIVSEL);
// Initialize the peripheral clocks
InitPeripheralClocks();
}
1.
InitPll(DSP28_PLLCR,DSP28_DIVSEL);
그냥 값을 넣으면 되었던 2812와는 달리 28335는 위의 DPS28_PLLCR, DPS28_DIVSEL의 값을 정해주어야 한다. 그 정의로 들어가면
#define DSP28_DIVSEL 2
#define DSP28_PLLCR 10
을 확인할 수 있다. 입력 클럭에 대한 PLL의 출력을 10배와 1/2배를 적용한다. 2812에서는 1/2배는 고정되어 있었으나 28335에서는 변경이 가능하다.
2.
InitPeripheralClocks()의 초반 부분을 보면
SysCtrlRegs.HISPCP.all = 0x0001;
SysCtrlRegs.LOSPCP.all = 0x0002;
가 있다. SysCtrl.c에 대하여 게시한 글을 확인하면 0x0001인 상태에서는 SYSCLKOUT/2로 적용된다.
3.
클럭을 넣을 주변회로 결정
SysCtrlRegs.PCLKCR.all = 0x00FF;
위 1,2,3의 결과를 모두 적용할 경우 HISPCP = SYSCLKOUT/2 = (30(MHz)*10/2)/2 = 75MHz일 것이다.