430 likes | 602 Views
AVR128 의 내장 I/O 및 Timer/Count 의 이해. Robotics_LAB 발표자 : 유 홍 선. AVR128 의 내장 I/O 기능. I/O 제어 I/O PORT 구성 8 비트 / 양방향 / 범용 / 병렬 I/O 포트 (PORT A~F) 6 개 5 비트 / 양방향 / 범용 / 병렬 I/O 포트 (PORT G) 1 게 I/O PORT 특징 Read_modify_Write 동작 최대 구동전류 40mA 풀업저항 (Pull-up resistor) 설정 가능.
E N D
AVR128의 내장 I/O 및 Timer/Count의 이해 Robotics_LAB 발표자 : 유 홍 선
AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT 구성 • 8비트/양방향/범용/병렬 I/O포트(PORT A~F) 6개 • 5비트/양방향/범용/병렬 I/O포트(PORT G) 1게 • I/O PORT 특징 • Read_modify_Write 동작 • 최대 구동전류 40mA • 풀업저항(Pull-up resistor) 설정 가능
AVR128의 내장 I/O 기능 • I/O 제어 • I/O 관련 레지스터 : 각 포트에는 3개의 I/O레지스터(DDRx, PORTx, PINx) 영역을 가진다. • DDRx(Data Direction Register) • 입출력의 방향을 설정 • PORTx(Data Register) • 데이터 출력 • PINx(Port Input Pins Address) • 포트의 입력 • SFIOP(Special Function I/O Register) • Bit2 PUD(Pull-up Disable) : 모든 포트의 풀업저항 설정
AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 출력 제어 • DDRx 레지스터의 각 비트를 1로 셋트하면 해당포트의 핀이 출력 핀으로 설정된다. • PORTx 레지스터의 각 비트를 1로 세트하면 해당포트의 핀이 1값을 출력, 0으로 세트하면 해당포트의 핀이 0값을 출력한다.
AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 출력 제어 • 예제) PORTC를 출력으로 설정 PORTC에 데이터를 출력
AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 출력 제어 • 동작 결과)
AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 입력 제어 • DDRx 레지스터의 각 비트를 0으로 클리어 하면 해당포트의 핀이 입력 핀으로 설정된다. • PINx 레지스터의 각 비트를 읽어 들이면 해당포트의 입력 값을 알 수 있다.
AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 입력 제어 • 예제) PORTD를 입력으로 설정 PORTC는 출력으로 설정 PIND를 이용하여 PORTD의 상태를 입력 받음
AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 입력 제어 • 동작 결과)
AVR128의 내장 I/O 기능 • I/O 제어 • I/O 부가기능 • PORT A - 시분활다중화된 데이터버스 - 하위 어드레스 버스 • PORT B - 타이머/카운트 - SPI • PORT C - 상위 어드레스 버스 • PORT D - 타이머/카운트 - 외부인터럽트 - USART1 - TWI • PORT E - 타이머카운트 - 외부인터럽트 - USART0 • PORT F - A/D컨버터 - JTAG • PORT G - 타이머/카운트 - 외부메모리 인터페이스
AVR128의 Timer/Count • 인터럽트 • 인터럽트(Interrupt)란? • CPU 외부의 하드웨어적인 요구에 의해서 정상적인 프로그램의 실행 순서를 변경하여 보다 시급한 작업을 먼저 수행한 후에 다시 원래의 프로그램으로 복귀하는 작업
AVR128의 Timer/Count • 인터럽트 • 인터럽트의 종류 • 총 35종의 리셋 및 인터럽트 벡터를 가지고 있다. • RESET(1개) • Ext.INT(8개) • TIMER 0(2개) • TIMER 1(5개) • TIMER 2(2개) • TIMER 3(5개) • USART0(3개) • USART1(3개) • ADC(1개) • 기타(5개)
AVR128의 Timer/Count • 인터럽트 • 인터럽트의 우선순위 • 인터럽트의 요청이 중복될 경우를 대비하여 하드웨어적으로 우선순위를 정해두었다.
AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트(INT0~7)의 특징 • 외부 인터럽트 INT0~7핀의 트리거 동작으로 인터럽트 발생 • LOW/상승엣지/하강엣지의 방식으로 트리거 신호를 선택할 수 있다. • 외부 인터럽트는 INT0~7핀의 입/출력 방향에 관계없이 인터럽트가 발생된다. • INT4~7 : I/O클럭이 있어야만 사용가능 • INT0~3 : 비동기적 검출이 가능(슬립모드를 깨울 때 이용)
AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트 관련 레지스터 • SREG (Status Register) Bit7. I (Global Interrupt Enable) : 모든 인터럽트 활성화 비트
AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트 관련 레지스터 • EIMSK (External Interrupt Mask Register) • INT7~0 비트를 Set 시키면 해당 핀이 활성화 된다.
AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트 관련 레지스터 • EICRA (External Interrupt Control Register A) • 외부 인터럽트의 트리거 방식을 LOW/상승엣지/하강엣지 중에 선택하는 레지스터
AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트 관련 레지스터 • EICRB (External Interrupt Control Register B) • 외부 인터럽트의 트리거 방식을 LOW/상승엣지/하강엣지 중에 선택하는 레지스터
AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트 관련 레지스터 • EICFR (External Interrupt Flag Register) • 외/내부로부터 INT0~7핀에 인터럽트가 요청되면 해당 비트가 Set 된다. 그 후에 인터럽트 루틴이 실행될 때 해당 비트가 Clear 된다.
AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트의 동작 인터럽트가 활성화(SERG.7/EIMSK 해당 비트 활성화) 외부INT의 동작 엣지나 논리신호에 의해 인터럽트 요청 해당 EIFR레지스터가 Set 인터럽트 루틴을 실행(해당 EIFR레지스터가 Clear)
AVR128의 Timer/Count • 외부 인터럽트 • 예제) 인터럽트 루틴 SREG, EIMSK 레지스터 설정
AVR128의 Timer/Count • 외부 인터럽트 • 동작결과)
AVR128의 Timer/Count • 타이머/카운트 • ATmega128는 4개의 타이머/카운트로 구성되어있으며, 이중 타이머/카운트 0은 8비트 구조로서 카운터로 이용될 때 타이머카운트0의 카운터입력이 TOC1과 0으로 받아 RTC기능을 가지는 것을 제외 하고는 타이머/카운트 2와 기능이 같으며 타이머카운트1은 16비트 구조로서 타이머/카운터 3과 기능이 같다. • 타이머는 MCU의 내부클럭(clkI/O >분주비>clkT)을 이용하여 일정시간 간격의 펄스를 만들어 내거나 일정시간 경과 후에 인터럽트를 발생시키는 기능 • 카운터는 외부 핀(TOSC1, TOSC2, T1, T2, T3)을 통해서 들어오는 펄스를 계수(Edge Detector)하여 Event Count로서 동작하는 것을 말한다.
AVR128의 Timer/Count • 타이머/카운트 0, 2 제어 • 타이머/카운트 0과 2는 8비트 구조로서 OVERFOLW, PWM 비슷한 기능을 가지고 제어방식도 비슷하다. 차이점이 있다면 타이머/카운트 0은 32.768kHz의 크리스탈을 접속하는 TOSC1 및 TOSC2 단자를 가지고 있어서 RTC의 기능을 갖도록 할 수 있으며 다른 타이머/카운트와는 틀리게 내부 클럭을 사용하든 외부의 클럭을 사용하든 모두 프리스케일러의 분주기능을 사용할 수 있다는 것이다.
AVR128의 Timer/Count • 타이머/카운트 0, 2의 특징 • 8비트(0x00 ~ 0xff) 구조 • 10비트(0x00 ~ 0x3ff) 프리스케일러 • Overflow와 Output Compare Match 인터럽트 • Output Compare Match 할 때 타이머가 클리어 된다. • 타이머/카운트 0의 경우 다른 타이머/카운터와는 색다른 기능을 가진다. • RTC 기능 • 타이머/카운트 모두 프리스케일러를 사용 • I/O 클럭과 독립된 외부 32.768kHz 크리스탈에 동작가능
AVR128의 Timer/Count • 타이머/카운트 0, 2의 동작 • 내/외부 클럭 중 하나를 선택하여 기준 클럭으로 삼는다. • 타이머/카운터 0, 2은 0x00~0xff까지 Count하여 Overflow되면 OVF 인터럽트가 걸린다. • 타이머/카운트 0, 2은 0x00~0xff까지 Count하다가 지속적으로 TCNT값과 OCR값을 비교하여 같으면 COMP 인터럽트가 걸린다.
AVR128의 Timer/Count • 타이머/카운트 0의 Counter Unit
AVR128의 Timer/Count • 타이머/카운트 0의 Output Compare Unit
AVR128의 Timer/Count • 타이머/카운트 0의 블록도
AVR128의 Timer/Count • 타이머/카운트 0 관련 레지스터 • 타이머/카운트 0을 제어하기 위해서는 상태레지스터(SREG)와 타이머/카운트 0관련 레지스터(TIMSK, TIFR, TCCR0, TCNT0, OCR0, ASSR, SFIOR)의 사용법을 알아야 한다.
AVR128의 Timer/Count • 타이머/카운트 0 관련 레지스터 • TIMSK(Timer/Counter Interrupt Mask Register) • Bit 1 – OCIE0(Timer/Counter0 Output Compare Match Interrupt Enable) • OCIE=1로 Set시켜주면 Output Compare Match Interrupt가 활성화 • 된다. • Bit 0 – TOIE0(Timer/Counter Overflow Interrupt Enable) • TOIE=1로 Set시켜주면 Overflow Interrupt가 활성화된다. • OVF인터럽트를 사용하려면 SREG의 I=1인 상태여야 한다.
AVR128의 Timer/Count • 타이머/카운트 0 관련 레지스터 • TIFR(Timer/Counter Interrupt Flag Register) • Bit 1 – OCF0(Output Compare Match Flag) • TCNT0값과 OCR0값을 비교하여 이것이 같으면 이 비트가 1로 Set되면 • 서 출력비교 인터럽트가 요청된다. 이 비트는 인터럽트 처리의 시작과 • 함께 0으로 Clear된다. • Bit 0 – TOV0(Timer/Count Overflow Flag) • 타이머/카운트에서 Overflow가 발생되면 이 비트가 1로 Set되면서 출 • 력비교 인터럽트가 요청된다. 이 비트는 인터럽트 처리의 시작과 함께 • 0으로 Clear된다.
AVR128의 Timer/Count • 타이머/카운트 0 관련 레지스터 • TCCR0(Timer/Counter Control Register 0) : 동작모드설정/분주비 설정 등 • Bit 7 – FOC0(Force Output Compare) • 강제로 OSC0 단자에 출력비교 패치 신호를 출력 • Bit 3,6 – WGM01,WGM00(Waveform Generation Mode) • 파형 출력 모드 • Bit 5,4 – COM01, COM00(Compare Match Output Mode) • 비교패치 출력 모드 • Bit 2,1,0 – CS02~CS00(Clock Select)
AVR128의 Timer/Count • 타이머/카운트 0 관련 레지스터 • TCNT0(Timer/Counter Register 0) : 타이머/카운트 0의 8비트 카운터 값을 저장하고 있는 레지스터 • OCR0(Timer/Counter Output Compare Register 0) : 타이머/카운트 0의 카운터 값인 TCNT0과 비교하여 OC0 단자에 출력신호를 발생하기 위한 8비트 값을 저장하고 있는 레지스터
AVR128의 Timer/Count • 타이머/카운트 0 관련 레지스터 • ASSR (Asynchronous Status Register) • Bit 3 – AS0(Asynchronous Status Register) • AS0 = 0 : 내부클럭 (clkI/O) 동기모드 • AS0 = 1 : 외부클럭 (TOSC1) 비동기모드 • Bit 2 – TCNOUB (Timer/Counter0 Update Busy) • Bit 1 – OCROUB (Output Compare Register0 Update Busy) • Bit 0 – TCROUB (Timer/Count Control Register0 Update Busy)
AVR128의 Timer/Count • 타이머/카운트 0 관련 레지스터 • SFIOR(Special Function I/O Register) • Bit 7 – TSM(Timer/Counter Synchronization Mode) • 모든 타이머/카운터들을 동기화시키는 기능을 수행한다. • Bit 1 – PSR0(Prescaler Reset Timer/Counter0) • 타이머/카운트0의 프리스케일러를 리셋 시키며 동작 후에 자동적으로 • 클리어 된다.
AVR128의 Timer/Count • 타이머/카운트 0 의 동작모드 • Normal Mode • 일반적인 타이머 오버플로우 인터럽트가 필요할 때 사용 • 상향카운터 • 0x00~0xff 계수동작 반복 • 카운트 도중 Cleat 없음 • 오버플로우(OVF) 인터럽트(MAX=0xff값을 때 발생) • 비교패치(COMP) 인터럽트(파형을 예상하지 못하기 때문에 추천하지 않음)
AVR128의 Timer/Count • 타이머/카운트 0 의 동작모드 • CTC Mode(Clear Timer on Compare Match Mode) • 주파수 분주 기능으로 주로 사용 • 상향카운터 • 0x00~0CR0 계수 동작 반복 • 0CR0값과 TCNT0값이 같으면 카운트 도중 Clear • 오버프로우(OVF) 인터럽트 (MAX=0CR0값일 때 발생, COMP인터럽트와 동일하게 작동되기 때문에 추천하지 않음) • 비교패치(COMP) 인터럽트
AVR128의 Timer/Count • 타이머/카운트 0 의 동작모드 • FAST PWM • 높은 주파수 PWM 파형발생이 필요할 때 사용 • 상향카운터 (Single-Slope Operation) • 0x00~0xFF 계수 동작 반복 • TCNT0과 OCR0의 Compare Match되면 OC0에 LOW출력(COM0 1:0 = 2) • 0xFF → 0x00 오버플로우되면 OC0에 HIGH출력(COM 1:0 = 2)
AVR128의 Timer/Count • 타이머/카운트 0 의 동작모드 • Phase Correct PWM • 높은 분해능의 PWM출력 파형을 발생하는데 사용 • 상향카운터 0x00 → 0xFF • 하향카운터 0xFF → 0x00 • 0x00 ~ 0xFF ~ 0x00 계수 동작 반복 • 상향카운터 비교패치>> OC0 = 0출력(COM1:0=2) • 하향카운터 비교패치>> OC0 = 1출력(COM1:0=2)
AVR128의 Timer/Count • 타이머/카운트 0 • 예제) 인터럽트 루틴 TCCR0, TCNT0, TIMSK, SREG레지스터 설정
AVR128의 Timer/Count • 타이머/카운트 0 • 동작결과)
Thank You http://cafe.naver.com/roboticslab.cafe