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 인터럽트가 동작됩니다. ^^

반응형