b. 임베디드/AVR
[ATtiny1616] TCA 타이머 사용하기
로봇쟁이
2022. 5. 3. 09:24
먼저 TCA 타이머 특징 리스트입니다.
16비트 타이머인데 Split Mode로 2개의 8비트 타이머를 사용할 수 있다는게 신기하네요
다음은 TCA타이머 블럭다이어그램입니다.
TCB와 마찬가지로 CTRLA와 CTRLB로 클럭 및 모드 설정하는 것이 유추됩니다.
다음은 클럭 로직입니다.
CLK_PER = 메인클럭을 사용한다는 것을 확인할 수 있습니다.
저는 Normal 모드를 사용하고 Overflow 인터럽트를 이용해보겠습니다.
void timerInit(void)
{
// OVF Interrupt FREQUENCY = PER / (SystemClock / Prescaler) = SEC
TCA0.SINGLE.PER = (1000*(F_CPU/1000000)) - 1;
TCA0.SINGLE.CTRLA = (1 << TCA_SINGLE_CLKSEL_DIV1_gc);
TCA0.SINGLE.INTCTRL = (0x00 << TCA_SINGLE_CMP0_bp)
| (0x00 << TCA_SINGLE_CMP1_bp)
| (0x00 << TCA_SINGLE_CMP2_bp)
| (1 << TCA_SINGLE_OVF_bp); // Overflow Interrupt: enabled
TCA0.SINGLE.CTRLA |= (1 << TCA_SINGLE_ENABLE_bp);
}
ISR(TCA0_OVF_vect)
{
t1ms.flag = true;
TCA0.SINGLE.INTFLAGS = TCA_SINGLE_OVF_bm;
}
동일하게 설정하면 1ms 인터럽트가 동작됩니다. ^^
반응형