xmega - WDT reset 와치독 타이머
C언어,ARM / 2020. 6. 27. 22:03
프로그램(펌웨어)가 비정상 종닥으로 멈추거나, 특정 위치에서 무한루프를 돌게되어, 장비가 멈추어 있는 경우가 발생할 수 있다. 이런 경우, 와치독 타이머라는것을 사용하여, 자동으로 재부팅하도록 하는 기능이다. main 루프안에서 계속 와치독타이머를 리셋시켜주어야한다. 프로그램 어디선가 계속 멈추어 있을 경우, 자동으로 재부팅(cpu 리셋)된다. void WDT_init(void); inline void WDT_init(void) { unsigned char s,n; // Optimize for speed //#pragma optsize- // Save interrupts enabled/disabled state s=SREG; // Disable interrupts cli(); // Watchdog Timer: On n=(WDT.CTRL & (~WDT_PER_gm)) |WDT_PER3_bm//시간조정 |WDT_ENABLE_bm | WDT_CEN_bm; CCP=CCP_IOREG_gc; WDT.CTRL=n; // Watchdog window mode: Off n=(WDT.WINCTRL & (~WDT_WEN_bm)) | WDT_WCEN_bm; CCP=CCP_IOREG_gc; WDT.WINCTRL=n; // Restore interrupts enabled/disabled state SREG=s; // Restore optimization for size if needed //#pragma optsize_default } #define WDT_reset() asm("WDR") 사용예) main() { ... WDT_init(); while(1) { ... cpu_sleep(); WDT_reset(); } }
'C언어,ARM' 카테고리의 다른 글
xmega - timer0 (0) | 2020.06.27 |
---|---|
ATmega,Xmega,AVR Studio - 문자열 프로그램메모리에서 읽어오기 (0) | 2020.06.27 |
error C2143: syntax error : missing ';' before 'type' (0) | 2020.06.20 |
AVR Studio - cannot execute empty custom programming tool command. please provide again (0) | 2020.06.20 |
stm32 - WDT (0) | 2020.06.20 |