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);
}