쿨럭..;;; 어제 실컷 해보고 알았는데, SWI 명령으로 발생하는 interrupt는 Interrupt핀을
통해 발생하는 Interrupt와는 달랐다.
Vector Table에 위치하는 곳도 다르고, 무엇보다 중요한것은 SVC Mode라는 것이다.
음냥.. Reset을 했을때 Mode가 이미 SVC 이기땜시롱 SWI를 통해 Interrupt를 발생
시키면 그냥 brench 한것과 마찬가지 결과가 된다.

또 IRQ Interrupt와 SWI의 다른점은
SWI Interrupt는 lr에 들어가있는 Address가 SWI 바로 뒤의 명령을 가리키고
IRQ Interrupt는 lr에 들어가있는 Address가 다음에 수행할 명령의 다음 명령(??)

Thumb Mode가 아닌 경우 Next Instruction + 4
Thumb Mode인 경우 Next Instruction + 2
를 가지므로 lr에 4 or 2를 sub해 줘야 정상적으로 동작된다는 결론~~

으으.. ㅡ_ㅡ;;;
x86은 int 명령하고 IRQ Interrupt가 별차이가 없는데... 야들은 왜 일케 틀린지 모르겠
다.
여튼 SWI로 테스트를 해보겠다는 나의 생각은 무~ 로 돌아가고... ㅡ0ㅜ/~~
그냥 OS Timer를 이용해서 해야겠다.

쉽지 않구만... ㅡ_ㅡ;;;;;;;;

+ Recent posts