AVR128DA시리즈에는 타이머가 4가지 종류가 있습니다. TCA, TCB, TCD, RTC
이번에는 TCB0 예제 중 default로 설정되어 있는 Periodic Interrupt를 진행하도록 하겠습니다.
먼저 타이머 설정 부분입니다.
TCB0.CTRLA = TCB_ENABLE_bm; TCB0.CCMP = F_CPU * 1 / 1000 - 1; // 1ms TCB0.INTCTRL = TCB_CAPT_bm;
다음은 데이터 시트에서 발췌한 내용입니다.

블럭 다이어그램을 보면 Capture interrupt는 타이머 CNT가 CCMP와 동일해질때 인터럽트가 발생하도록 되어 있습니다.

클럭을 설정하기 위한 로직입니다. TCB의 경우 DIV1과 DIV2로 선택지가 적네요...
TCB0 인터럽트 ISR입니다.
ISR(TCB0_INT_vect) { PORTD.OUTTGL = PIN2_bm; TCB0.INTFLAGS = 0xFF; }
위와 같이 설정하면 1ms당 인터럽트가 발생함을 알 수 있습니다.
매번 해당 글을 작성하면서 데이터시트를 얼마나 자세히 살펴보고 분석하느냐에 따라 실력이 좌지우지 하는 듯 합니다.
ps : 항상 느끼지만 저도 아직 멀었네요... ㅜㅜ
반응형
'b. 임베디드 > AVR' 카테고리의 다른 글
[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] TWI (I2C) 동작 (PCA9685) (0) | 2022.04.05 |
[AVR128DA] Bootloader (0) | 2021.12.01 |
AVR128DA48 CURIOSITY Nano 시작... (0) | 2021.11.12 |
[ATtiny1616] 40W BLDC Motor 제어 (2) | 2021.06.23 |