LETIMER를 일반 타이머처럼 사용하려고 하다가 삽질을 좀 했다.
아주 간단한 원리인데, 생각을 조금 하다가 해멨다.
- LETIMERn_CNT 레지스터는 사용자가 임의로 쓸수가 있었다. 메뉴얼에서는 쓸수가 없다고 나왔다. 이것때메 헤맸다.
(그런데, 레지스터 요약에는 RWH로 되어 있다. 쓰기가 가능하다. 메뉴얼이 좀 이상하다.)
결국은 아래와 같이 하여 간단히 해결되었다.
1. 초기화
CMU_ClockEnable(cmuClock_LETIMER0, true);
LETIMER0->CMD = 2 ; // Stop
LETIMER_IntEnable(LETIMER0, LETIMER_IF_UF);
NVIC_EnableIRQ(AIRQn);
2. 인터럽트 핸들러부분
void LETIMER0_IRQHandler(void)
{
/* Clear LETIMER0 underflow interrupt flag */
LETIMER_IntClear(LETIMER0, LETIMER_IF_UF);
LETIMER_Enable(LETIMER0, false);
}
3. 타이머 시작
LETIMER0->CNT = 1000; // [중요] Down Count Timer이므로 원하는 값으로 초기화해야 함.
LETIMER_Enable(LETIMER0, true);
4. 결론
간단하게 생각하자.
에너지마이크로 EFM32 가지고 놀다
에너지마이크로 EFM32를 가지고 논지 어언 3개월이 된 것 같다. 정말 라이브러리가 잘되어 있는 것 같다. 그래서 다른이들이 시행착오를 격지 않도록 내가 조금이나마 도움이 될까 해서 블로그에 흔적을 남기기로 했다. 많이 기대해 주시기 바랍니다.
2011년 8월 20일 토요일
2011년 7월 25일 월요일
피드 구독하기:
글 (Atom)