바로전에 인터럽트 계층에 대해 설명했다.
왜냐하면 운영체제안에 타이머를 작동시키려고하는데 이를 외부인터럽트 즉,IRQ를 통해서 처리하려고했기때문이다
그럼 오늘은 이러한 IRQ로 넘어온 인터럽트를 처리하기 위해 PXA255에서 제공하는 타이머 레지스터에 대해 알아보자
PXA255에서는 OSMR, OIER, OSCR, OSSR 네 개의 레지스터로 OS타이머를 설정할 수 있다.
OSMR은 OS timer Match Register로서 OSMR0 부터 OSMR3R까지 네개가 존재하며 32비트의 값을 입력할수 있다. 이름처럼 어떤 값과 같은지 비교하는 레지스터이다. 이후 OSCR에 설정된 값이랑 비교된다.
OSCR은 OS timer Counter Register로서 무언가 헤아리는 레지스터 즉, 0부터시작해서 1초가지나면 3686400 이 되는 레지스터이다.
OIER은 OS timer Intrrupt Enable Register로서 OSMR에 셋팅된 값이 OSCR과 같더라도 OIER에서 허용해주지 않으면 인터럽트가 발생하지 않는다. OSMR0부터 3까지 있으므로 OIER은 0부터 3까지 4비트를 셋팅할 수 있다.
OSSR은 OS timer Status Register로서 OIER까지 확인을 거쳐 발생한 인터럽트의 해당 비트를 셋팅한다. OIER처럼 0-3까지 OSMR에 따라 셋팅된다. 또한 OSSR은 인터럽트를 클리어하는 역할도 한다. 해당비트에 1로 셋팅이되면 발생되었던 인터럽트가 클리어되어 (즉, 여기서 우리는 ICPR과 ICIP가 클리어 될것이다.) 다음 인터럽트를 발생시킬 준비를 한다.
이상 이론적인 내용이고, 그럼 여기서 내가 짜야될 코드가 무엇인가 보면,.,..
OSMR1에 3686400이라는 32비트 값을 입력하고, OIER에 1번비트에 1을 셋팅한다(우리가 타이머로 사용할 레지스터는 OSMR1이므로) 이후 OSSR 1번비트에 1로 셋팅한다.
'OS > navilnux' 카테고리의 다른 글
pxa255 인터럽트 계층 이해하기 (1) | 2010.09.17 |
---|---|
exception handler 소스 분석! (0) | 2010.09.15 |
ARM 에서 소프트웨어 인터럽트(Software interrupt)발생시 ISR 과정 이해하기! (0) | 2010.09.14 |
임베디드개발 보드의 LED 활용! (0) | 2010.09.14 |
2. 개발환경 테스트 에러발생 (0) | 2010.09.11 |