블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항

최근에 올라온 글

프로그램(펌웨어)가 비정상 종닥으로 멈추거나, 특정 위치에서 무한루프를 돌게되어, 장비가 멈추어 있는 경우가 발생할 수 있다.
이런 경우, 와치독 타이머라는것을 사용하여, 자동으로 재부팅하도록 하는 기능이다.
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();
	}
}
Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함