OS Timer Interrupt가 죽어라고 발생하여, 해결방법을 찾던 중... 얼핏 ezboot 소스가 생각났
다. 음... 이놈도 필시 OS Timer를 이용하리라고 생각되어 소스를 뒤지던중...
내가 생각지도 못한 코드를 발견했는데... 그 코드는 이러하였다.

OSSR = OSMR0

이것이 무엇인고 하니, Status Register를 0으로 초기화 하는게 아니라 1로 초기화 하는 것이
었다.

SA-1110 Manual의 표에는 다음과 같이 나와있다.


bit 0, M0, 0 - OS Timer match Register 0 has not matched the OS Timer counter sind the last clear.
1 - OS Timer match Register 0 has matched the OS Timer counter.



이런 문장을 보면 누구라도 딱 일케 생각하지 않나??

"음.. 그래 그람 초기화는 0으로 해야지.. ㅡ_ㅡ;;;"

쿨럭..;;; 나만 그런가.. ㅡ_ㅡ;;;; 머 그래가지고 0으로 초기화 하니 줄창 Interrupt가 끝도없이
뜨더랬다.
1로 초기화 하는 코드를 보고 다시 SA-1110 Manual을 보니 다음과 같은 문장이 눈에 들어온다.

"and cleared by writing a one to the proper bit position. Writing zeros to this register has no effect."

컥.. ㅡㅁㅡ... 이말인 즉슨 걍 니가 멀하든간에 해당 비트를 무조건 1로 셋팅해라는 말이었던 것인가??
실제로 IRQ Interrupt가 발생했을 때, OSSR를 보면 해당 비트에 1이 설정되어있다. 그리고 다시
내가 1로 한번더 설정해 줘야 정상적인 Interval로 Interrupt가 발생된다.
쿠.. 쿨럭...;;;
나보고 어쩌라고.. ㅡㅁㅡ;;;;;
죽어도 모를뻔 했다. 쩝쩝.... 여튼 황당.... ㅡ_ㅡ;;;;

+ Recent posts