AVR - Chapter 11 황 지 연
16비트 타이머/인터럽트 타이머/카운터 1과 3는 16비트 구조로서 OVERFOLW, PWM, Input Capture 비슷한 기능을 가지고 제어방식도 비슷하다. 타이머/카운터 1, 3의 특징 16비트( 0x0000 ~ 0xFFFF ) 구조 10비트(0x000 ~ 0x3FF) 프리스케일러 Overflow, Output Compare Match A/B/C, Input Capture 인터럽트 Output Compare Match 할 때 타이머가 클리어 된다.(CTC 모드)
16비트 타이머/인터럽트 타이머/카운터 1, 3의 동작 내/외부 클럭 중 하나를 선택하여 기준 클럭으로 삼는다. 타이머/카운터 1, 3은 0x0000~0xFFFF까지 Count하여 Overflow되면 OVF 인터럽트가 걸린다. 타이머/카운터 1, 3은 0x0000~0xFFFF까지 Count하다가 지속적으로 TCNT값과 OCR값을 비교하여 같으면 COMP 인터럽트가 걸린다. 타이머/카운터 1, 3은 외부 ICn핀으로부터 트리거 신호가 입력되면 현재의 TCNTn의 값이 입력캡쳐 레지스터 ICRn으로 저장되면서 IC 인터럽트가 걸린다.
16비트 타이머/인터럽트 타이머/카운터 1의 블록도
16비트 타이머/인터럽트 타이머/카운터 1 관련 레지스터 타이머/카운터 1을 제어 상태레지스터(SREG) TCCR1A, TCCR1B, TCCR1C, TCNT1H, TCNT1L, OCR1AH, OCR1AL, OCR1BH, OCR1BL, OCR1CH, OCR1CL, ICR1H, ICR1L, SFIOR, TIMSK, ETIMSK, TIFR, ETIFR
16비트 타이머/인터럽트 TIMSK(Timer/Counter Interrupt Mask Register) 타이머/카운터0~2 에서 발생하는 인터럽트를 개별적으로 허용하는 기능을 수행하는 레지스터 Bit 5 – TICIE1(Timer/Counter1 Input Capture Interrupt Enable) TICIE1=1로 Set시켜주면 Input Capture Interrupt가 활성화된다. CAPT인터럽트를 사용하려면 SREG의 I=1인 상태여야 한다. Bit 4, 3 – OCIE1x(Timer/Counter1 Output Compare Match A, B Interrupt Enable) OCIE1x=1로 Set시켜주면 Output Compare Match Interrupt가 활성화된다. COMP인터럽트를 사용하려면 SREG의 I=1인 상태여야 한다. Bit 2 – TOIE1(Timer/Counter1 Overflow Interrupt Enable) TOIE1=1로 Set시켜주면 Overflow Interrupt가 활성화된다. OVF인터럽트를 사용하려면 SREG의 I=1인 상태여야 한다.
16비트 타이머/인터럽트 ETIMSK(Extended Timer/Counter Interrupt Mask Register) 타이머/카운터1, 3 에서 발생하는 인터럽트를 개별적으로 허용하는 기능을 수행하는 레지스터 Bit 0 – OCIE1C(Timer/Counter1 Output Compare Match C Interrupt Enable) OCIE1C=1로 Set시켜주면 Output Compare Match C Interrupt가 활성화된다. COMP인터럽트를 사용하려면 SREG의 I=1인 상태여야 한다.
16비트 타이머/인터럽트 TIFR(Timer/Counter Interrupt Flag Register) Bit 5 – ICF1(Timer/Counter1 Input Capture Flag) 타이머/카운터 1의 외부 IC1핀의 입력캡쳐신호 또는 아날로그비교기의 신호로 인하여 캡쳐동작이 되면 이 비트가 1로 Set되면서 입력캡쳐 인터럽트가 요청된다. 이 비트는 인터럽트 처리의 시작과 함께 0으로 Clear된다. Bit 4, 3 – OCF1x(Timer/Counter1 Output Compare Match A, B Flag) TCNT1값과 OCR1값을 비교하여 이것이 같으면 이 비트가 1로 Set되면서 출력비교 인터럽트가 요청된다. 이 비트는 인터럽트 처리의 시작과 함께 0으로 Clear된다. Bit 0 – TOV1(Timer/Counter1 Overflow Flag) 타이머/카운터1에서 Overflow가 발생되면 이 비트가 1로 Set되면서 출력비교 인터럽트가 요청된다. 이 비트는 인터럽트 처리의 시작과 함께 0으로 Clear된다.
16비트 타이머/인터럽트 ETIFR(Extended Timer/Counter Interrupt Flag Register) Bit 0 – OCF1C(Timer/Counter1 Output Compare Match C Flag) TCNT1값과 OCR1값을 비교하여 이것이 같으면 이 비트가 1로 Set되면서 출력비교 C인터럽트가 요청된다. 이 비트는 인터럽트 처리의 시작과 함께 0으로 Clear된다.
16비트 타이머/인터럽트 TCCR1A(Timer/Counter1 Control Register A) Bit 1,0 – WGM11, WGM10 (Waveform Generation Mode) : 파형 출력 모드 TCCR1C 레지스터의 WGM00과 결합하여 타이머/카운터1의 동작모드를 설정한다.
16비트 타이머/인터럽트
16비트 타이머/인터럽트 Bit (7,6), (5,4), (3,2) – COM1x1, COM1x0 (Compare Match Output A, B, C Mode) Mode COM1x1 COM1x0 설명 PWM모드가 아닌 경우 (Normal / CTC) 범용 입출력포트 (OC1x 출력 차단) 1 비교매치>> OC1x Toggle 출력 비교매치>> OC1x = 0 출력 비교매치>> OC1x = 1 출력
16비트 타이머/인터럽트 Mode COM1x1 COM1x0 설명 FAST PWM 범용 입출력포트 (OC1x 출력 차단) 1 범용 입출력포트 (OC1x 출력 차단) 1 모드15의 경우 OC1A 토글, 나머지 차단 나머지의 경우 OC1x 출력 차단 비교매치>> OC1x = 0 출력 오버플로우>> OC1x = 1 출력 비교매치>> OC1x = 1 출력 오버플오우>> OC1x = 0 출력 Mode COM1x1 COM1x0 설명 Phase (and Frequency) Correct PWM 범용 입출력포트 (OC1x 출력 차단) 1 모드9, 11의 경우 비교매치에서 OC1A 토글출력, 나머지 차단 나머지의 경우 OC1x 출력 차단 상향카운터 비교매치>> OC1x = 0 출력 하향카운터 비교매치>> OC1x = 1 출력 상향카운터 비교매치>> OC1x = 1 출력 하향카운터 비교매치>> OC1x = 0 출력
16비트 타이머/인터럽트 TCCR1B(Timer/Counter1 Control Register B) Bit 7 – ICNC1(Input Capture Noise Canceler) 이 비트를 1로 Set해주면 입력캡쳐 단자 IC1으로 입력되는 캡쳐신호를 위한 노이즈 제거회로가 작동된다. 노이즈 제거회로가 작동되면 입력캡쳐신호를 필터링하게 되는데 이를 이용하면 시스템클럭의 4주기만큼 지연되어 작동된다. Bit 6 – ICES1(Input Capture Edge Select) 입력캡쳐 단자 IC1으로 입력되는 신호의 엣지의 검출 방법을 결정짓는다. ICES1=1 이면 상승 엣지일 때 검출된다. ICES1=0 이면 하상 엣지일 때 검출된다.
16비트 타이머/인터럽트 Bit 2,1,0 – CS12,11,10(Clock Select)
16비트 타이머/인터럽트 TCCR1C(Timer/Counter1 Control Register C) Bit 7,6,5 FOC1A,B,C(Force Output Compare A, B, C) 강제로 OC1A, B, C 단자에 출력비교 매치 신호를 출력
16비트 타이머/인터럽트 TCNT1H, TCNT1L (Timer/Counter Register 1) 타이머/카운터 1의 16비트 카운터값을 저장하고 있는 레지스터
16비트 타이머/인터럽트 OCR1xH, OCR1xL (Timer/Counter Output Compare Register 1) 타이머/카운터 1의 카운터값인 TCNT1과 비교하여 OC1A, B, C 단자에 출력신호를 발생하기 위한 16비트 값을 저장하고 있는 레지스터
16비트 타이머/인터럽트 ICR1 입력캡쳐신호 IC1에 의하여 TCNT1값을 캡쳐하여 저장하는 16비트 레지스터이다. (Timer/Counter Input Compare Register 1) 입력캡쳐신호 IC1에 의하여 TCNT1값을 캡쳐하여 저장하는 16비트 레지스터이다.
16비트 타이머/인터럽트 SFIOR(Special Function I/O Register) Bit 7 Bit 0 TSM(Timer/Counter Synchronization Mode) 모든 타이머/카운터들을 동기화시키는 기능을 수행한다. Bit 0 PSR321(Prescaler Reset Timer/Counter0) 타이머/카운터1~3의 프리스케일러를 리셋 시키며 동작 후에 자동적으로 클리어 된다.
16비트 타이머/인터럽트 타이머/카운터 1 의 동작모드 Normal Mode 일반적인 타이머 오버플로우 인터럽트가 필요할 때 사용 입력캡쳐 동작이 필요할 때 사용 상향카운터 0x0000 ~ 0xFFFF 계수동작 반복 카운트 도중 Clear 없음 오버플로우(OVF) 인터럽트 (MAX=0xFFFF값일 때 발생) 비교매치(COMP) 인터럽트 (파형을 예상하지 못하기 때문에 추천하지 않음)
16비트 타이머/인터럽트 CTC Mode(Clear Timer on Compare Match Mode) 주파수 분주 기능으로 주로 사용 상향카운터 WGM 값에 의하여 Mode 4, 12는 TCNT1값과 비교하는 값이 OCR1x,ICR1으로 다르다. 0x0000 ~ OCR1x(ICR1) 계수 동작 반복 OCR1x(ICR1) 값과 TCNT1값이 같으면 카운트 도중 Clear 오버플로우(OVF) 인터럽트 (COMP인터럽트와 동일하게 작동되기 때문에 추천하지 않음) 비교매치(COMP) 인터럽트 Mode COM1x1 COM1x0 설명 PWM모드가 아닌 경우 (Normal / CTC) 범용 입출력포트 (OC1x 출력 차단) 1 비교매치>> OC1x Toggle 출력 비교매치>> OC1x = 0 출력 비교매치>> OC1x = 1 출력
16비트 타이머/인터럽트
16비트 타이머/인터럽트 FAST PWM 높은 주파수 PWM 파형발생이 필요할 때 사용 상향카운터 (Single-Slope Operation) 0x00 ~ TOP 계수 동작 반복 TOP값은 모드에 따라서 0x00FF, 0x01FF 0x03FF, ICR1, OCR1A으로 설정 가능하다. TCNT1과 OCR1x의 Compare Match되면 OC1x에 LOW출력(COM0 1:0 = 10) TOP → 0x0000 오버플로우되면 OC1x에 HIGH출력(COM0 1:0 = 10) Mode COM1x1 COM1x0 설명 FAST PWM 범용 입출력포트 (OC1x 출력 차단) 1 모드15의 경우 OC1A 토글, 나머지 차단 나머지의 경우 OC1x 출력 차단 비교매치>> OC1x = 0 출력 오버플로우>> OC1x = 1 출력 비교매치>> OC1x = 1 출력 오버플오우>> OC1x = 0 출력
16비트 타이머/인터럽트
16비트 타이머/인터럽트 Phase Correct PWM (위상교정 PWM) 높은 분해능의 PWM출력 파형을 발생하는데 사용 (Dual-Slope Operation)- 상향카운터 0x0000 → TOP 하향카운터 TOP → 0x0000 0x0000 ~ TOP ~ 0x0000 계수 동작 반복 TOP값은 모드에 따라서 0x00FF, 0x01FF 0x03FF, ICR1, OCR1A으로 설정 가능하다. 상향카운터 비교매치>> OC1x = 0 출력(COM0 1:0 = 10) 하향카운터 비교매치>> OC1x = 1 출력(COM0 1:0 = 10) Mode COM1x1 COM1x0 설명 Phase (and Frequency) Correct PWM 범용 입출력포트 (OC1x 출력 차단) 1 모드9, 11의 경우 비교매치에서 OC1A 토글출력, 나머지 차단 나머지의 경우 OC1x 출력 차단 상향카운터 비교매치>> OC1x = 0 출력 하향카운터 비교매치>> OC1x = 1 출력 상향카운터 비교매치>> OC1x = 1 출력 하향카운터 비교매치>> OC1x = 0 출력
16비트 타이머/인터럽트 Phase and Frequency Correct PWM (위상 및 주파수 교정 PWM) (Dual-Slope Operation)- 상향카운터 0x0000 → TOP 하향카운터 TOP → 0x0000 0x0000 ~ TOP ~ 0x0000 계수 동작 반복 TOP값은 모드에 따라서 ICR1, OCR1A으로 설정 가능하다. 상향카운터 비교매치>> OC1x = 0 출력(COM0 1:0 = 10) 하향카운터 비교매치>> OC1x = 1 출력(COM0 1:0 = 10) Phase Correct PWM과의 다른 점은 TOP값이 ICR1, OCR1A으로만 설정가능 하다는 것과 그 값이 갱신할 때 TCNT1=TOP일 때 갱신되는 것이 아니라 TCNT1값이 0x0000으로 되는 순간 갱신된다는 점이다. 이러한 방식은 PWM파형을 완벽히 대칭을 이루게 한다. TOP값이 수시로 변화시켜 주파수가 가변 되는 PWM의 경우에 사용하면 Phase Correct PWM에 비하여 유리하다.
16비트 타이머/인터럽트