먼저 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 인터럽트가 동작됩니다. ^^
반응형
'b. 임베디드 > AVR' 카테고리의 다른 글
[ATtiny1616] 소프트웨어 리셋(Reset) 사용하기 (0) | 2022.05.07 |
---|---|
[ATtiny1616] Watchdog 사용하기 (0) | 2022.05.04 |
[ATtiny1616] ADC 함수 만들기 (0) | 2022.05.02 |
[ATtiny1616] TCB를 이용한 millis()함수 만들기 (0) | 2022.04.30 |
[ATtiny1616] GPIO 예제 (0) | 2022.04.28 |
[ATtiny1616] 메인 Clock 설정 (0) | 2022.04.27 |
[AVR128DA48] 타이머 TCB0 예제 (0) | 2022.04.06 |
[AVR128DA48] TWI (I2C) 동작 (PCA9685) (0) | 2022.04.05 |