728x90
반응형
ARM - 주기적인 시간간격 타이머(PIT)
주기적인 시간간격 타미어(Periodic Interval Timer ; PIT)는 운영체제의 스케쥴러(Scheduler)에게 주기적인 인터럽트를 발생시키기 위하여 사용하는 타이머이다. 시간의 정확성을 높이기 위하여 슬로우 클록이 아니라 마스터 클록을 사용하여 카운터가 동작한다.
PIT는 마스터 클록을 16분주한 MCK/16의 주파수로 동작하며, 20비트 증가형 카운터 CPIV와 12비트 증가형 카운터 PICNT로 구성된다. 이것이 동작하려면 PIT_MR 레지스터에서 PITEN 비트로 이를 인에이블시켜야 한다.
20비트 카운터 CPIV는 0부터 증가하다가 PIT_MR 레지스터의 PIV 값에 이르게 되면 그 다음 주기에서 동작으로 0으로 클리어 되면서 12비트 카운터 PICNT를 1만큼 증가시키게 되며, 이때 인터럽트를 요청할 수 있다. 따라서, 인터럽트 주기는 PIV+1클록 사이클이 되며, 여기서 실제로 인터럽트를 요청할지는 여부는 PIT_MR 레지스터의 PITIEN 비트로 설정한다.
PIT_MR 레지스터의 PIV 값을 변경하기 위하여 새로 라이트하더라도 카운터를 리셋하거나 리스타트 하지 않는다.
CPIV 값이나 PICNT 값을 확인하기 위하여 PIT_PIVR 레지스터를 읽으면 PICNT 값이 0으로 클리어되고 PIT_SR 레지스터의 PITS 비트도 클리어 되어 인터럽트 신호를 종료시킨다. (PIT_PIIR 레지스터는 그렇지 않다.)
어드레스 |
옵셋 |
레지스터 이름 |
엑세스 속성 |
리셋후 초기값 |
0xFFFF_FD30 |
0x00 |
PIT_MR (PIT 모드 레지스터) |
read/write |
0x000F_FFFF |
0xFFFF_FD34 |
0x04 |
PIT_SR (PIT 상태 레지스터) |
read-only |
0x0000_0000 |
0xFFFF_FD38 |
0x08 |
PIT_PIVR (PIT 카운터값 레지스터) |
read-only |
0x0000_0000 |
0xFFFF_FD3C |
0x0C |
PIT_PIIR (PIT 이미지 레지스터) |
read-only |
0x0000_0000 |
실습 - PIT로 인터럽트 발생 LED 쉬프트 하기
//------------------------------------------------------------------------------------------------ |
C++ - 링크드 리스트 구조체를 클래스로 바꾸기
list.h
#ifndef LIST_H |
list.cpp
#include "list.h" |
Node와 List가 클래스로 바뀌었고 각각 관련된 함수와 변수들을 멤버로 만들었다.
Node 클래스의 모든 멤버 변수를 private로 만들고 List 클래스를 친구로 설정하여 Node 클래스의 외부에서는 멤버 변수에 접근하지 못하게 하고 오직 List클래스에서만 접근할수 있게 하였다. 즉, 실수로 Node 객체의 값이 바껴 문제가 발생하는것을 막을 수 있다.
728x90
'코스웨어 > 10년 스마트폰BSP' 카테고리의 다른 글
[BSP]업무일지-서동준-20100713 (0) | 2010.07.15 |
---|---|
[BSP]업무일지-강혜정-20100712 (0) | 2010.07.12 |
[BSP]업무일지 - 김강수 - 20100708 (0) | 2010.07.12 |
[BSP]업무일지 - 김병찬 - 20100707 (0) | 2010.07.08 |
[bsp]업무일지_한경수_20100705 (0) | 2010.07.06 |
[BSP]업무일지-전현수-20100702 (0) | 2010.07.02 |
[BSP]업무일지-박노준-20100701 (0) | 2010.07.01 |
[BSP]업무일지-손대원-20100630 (0) | 2010.06.30 |