본문 바로가기
코스웨어/13년 스마트컨트롤러

[20130515 정리노트] 이수현

by 알 수 없는 사용자 2013. 5. 16.
728x90
반응형


폴링 / 인터럽트 비교


 

 공  통  점

차  이  점

 폴  링

  외부 신호에 의해 다른 작업을 수행

  주기적으로 체크

  C언어 : while / for 로 구현

 인터럽트

  특정 사건이 일어나면 체크

  회로로 구현






인터럽트



인터럽트는 C언어 함수의 호출과 비슷하지만 호출없이 언제든지 발생할 수 있다.



interrupt 에는 H/W interrupt 와 S/W interrupt 가 있다

S/W interrupt 는 다음과 같이 불려진다.

os            :    Call Back

window    :    Message

Java         :    Event

Linux        :    Signal




인터럽트 방법


1. 축차능 비교법    ( TC_RC에 적용 )

:    비교할 register C 의 기준값을 정하고 쌓다가 기준과 같아지면 인터럽트



2. 오버플로우 비교법

:    시작점이 되는 기준값을 정하고 쌓다가 overflow 하면 인터럽트









AT91SAM7S256 소스 코드

<timer.c>





1. TC_CMR0 = (TIMER_CLOCK4<<TCCLKS)|(1<<CPCTRG);

분주비 128 = Timer_Clock4

CPCTRG    :    리셋 및 카운터 시작








2. TC_RC0 = 375;

레지스터 C 의 기준값 설정

분주비 128일때 RC값 = 375







3. AIC_IDCR = (1<<TC0);

타이머 카운터 0 인터럽트 비활성화(AIC_IDCR, TC0)




AIC    ( Advanced    Interrupt    Controller )

:    핀이나 주변장치로부터 받은 인터럽트를 콘트롤하여 각 장치에 보낸다


Fast Interrupt    :    우선순위가 높은 인터럽트

IRQ    :    Interrupt Request





4. AIC_SVR[TC0] = (unsigned int) Timer_Handler;

// 타이머 카운터 0 인터럽트 핸들러 등록


<timer.h>

AIC_SVR[TC0] 는 배열이다    ( AIC_SVR 은 주소, 주소[ ]는 배열 )


timer.h 헤더파일에 Timer_Handler 라는 함수가 define 되어 있다.

(unsigned int) Timer_Handler;

함수의 이름은 주소    ( 함수의 호출과는 다르다 )









728x90