TMS3202014. 8. 19. 15:35

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일 것이다.


Posted by 십자성군