도와주세요!!
글 수 15,339
2009.02.06 09:31:08 (*.105.51.63)
6673
ezboot 소스의 main폴더에 있는 time.c소스를 보면 다음의 초기화 과정이 있습니다.
void TimerInit(void)
{
// 타이머 카운터값을 초기화 한다.
OSCR = 0;
// 타이머에 의해서 발생하는 모든 인터럽트를 금지한다.
OIER = 0;
// 타이머 카운터값이 0이 될때까지 기다린다.
while(OSCR == 0); // WatchDoc() ;
// 매치 레지스터0를 0으로 설정하여 매치값을 0으로 한다.
OSMR0 = 0;
// 매치 레지스터를 매치 상태값을 초기화 한다.
OSSR = OSSR_M0;
// 타이머 오버 플로어 감시 변수를 초기화 한다.
numOverflows = 0;
}
여기서 OSCR은 3.6864Mhz clock의 rising edge마다 증가한다고 PXA255 developer_manual에 나타나 있는데요.
위 코드중 "타이머 카운터값이 0이 될때까지 기다린다"는 문구와 코드가 서로 않맞은게 아닌가 싶습니다.
처음에는 Sync를 위한 것인가 싶었는데 그게 아닌것 같아서 질문을 드립니다.
제 생각에는 위 while코드를 다음과 같이 변경해야 하지 않나요?
while (OSCR != 0);
2009.02.06 12:36:47 (*.105.51.63)
답변 감사합니다.
그렇다면 OSCR = 0으로 설정한 직후부터 값이 증가함으로
while(OSCR == 0); 을 해 놓은 것은 문제가 있는 MCU인지 아닌지를 판별하기 위한 오류검색 절차인 것으로 간주해야 하나요?
그래서 무한루프를 돌면서 WATCHDOG을 발생시켜(지금은 주석화된 부분이지만요) Reset하려는 의도인것 인가요?
그렇다면 OSCR = 0으로 설정한 직후부터 값이 증가함으로
while(OSCR == 0); 을 해 놓은 것은 문제가 있는 MCU인지 아닌지를 판별하기 위한 오류검색 절차인 것으로 간주해야 하나요?
그래서 무한루프를 돌면서 WATCHDOG을 발생시켜(지금은 주석화된 부분이지만요) Reset하려는 의도인것 인가요?
OSCR = 0 으로 설정하였기 때문에 질문하신 문장
while(OSCR == 0); 에서 OSCR 값은 0보다 큰 값이 됩니다. (0 이 아니어야 하지요)
OSCR 레지스터 값은 클럭입력이 있다면 증가하는 값이므로 증가하지 않는것은 문제가 있는 mcu 겠죠