인터럽트에 관한 좀 엉뚱한 질문 드립니다.
글쓴이: muzie / 작성시간: 목, 2009/05/28 - 10:41오후
일단 인터럽트의 정의에 대해서는 알고 있습니다.
커널소스를 조금 보니, 인터럽트 핸들러에 인터럽트 시에 불리는 함수를 등록하는 것 같더군요.
그래서 궁금합니다.
현재 임베디드 장비 부트로더에 작업을 하고 있습니다.
BLOB에 인터럽트 핸들러를 구현해야하는데,
이것을 어떻게 해야하는지 잘 모르겠습니다.
정확히는 USB에 관련된 루틴입니다만
USB가 플러그인 되면 Developer's manual상에는 ICPR에 USB관련된 레지스터의 비트값이 세팅이 됩니다.
아마도 이 비트값이 인터럽트가 들어왔다는 신호가 걸리면
인터럽트 핸들러에 등록한 함수가 불리어지는 구조라고 생각하고 있습니다.
그렇다면 만약에,
void doingA(){ }
라는 함수가 있을 때, 부트로더 상에서 USB가 플러그인이 되고 인터럽트가 걸려 레지스터 비트값이 세팅되면
이 사실은 누가 알며, 누가 저 doingA라는 함수를 부르게 되나요?
말이 조금 꼬였는데,
조금 쉽게 설명하자면 인터럽트가 걸릴때 그것을 받아들이는(인식하는) 주체는 그것을 어떻게 알게 되나요?
초보의 궁금증을 풀어주세요 :)
Forums:
참고만 하세요.
인터럽트가 CPU에 도달하기 전에 ICPR 등등의 인터럽트 관련 레지스터가 세팅이 됩니다.
IVT(Interrupt Vector Table)을 참조해서 CPU는 발생한 인터럽트 번호에 맞는 ISR을 호출하게 되지요.
CPU가 하는 일은 거기까지 입니다. doingA가 ISR에 등록된 함수라면 인터럽트가 발생되었을 때 CPU는 doingA를 호출해 보고 단지 이 함수에서 리턴이 될 때까지 기다립니다.
그 다음은 프로그래머의 몫이죠. 가령 ISR 함수에서 여러 인터럽트 관련 레지스터 및 기타 레지스터를 읽어 해야 할 일을 결정할 수 있죠.
댓글 달기