결론부터 요약

Direct Vector Method

  1. EIIC 값 확인
  2. Exception Cause(EIINTn) = EIIC – Exception Cause Code Base Address
  3. EIINT Offset = EIINTn x 0x10 + 0x100
  4. RBASE 혹은 EBASE + EIINT Offset

RINT가 0이라고 가정, RINT가 1이면 걍 0x100임

자! 이제 어떻게 인터럽트 핸들러가 실행되는 걸까? 상세 설명을 보시라

A. 장치로 인터럽트가 들어왔다고 치자. 그러면 EIIC 라는 레지스터에 Exception Cause Code가 뜬다.

 

B. Exception Cause(EIINTn) = EIIC value – Exception Cause Code Base Address

User Int라고 가정하자. 아래 표를 보면 EIINT 0 – 511까지 총 512개가 있고 Exception Cause Code는 0x1000 – 0x11FF임을 알 수 있다. 즉 Exception Cause Code Base Address이 0x1000이다. (당연한 내용이지만 0x11FF – 0x1000 = 0x200 즉 512)

만약 EIIC에 값이 0x1007로 들어왔다면 EIIC Offset = 0x1007 – 0x1000 = 7임을 알 수 있다.

 

아래는 그냥 참고용이다 Exception Cause Code의 시작 주소가 각기 다른 것을 확인하시라

C. EIINTn Offset 을 구해보자

EIINTn priority 0이 0x100부터 시작이다. 그러니까 아까 예시의 7번은 0x170이 되겠다

이걸 공식화 하면 0x100 + Exception Cause x 0x10

 

D. 마무리

PSW.EBV 값에 따라 RBASE 혹은 EBASE 값에 이전 단계에서 구한 EIINTn Offset을 더하면 끝

Table Reference Method는요?

설명하기 귀찮다

INTBP + Exception Cause x 4 하면 된다.

 

startup 코드에서 미리 INTBP 설정하는 거 잊지 말고오오~~~~

Posted by 쵸코케키

블로그 이미지
chocokeki
쵸코케키

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함