1 / 43

AVR128 의 내장 I/O 및 Timer/Count 의 이해

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) 설정 가능.

gwyn
Télécharger la présentation

AVR128 의 내장 I/O 및 Timer/Count 의 이해

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AVR128의 내장 I/O 및 Timer/Count의 이해 Robotics_LAB 발표자 : 유 홍 선

  2. 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) 설정 가능

  3. 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) : 모든 포트의 풀업저항 설정

  4. AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 출력 제어 • DDRx 레지스터의 각 비트를 1로 셋트하면 해당포트의 핀이 출력 핀으로 설정된다. • PORTx 레지스터의 각 비트를 1로 세트하면 해당포트의 핀이 1값을 출력, 0으로 세트하면 해당포트의 핀이 0값을 출력한다.

  5. AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 출력 제어 • 예제) PORTC를 출력으로 설정 PORTC에 데이터를 출력

  6. AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 출력 제어 • 동작 결과)

  7. AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 입력 제어 • DDRx 레지스터의 각 비트를 0으로 클리어 하면 해당포트의 핀이 입력 핀으로 설정된다. • PINx 레지스터의 각 비트를 읽어 들이면 해당포트의 입력 값을 알 수 있다.

  8. AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 입력 제어 • 예제) PORTD를 입력으로 설정 PORTC는 출력으로 설정 PIND를 이용하여 PORTD의 상태를 입력 받음

  9. AVR128의 내장 I/O 기능 • I/O 제어 • I/O PORT의 입/출력 제어 • PORT 입력 제어 • 동작 결과)

  10. 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 - 타이머/카운트 - 외부메모리 인터페이스

  11. AVR128의 Timer/Count • 인터럽트 • 인터럽트(Interrupt)란? • CPU 외부의 하드웨어적인 요구에 의해서 정상적인 프로그램의 실행 순서를 변경하여 보다 시급한 작업을 먼저 수행한 후에 다시 원래의 프로그램으로 복귀하는 작업

  12. 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개)

  13. AVR128의 Timer/Count • 인터럽트 • 인터럽트의 우선순위 • 인터럽트의 요청이 중복될 경우를 대비하여 하드웨어적으로 우선순위를 정해두었다.

  14. AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트(INT0~7)의 특징 • 외부 인터럽트 INT0~7핀의 트리거 동작으로 인터럽트 발생 • LOW/상승엣지/하강엣지의 방식으로 트리거 신호를 선택할 수 있다. • 외부 인터럽트는 INT0~7핀의 입/출력 방향에 관계없이 인터럽트가 발생된다. • INT4~7 : I/O클럭이 있어야만 사용가능 • INT0~3 : 비동기적 검출이 가능(슬립모드를 깨울 때 이용)

  15. AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트 관련 레지스터 • SREG (Status Register) Bit7. I (Global Interrupt Enable) : 모든 인터럽트 활성화 비트

  16. AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트 관련 레지스터 • EIMSK (External Interrupt Mask Register) • INT7~0 비트를 Set 시키면 해당 핀이 활성화 된다.

  17. AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트 관련 레지스터 • EICRA (External Interrupt Control Register A) • 외부 인터럽트의 트리거 방식을 LOW/상승엣지/하강엣지 중에 선택하는 레지스터

  18. AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트 관련 레지스터 • EICRB (External Interrupt Control Register B) • 외부 인터럽트의 트리거 방식을 LOW/상승엣지/하강엣지 중에 선택하는 레지스터

  19. AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트 관련 레지스터 • EICFR (External Interrupt Flag Register) • 외/내부로부터 INT0~7핀에 인터럽트가 요청되면 해당 비트가 Set 된다. 그 후에 인터럽트 루틴이 실행될 때 해당 비트가 Clear 된다.

  20. AVR128의 Timer/Count • 외부 인터럽트 • 외부 인터럽트의 동작 인터럽트가 활성화(SERG.7/EIMSK 해당 비트 활성화) 외부INT의 동작 엣지나 논리신호에 의해 인터럽트 요청 해당 EIFR레지스터가 Set 인터럽트 루틴을 실행(해당 EIFR레지스터가 Clear)

  21. AVR128의 Timer/Count • 외부 인터럽트 • 예제) 인터럽트 루틴 SREG, EIMSK 레지스터 설정

  22. AVR128의 Timer/Count • 외부 인터럽트 • 동작결과)

  23. 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로서 동작하는 것을 말한다.

  24. AVR128의 Timer/Count • 타이머/카운트 0, 2 제어 • 타이머/카운트 0과 2는 8비트 구조로서 OVERFOLW, PWM 비슷한 기능을 가지고 제어방식도 비슷하다. 차이점이 있다면 타이머/카운트 0은 32.768kHz의 크리스탈을 접속하는 TOSC1 및 TOSC2 단자를 가지고 있어서 RTC의 기능을 갖도록 할 수 있으며 다른 타이머/카운트와는 틀리게 내부 클럭을 사용하든 외부의 클럭을 사용하든 모두 프리스케일러의 분주기능을 사용할 수 있다는 것이다.

  25. AVR128의 Timer/Count • 타이머/카운트 0, 2의 특징 • 8비트(0x00 ~ 0xff) 구조 • 10비트(0x00 ~ 0x3ff) 프리스케일러 • Overflow와 Output Compare Match 인터럽트 • Output Compare Match 할 때 타이머가 클리어 된다. • 타이머/카운트 0의 경우 다른 타이머/카운터와는 색다른 기능을 가진다. • RTC 기능 • 타이머/카운트 모두 프리스케일러를 사용 • I/O 클럭과 독립된 외부 32.768kHz 크리스탈에 동작가능

  26. AVR128의 Timer/Count • 타이머/카운트 0, 2의 동작 • 내/외부 클럭 중 하나를 선택하여 기준 클럭으로 삼는다. • 타이머/카운터 0, 2은 0x00~0xff까지 Count하여 Overflow되면 OVF 인터럽트가 걸린다. • 타이머/카운트 0, 2은 0x00~0xff까지 Count하다가 지속적으로 TCNT값과 OCR값을 비교하여 같으면 COMP 인터럽트가 걸린다.

  27. AVR128의 Timer/Count • 타이머/카운트 0의 Counter Unit

  28. AVR128의 Timer/Count • 타이머/카운트 0의 Output Compare Unit

  29. AVR128의 Timer/Count • 타이머/카운트 0의 블록도

  30. AVR128의 Timer/Count • 타이머/카운트 0 관련 레지스터 • 타이머/카운트 0을 제어하기 위해서는 상태레지스터(SREG)와 타이머/카운트 0관련 레지스터(TIMSK, TIFR, TCCR0, TCNT0, OCR0, ASSR, SFIOR)의 사용법을 알아야 한다.

  31. 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인 상태여야 한다.

  32. 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된다.

  33. 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)

  34. AVR128의 Timer/Count • 타이머/카운트 0 관련 레지스터 • TCNT0(Timer/Counter Register 0) : 타이머/카운트 0의 8비트 카운터 값을 저장하고 있는 레지스터 • OCR0(Timer/Counter Output Compare Register 0) : 타이머/카운트 0의 카운터 값인 TCNT0과 비교하여 OC0 단자에 출력신호를 발생하기 위한 8비트 값을 저장하고 있는 레지스터

  35. 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)

  36. 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의 프리스케일러를 리셋 시키며 동작 후에 자동적으로 • 클리어 된다.

  37. AVR128의 Timer/Count • 타이머/카운트 0 의 동작모드 • Normal Mode • 일반적인 타이머 오버플로우 인터럽트가 필요할 때 사용 • 상향카운터 • 0x00~0xff 계수동작 반복 • 카운트 도중 Cleat 없음 • 오버플로우(OVF) 인터럽트(MAX=0xff값을 때 발생) • 비교패치(COMP) 인터럽트(파형을 예상하지 못하기 때문에 추천하지 않음)

  38. AVR128의 Timer/Count • 타이머/카운트 0 의 동작모드 • CTC Mode(Clear Timer on Compare Match Mode) • 주파수 분주 기능으로 주로 사용 • 상향카운터 • 0x00~0CR0 계수 동작 반복 • 0CR0값과 TCNT0값이 같으면 카운트 도중 Clear • 오버프로우(OVF) 인터럽트 (MAX=0CR0값일 때 발생, COMP인터럽트와 동일하게 작동되기 때문에 추천하지 않음) • 비교패치(COMP) 인터럽트

  39. 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)

  40. 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)

  41. AVR128의 Timer/Count • 타이머/카운트 0 • 예제) 인터럽트 루틴 TCCR0, TCNT0, TIMSK, SREG레지스터 설정

  42. AVR128의 Timer/Count • 타이머/카운트 0 • 동작결과)

  43. Thank You http://cafe.naver.com/roboticslab.cafe

More Related