본문 바로가기

[Microchip]/dsPIC

dsPic33 내부 클럭 사용시 설정하기

dsPic33 내부 클럭 사용시 설정하기



외부 8Mhz 클럭 사용시 설정

_FOSCSEL(FNOSC_PRIPLL); // 제1 오실레이터(XT, HS, EC)와 PLL 사용

_FOSC(FCKSM_CSECME & OSCIOFNC_OFF  & POSCMD_XT);

// OSC2 핀 클럭 출력, 제1 오실레이터 XT 크리스탈 모드

//클럭 스위칭(Clock Switching)과 Fail Safe Clock Monitor 사용 설정

_FWDT(FWDTEN_OFF); // 왓치독 타이머 사용 중지



void SystemInit(void)

{

//Fcy(인스트럭션 클럭) 클럭 계산 : 4.3.4절 동작 주파수 계산 참조

//Fcy = Fosc / 2 = [ Fxtal X M / (N1 x N2 ) ] / 2

//Fcy = [ 8MHz X 40 / ( 2 X 2 ) ] / 2 = 80MHz / 2 = 40MHz (40MIPS)


PLLFBD=38; // M=40

CLKDIVbits.PLLPOST=0; // N1=2

CLKDIVbits.PLLPRE=0; // N2=2

OSCTUN=0; // FRC 클럭 사용, 튜닝시 필요


RCONbits.SWDTEN=0;       //왓치독 타이머 사용 중지 


while(OSCCONbits.LOCK!=1); //PLL LOCK 까지 기다림


}





내부 RC OSC 사용시 설정

_FOSCSEL(FNOSC_FRC & IESO_OFF);

_FOSC(FCKSM_CSECMD & OSCIOFNC_ON & POSCMD_NONE); 

_FICD(ICS_PGD2 & JTAGEN_OFF);

_FGS(GWRP_OFF & GCP_OFF);

_FWDT(FWDTEN_OFF); // 왓치독 타이머 사용 중지




void SystemInit(void)

{

//Fcy(인스트럭션 클럭) 클럭 계산 : 4.3.4절 동작 주파수 계산 참조

//Fcy = Fosc / 2 = [ Fxtal X M / (N1 x N2 ) ] / 2

//Fcy = [ 8MHz X 40 / ( 2 X 2 ) ] / 2 = 80MHz / 2 = 40MHz (40MIPS)



     PLLFBD = 38;   // M = 76

     CLKDIVbits.PLLPOST = 0;     // N2 = 2

     CLKDIVbits.PLLPRE=0;     // N1=2


     __builtin_write_OSCCONH(0x01);

     __builtin_write_OSCCONL(0x01);

     while (OSCCONbits.COSC != 0b001);


while (OSCCONbits.LOCK != 1);

}


반응형