본문 바로가기

[AVR]/AVR_EVM

AVR 와치독(Watchdog) 타이머 사용하기

AVR 와치독(Watchdog) 타이머 사용하기
MCU가 예외 상황으로 멈춰 있을때 리셋을 걸어 주어야 하는데.. 이때 Watchdog를 사용할 수 있다.
초기화는 WDTCR레지스터의 비트3을 설정해주면 와치독 타이머가 동작한다.
이때 주의 사항은 MCUSR레지스터의 WDRF비트를 0으로 설정해 주어야 한다.

와치독 타이머가 동작하면 설정한 주기 이내로 레지스터 값을 클리어 해 주어야 하는데
#asm("WDR")
로 가능하다.

WIN AVR을 이용하면 wdt.h에 기본 함수가 정의 되어 있어 간단히 사용할 수 있다.


AVR Watchdoc 타이머 사용 예제 소스코드
#include <avr/wdt.h>

#define  WDTO_15MS   0
#define  WDTO_30MS   1
#define  WDTO_60MS   2
#define  WDTO_120MS   3
#define  WDTO_250MS   4
#define  WDTO_500MS   5
#define  WDTO_1S   6
#define  WDTO_2S   7 


void main(void)
{
   :
   
    //Watchdog 초기화 - ATmega162에서는 MCUSR레지스터가 MCUCSR이다.

    MCUCSR &=~(1<<WDRF);
    wdt_enable(WDTO_500MS);


    while(1)
   {
      :  
      //주기적으로 와치독 클리어
      if(gTimerTickWD>400)
      {
          gTimerTickWD = 0;
          wdt_reset();
      }
   }
  }
반응형