이번 주 금요일에 급히 쉘 관련 파트를 끝내고, 주말 내내 PIT 컨트롤러쪽 작업을 하면서 문서를 정리하고 있었습니다. 처음에는 진도가 꽤나 잘 나가는 듯 했으나, 언제나 그렇듯이 문제에 봉착했습니다.

PIT 컨트롤러의 카운터 0를 사용하는 경우, IRQ 0 인터럽트가 발생하기 때문에 인터럽트를 통해 간접적으로 타이머가 완료되었음을 알 수 있습니다. 하지만 인터럽트가 "언제나" 가능하지는 않기 때문에, 직접 카운터 0를 읽어서 처리하는 함수를 만들었습니다. 처음 작성한 코드는 대략 아래와 같았습니다.


실행해보니 뭔가 이상했습니다. 함수를 실행하자마자 루프를 바로 빠져나왔기 때문입니다. 이상해서 곰곰히 코드를 보고 있었는데 도무지 감을 잡을 수가 없었습니다. 그러던 중... 갑자기 머리를 팍~!! 하고 뭔가 스쳤습니다. 차를 구할 때 이전 값보다 현재 값이 크다고 생각했기 때문에, (현재 값 - 이전 값)으로 구했는데.... 타이머의 카운터는 증가하는 것이 아니라 1씩 감소했던 겁니다. 즉 이전 값이 현재 값보다 더 크다는 것이지요. ㅠㅠ 코드가 제대로 동작하려면 아래와 같이 순서를 바꿔야 합니다.


어흑... 이것 때문에 몇시간을 날렸는지 모르겠네요. 이것 말고도 손가락으로 초를 쟀다가 시계의 초보다 1.5배는 빨리 카운팅해서... ㅠㅠ 디버깅을 계속한 걸 생각하면... 흑흑... ㅠㅠ 왜 손가락으로 카운팅하는 속도와 초침이 움직이는 속도가 같다고 생각했는지... ㅠㅠ

그래도 어떻게든 해결했으니 다행입니다. 에궁... 이번 주 안에 RTDSC랑 RTC 쪽도 끝내려고 하는데... 시간이 될런지 모르겠군요. 이번 주도 미친듯이 집에 일찍 와야겠습니다.

다들 좋은 밤 되시고, 이번 주도 무사 칼퇴근하시기 바랍니다. ;) 야근불가~!!!

+ Recent posts