X5 TimerInit관련 문의
2009.02.06 18:31
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);
댓글 4
-
오재경
2009.02.06 19:40
-
진짜헌터
2009.02.06 21:36
답변 감사합니다.
그렇다면 OSCR = 0으로 설정한 직후부터 값이 증가함으로
while(OSCR == 0); 을 해 놓은 것은 문제가 있는 MCU인지 아닌지를 판별하기 위한 오류검색 절차인 것으로 간주해야 하나요?
그래서 무한루프를 돌면서 WATCHDOG을 발생시켜(지금은 주석화된 부분이지만요) Reset하려는 의도인것 인가요? -
오재경
2009.02.07 04:31
오류를 검사하는 루틴이긴 합니다만 이런 에러는 절대 나올수는 없겠죠
while(OSCR=0); 이 라인을 없애는 것이 낳을것 같습니다만 문제는 없으니 소스 수정은 하지 않을예정입니다. ^^
지적해 주셔서 감사합니다. -
진짜헌터
2009.02.09 16:59
답변 감사합니다. ^^




OSCR = 0 으로 설정하였기 때문에 질문하신 문장
while(OSCR == 0); 에서 OSCR 값은 0보다 큰 값이 됩니다. (0 이 아니어야 하지요)
OSCR 레지스터 값은 클럭입력이 있다면 증가하는 값이므로 증가하지 않는것은 문제가 있는 mcu 겠죠