|
인터럽트 타이머 사용하기 예제입니다. 소스 코드는 첨부하였습니다. 우선 인터럽트 함수는 아주 짧은 시간 동안 진행하는 거라 printf와 같은 함수를 쓰면 안됩니다. 그 동안 다른 인터럽트가 또 오게 되서...문제가 계속 생기게 되죠. ICC AVR 안에 있는 마법사(application builder)로 만들어 보겠습니다. 다음 두가지에 대한 예를 보여드립니다. 1. 인터럽트 타이머 함수로 delay 함수 만들어 쓰기 우선 타이머 overflow를 enable 해 두면, 코드가 생성되면서 그 때마다 그 타이머 overflow 함수를 수행하게 됩니다. 거기서, us 타이머 나 ms 타이머 등 원하는 시간의 타이머 변수를 하나씩 증가시켜 갑니다. delay 함수에서는 일단 타이머 변수들을 초기화 한 후, 타이머의 증가를 지켜 보다가 인터럽트에 의해 변한 타이머 변수 값(여기선 twenty_ustimer 또는 ten_mstimer)을 폴링으로 지켜보면서, 원하는 시간이 지날 때까지, delay 시킵니다. 2. 일정 시간마다 원하는 동작을 하게 하기 일정 시간마다 오버 플로우 함수에서 어떤 변수를 특정 값으로로 만들어 주고, 메인 루틴에서는 그 값을 원하는 폴링으로 지켜 보다가, 값에 따른 원하는 동작을 하면 된다.
|