발생원인
코딩중 codevision의 코드 생성기능을 사용하여 타이머 세팅 코드를 이클립스에 붙여넣기 하였다.
비교일치 인터럽트와 input capture 인터럽트를 사용하였는데 비교일치의 경우 인터럽트 서비스 루틴(이하 ISR)을 정의해 주지 않았다.
이러한 경우 어떻게 될까?.....
이유없이 무한 RESET 되었다. 그것도 일정시간이 지난후에......(ㅠㅠ)
완젼 짜증났었음......
main 문에 'start'란 문구를 uart를 통해 출력을 했다.
그리고 그밑에 while(1)이 있었음에도 불구하고....
'start'란 문구가 반복하여 나왔다.
이것때문에 128 모듈을 하나 더 만들어버렸다... 그럼에도 똑같은 현상이 일어나네......
(어차피 128 모듈이 하나 더 필요하긴 했다.)
그래서 이런저런 코딩을 변경하던중 인터럽트가 2개이고 ISR 이 하나 정의되지 않은것을 찾아내었다.
그럼 왜?.... 하필 RESET 인가?.....
그림에서와 같이 인터럽트가 발갱하게 되면 IVT(Interrpt Vector Table)을 참조하게 된다.
IVT에 있는 주소값을 참조하여 ISR로 이동하게 되고 ISR이 끝나면 메인 프로그램으로 복귀하게 된다.
ISR을 선언하지 않아 IVT에 들어가게될 주소값이 존재하지 않게 되면
ISR은 0으로 남게 되고 인터럽트 발생시 리셋 인터럽트를 발생시키게 되는것이다. (리셋의 IVT의 주소값은 0이다.)
항상 코드 생성기를 사용하다보니 전혀 생각지도 못한 응답이 나와버렸다....
어쩌면 당연한.....
역시 소자는 거짓말을 하지 않는것인가?..... 문제는 유저에게 있는것이지........
오늘 하루도 여러모로 유저불량을 체험하며 하루를 마감하는군.......
LED 테스트 하면서는 오실로스코프 때문에 전원이 Vdd로 올라가지 않아
FET로 LED가 스위칭 되지 않는 어처구니 없는 실수의 원인을 찾으려고 삽질한걸 생각하면.....
여러모로 배운것도 많고 아쉬운 것도 많은 날이다.
코딩중 codevision의 코드 생성기능을 사용하여 타이머 세팅 코드를 이클립스에 붙여넣기 하였다.
비교일치 인터럽트와 input capture 인터럽트를 사용하였는데 비교일치의 경우 인터럽트 서비스 루틴(이하 ISR)을 정의해 주지 않았다.
이러한 경우 어떻게 될까?.....
이유없이 무한 RESET 되었다. 그것도 일정시간이 지난후에......(ㅠㅠ)
완젼 짜증났었음......
main 문에 'start'란 문구를 uart를 통해 출력을 했다.
그리고 그밑에 while(1)이 있었음에도 불구하고....
'start'란 문구가 반복하여 나왔다.
이것때문에 128 모듈을 하나 더 만들어버렸다... 그럼에도 똑같은 현상이 일어나네......
(어차피 128 모듈이 하나 더 필요하긴 했다.)
그래서 이런저런 코딩을 변경하던중 인터럽트가 2개이고 ISR 이 하나 정의되지 않은것을 찾아내었다.
그럼 왜?.... 하필 RESET 인가?.....
그림에서와 같이 인터럽트가 발갱하게 되면 IVT(Interrpt Vector Table)을 참조하게 된다.
IVT에 있는 주소값을 참조하여 ISR로 이동하게 되고 ISR이 끝나면 메인 프로그램으로 복귀하게 된다.
ISR을 선언하지 않아 IVT에 들어가게될 주소값이 존재하지 않게 되면
ISR은 0으로 남게 되고 인터럽트 발생시 리셋 인터럽트를 발생시키게 되는것이다. (리셋의 IVT의 주소값은 0이다.)
항상 코드 생성기를 사용하다보니 전혀 생각지도 못한 응답이 나와버렸다....
어쩌면 당연한.....
역시 소자는 거짓말을 하지 않는것인가?..... 문제는 유저에게 있는것이지........
오늘 하루도 여러모로 유저불량을 체험하며 하루를 마감하는군.......
LED 테스트 하면서는 오실로스코프 때문에 전원이 Vdd로 올라가지 않아
FET로 LED가 스위칭 되지 않는 어처구니 없는 실수의 원인을 찾으려고 삽질한걸 생각하면.....
여러모로 배운것도 많고 아쉬운 것도 많은 날이다.