[Microchip]/PIC322017. 7. 4. 06:11

dsPIC33 와치독 타이머 테스트

dsPIC33 와치독 타이머 테스트






dsPIC33 와치독 타이머 블록도





와치독 옵션비트


_FWDT(WDTPRE_PR32 & WDTPOST_PS2048 &  WINDIS_OFF & FWDTEN_ON);


/*

**   Watchdog postscaler:

**     WDTPOST_PS1          1:1

**     WDTPOST_PS2          1:2

**     WDTPOST_PS4          1:4

**     WDTPOST_PS8          1:8

**     WDTPOST_PS16         1:16

**     WDTPOST_PS32         1:32

**     WDTPOST_PS64         1:64

**     WDTPOST_PS128        1:128

**     WDTPOST_PS256        1:256

**     WDTPOST_PS512        1:512

**     WDTPOST_PS1024       1:1,024

**     WDTPOST_PS2048       1:2,048

**     WDTPOST_PS4096       1:4,096

**     WDTPOST_PS8192       1:8,192

**     WDTPOST_PS16384      1:16,384

**     WDTPOST_PS32768      1:32,768

*/




dsPIC33 와치독 타이머 테스트 코드

int main(void)

{

int cnt = 0;

int flag =0;

SystemInit();


//Init LED

Led1Init();

Led2Init();


DebugInit(BAUD_115200);

DebugPrint("dsPIC33 EVM WDT Program.\r\n");

Led1Off();

Led2Off();

Delay(500);

Led2On(); 

//와치독 타이머 사용

RCONbits.SWDTEN=1;      

Init_Timer1();


while(1)

{

if(m_TimerTick1>1000)

{

m_TimerTick1 = 0;

                        //와치독 클리어

if(flag)ClrWdt();

Led1Toggle();

}

if(m_TimerTick2>100)

{

m_TimerTick2 = 0;

DebugPrint("time=%d00ms\r\n", cnt++);

}


if(U0_IsGetByte())

{

switch(U0_GetByte())

{

case 'c':

ClrWdt();

DebugPrint("Clear\r\n");

break;

case 'w':

flag ^= 1;

//와치독 테스트

DebugPrint("WDT = %d\r\n", flag);

break;

}

}

}

}





dsPIC33 와치독 타이머 테스트 결과

설정한 시간마다 와치독 타이머에 의해 리셋되는 것을 확인 할 수 있다.



Posted by nexp

댓글을 달아 주세요